Mercurial > hg > forks > gldragon
diff gldragon.cpp @ 25:2403030a0352
"Finish" implementing multiple lights support in scene files.
If scene defines no lights, a default light will be used.
Light objects will have default values and can redefine only color, position etc.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 22 Nov 2019 06:47:13 +0200 |
parents | c1897cfc8463 |
children | 67647ed860f0 |
line wrap: on
line diff
--- a/gldragon.cpp Fri Nov 22 05:49:14 2019 +0200 +++ b/gldragon.cpp Fri Nov 22 06:47:13 2019 +0200 @@ -185,7 +185,7 @@ // Add transforms glScalef(model.scale.x, model.scale.y, model.scale.z); - glTranslatef(model.translate.x, model.translate.y, model.translate. z); + glTranslatef(model.translate.x, model.translate.y, model.translate.z); glRotatef(model.rotate.x, 1.0f, 0.0f, 0.0f); glRotatef(model.rotate.y, 0.0f, 1.0f, 0.0f); glRotatef(model.rotate.z, 0.0f, 0.0f, 1.0f); @@ -286,6 +286,16 @@ } +void dmSetupLight(const int n, const DMLight &light) +{ + glEnable(GL_LIGHT0 + n); + glLightfv(GL_LIGHT0 + n, GL_AMBIENT, light.ambient.values); + glLightfv(GL_LIGHT0 + n, GL_DIFFUSE, light.diffuse.values); + glLightfv(GL_LIGHT0 + n, GL_SPECULAR, light.specular.values); + glLightfv(GL_LIGHT0 + n, GL_POSITION, light.position.values); +} + + int main(int argc, char *argv[]) { int startTime, cycleStart, cycleFrames = 0, totalFrames = 0; @@ -438,29 +448,25 @@ dmLinkModelShaders(model); } } - else + { float specReflection[] = { 0.8f, 0.8f, 0.8f, 1.0f }; - glEnable(GL_COLOR_MATERIAL); - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glMateriali(GL_FRONT, GL_SHININESS, 96); glMaterialfv(GL_FRONT, GL_SPECULAR, specReflection); - - glEnable(GL_LIGHT0); + } - // Define the light components and position - GLfloat ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f }; - GLfloat diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; - GLfloat specular[] = { 0.5f, 0.5f, 0.5f, 1.0f }; - GLfloat position[] = { 10.0f, 10.0f, 0.0f, 0.0f }; - - // Define the light components and position - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); - glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); - glLightfv(GL_LIGHT0, GL_SPECULAR, specular); - glLightfv(GL_LIGHT0, GL_POSITION, position); + // Define lights + if (scene.lights.size() == 0) + { + DMLight light; // Default light + dmSetupLight(0, light); + } + else + { + for (size_t n = 0; n < scene.lights.size(); n++) + dmSetupLight(n, scene.lights[n]); } // Define the camera