lights()

Lights Camera / Lights

Description

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

void

Related

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]); } }