lights()
Lights Camera / LightsDescription
Sets the default ambient light, directional light, falloff, and specular values. Equivalent to calling ambientLight() and directionalLight() with default parameters.
Syntax
void lights()
Parameters
None
Returns
voidRelated
Under the Hood
From Processing.h:
void lights();
inline void PGraphics::lights() { if(PApplet::g_papplet) PApplet::g_papplet->lights(); }
Under the Hood
From Processing.cpp:
void PApplet::lights() {
// Matches Processing Java lights() exactly:
// ambientLight(128, 128, 128)
// directionalLight(128, 128, 128, 0, 0, -1)
// Result: shadow faces = 50% brightness, front face = 100%, sides interpolated.
glEnable(GL_LIGHTING);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
// GL_COLOR_MATERIAL drives AMBIENT_AND_DIFFUSE from fill color
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
lightsEnabled = true;
lightIndex = 0;
// Zero out global ambient -- we set it explicitly via LIGHT0 ambient below
GLfloat noGlobalAmb[] = { 0.0f, 0.0f, 0.0f, 1.0f };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, noGlobalAmb);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
GLfloat zero[] = { 0.0f, 0.0f, 0.0f, 1.0f };
// LIGHT0: ambient component = 128/255 (matches Java ambientLight(128,128,128))
// This contributes equally to all faces regardless of normal.
GLfloat amb[] = { 0.502f, 0.502f, 0.502f, 1.0f }; // 128/255
// LIGHT0: diffuse component = 128/255 (matches Java directionalLight(128,128,128,...))
GLfloat dif[] = { 0.502f, 0.502f, 0.502f, 1.0f }; // 128/255
// Direction (0,0,-1) in Java = light travels toward -Z = toward-light vector (0,0,1)
// In eye space with default camera looking down -Z, (0,0,1) points at camera = front-lit
GLfloat pos[] = { 0.0f, 0.0f, 1.0f, 0.0f }; // w=0 = directional
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
glLightfv(GL_LIGHT0, GL_DIFFUSE, dif);
glLightfv(GL_LIGHT0, GL_SPECULAR, zero);
// Set in eye space so light direction is fixed relative to camera
glPushMatrix();
glLoadIdentity();
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glPopMatrix();
lightIndex = 1;
{
GLint curFbo = 0;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &curFbo);
double mv[16];
glGetDoublev(GL_MODELVIEW_MATRIX, mv);
GLboolean depthTestOn = glIsEnabled(GL_DEPTH_TEST);
GLboolean lightingOn = glIsEnabled(GL_LIGHTING);
GLboolean colorMatOn = glIsEnabled(GL_COLOR_MATERIAL);
GLfloat curFillColor[4];
glGetFloatv(GL_CURRENT_COLOR, curFillColor);
PDEBUG("PApplet::lights() TRACE: curFbo=%d depthTest=%d lighting=%d colorMaterial=%d\n",
curFbo, depthTestOn, lightingOn, colorMatOn);
PDEBUG(" mv[0]=%.3f mv[5]=%.3f mv[10]=%.3f mv[12]=%.3f mv[13]=%.3f mv[14]=%.3f\n",
mv[0], mv[5], mv[10], mv[12], mv[13], mv[14]);
double proj[16];
glGetDoublev(GL_PROJECTION_MATRIX, proj);
PDEBUG(" proj[0]=%.3f proj[5]=%.3f proj[10]=%.3f proj[11]=%.3f proj[14]=%.3f\n",
proj[0], proj[5], proj[10], proj[11], proj[14]);
PDEBUG(" currentColor (glColor state at this moment): r=%.3f g=%.3f b=%.3f a=%.3f\n",
curFillColor[0], curFillColor[1], curFillColor[2], curFillColor[3]);
}
}