[Scummvm-cvs-logs] SF.net SVN: scummvm: [22494] residual/trunk

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Tue May 16 12:06:23 CEST 2006


Revision: 22494
Author:   aquadran
Date:     2006-05-16 12:04:09 -0700 (Tue, 16 May 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22494&view=rev

Log Message:
-----------
improved a bit setup of lights

Modified Paths:
--------------
    residual/trunk/driver_gl.cpp
    residual/trunk/driver_tinygl.cpp
Modified: residual/trunk/driver_gl.cpp
===================================================================
--- residual/trunk/driver_gl.cpp	2006-05-16 17:38:04 UTC (rev 22493)
+++ residual/trunk/driver_gl.cpp	2006-05-16 19:04:09 UTC (rev 22494)
@@ -193,56 +193,69 @@
 
 void DriverGL::setupLight(Scene::Light *light, int lightId) {
 	glEnable(GL_LIGHTING);
-	float ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
-	float diffuseLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };
-	float specularLight[] = { 0.0f, 0.0f, 0.0f, 1.0f };
-	float lightPos[] = { 0.0f, 0.0f, 0.0f, 0.0f };
+	float ambientLight[] = { 0.0f, 0.0f, 0.0f, 1.0f };
+	float lightColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
+	float lightPos[] = { 0.0f, 0.0f, 0.0f, 1.0f };
 	float lightDir[] = { 0.0f, 0.0f, 0.0f, 0.0f };
+
 	lightPos[0] = light->_pos.x();
 	lightPos[1] = light->_pos.y();
 	lightPos[2] = light->_pos.z();
-	ambientLight[0] = (float)light->_color.red() / 256.0f;
-	ambientLight[1] = (float)light->_color.blue() / 256.0f;
-	ambientLight[2] = (float)light->_color.green() / 256.0f;
-//	diffuseLight[0] = (float)light->_intensity;
-//	diffuseLight[1] = (float)light->_intensity;
-//	diffuseLight[2] = (float)light->_intensity;
+//	lightColor[0] = (float)light->_color.red() / 256.0f;
+//	lightColor[1] = (float)light->_color.blue() / 256.0f;
+//	lightColor[2] = (float)light->_color.green() / 256.0f;
 
 	if (strcmp(light->_type.c_str(), "omni") == 0) {
-//		glLightfv(GL_LIGHT0 + lightId, GL_AMBIENT, ambientLight);
-		glLightfv(GL_LIGHT0 + lightId, GL_DIFFUSE, diffuseLight);
-		glLightfv(GL_LIGHT0 + lightId, GL_SPECULAR, specularLight);
+		ambientLight[0] = (float)light->_color.red() / 256.0f;
+		ambientLight[1] = (float)light->_color.blue() / 256.0f;
+		ambientLight[2] = (float)light->_color.green() / 256.0f;
+		lightColor[0] = light->_intensity / 2;
+		lightColor[1] = light->_intensity / 2;
+		lightColor[2] = light->_intensity / 2;
+		glDisable(GL_LIGHT0 + lightId);
 		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightPos);
-//		glLightf(GL_LIGHT0 + lightId, GL_SPOT_CUTOFF, 1.8f);
-//		glLightf(GL_LIGHT0 + lightId, GL_LINEAR_ATTENUATION, light->_intensity);
+		glLightfv(GL_LIGHT0 + lightId, GL_DIFFUSE, lightColor);
+		glLightfv(GL_LIGHT0 + lightId, GL_AMBIENT, ambientLight);
+		glLightfv(GL_LIGHT0 + lightId, GL_SPECULAR, lightColor);
 		glEnable(GL_LIGHT0 + lightId);
 	} else if (strcmp(light->_type.c_str(), "direct") == 0) {
+		glDisable(GL_LIGHT0 + lightId);
+		ambientLight[0] = (float)light->_color.red() / 256.0f;
+		ambientLight[1] = (float)light->_color.blue() / 256.0f;
+		ambientLight[2] = (float)light->_color.green() / 256.0f;
+		lightColor[0] = light->_intensity;
+		lightColor[1] = light->_intensity;
+		lightColor[2] = light->_intensity;
 		lightDir[0] = light->_dir.x();
 		lightDir[1] = light->_dir.y();
 		lightDir[2] = light->_dir.z();
-		lightDir[3] = 0.0f;
-//		glLightfv(GL_LIGHT0 + lightId, GL_AMBIENT, ambientLight);
-		glLightfv(GL_LIGHT0 + lightId, GL_DIFFUSE, diffuseLight);
-		glLightfv(GL_LIGHT0 + lightId, GL_SPECULAR, specularLight);
-		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightPos);
+//		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightPos);
+		glLightfv(GL_LIGHT0 + lightId, GL_DIFFUSE, lightColor);
+		glLightfv(GL_LIGHT0 + lightId, GL_AMBIENT, ambientLight);
+		glLightfv(GL_LIGHT0 + lightId, GL_SPECULAR, lightColor);
 		glLightfv(GL_LIGHT0 + lightId, GL_SPOT_DIRECTION, lightDir);
-//		glLightf(GL_LIGHT0 + lightId, GL_SPOT_CUTOFF, 1.8f);
-//		glLightf(GL_LIGHT0 + lightId, GL_SPOT_EXPONENT, 2.0f);
-//		glLightf(GL_LIGHT0 + lightId, GL_LINEAR_ATTENUATION, light->_intensity);
+		glLightf(GL_LIGHT0 + lightId, GL_CONSTANT_ATTENUATION, 0.0f);
+		glLightf(GL_LIGHT0 + lightId, GL_LINEAR_ATTENUATION, 0.0f);
+		glLightf(GL_LIGHT0 + lightId, GL_QUADRATIC_ATTENUATION, 1.0f);
 		glEnable(GL_LIGHT0 + lightId);
 	} else if (strcmp(light->_type.c_str(), "spot") == 0) {
+		glDisable(GL_LIGHT0 + lightId);
+		lightColor[0] = (float)light->_color.red() / 256.0f;
+		lightColor[1] = (float)light->_color.blue() / 256.0f;
+		lightColor[2] = (float)light->_color.green() / 256.0f;
 		lightDir[0] = light->_dir.x();
 		lightDir[1] = light->_dir.y();
 		lightDir[2] = light->_dir.z();
-		lightDir[3] = 0.0f;
-//		glLightfv(GL_LIGHT0 + lightId, GL_AMBIENT, ambientLight);
-		glLightfv(GL_LIGHT0 + lightId, GL_DIFFUSE, diffuseLight);
-		glLightfv(GL_LIGHT0 + lightId, GL_SPECULAR, specularLight);
 		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightPos);
+		glLightfv(GL_LIGHT0 + lightId, GL_DIFFUSE, lightColor);
+		glLightfv(GL_LIGHT0 + lightId, GL_AMBIENT, ambientLight);
+		glLightfv(GL_LIGHT0 + lightId, GL_SPECULAR, lightColor);
 		glLightfv(GL_LIGHT0 + lightId, GL_SPOT_DIRECTION, lightDir);
-//		glLightf(GL_LIGHT0 + lightId, GL_SPOT_CUTOFF, 1.8f);
-//		glLightf(GL_LIGHT0 + lightId, GL_SPOT_EXPONENT, 2.0f);
-//		glLightf(GL_LIGHT0 + lightId, GL_LINEAR_ATTENUATION, light->_intensity);
+		glLightf(GL_LIGHT0 + lightId, GL_SPOT_EXPONENT, 64.0f * light->_intensity);
+		glLightf(GL_LIGHT0 + lightId, GL_SPOT_CUTOFF, 90.0f);
+		glLightf(GL_LIGHT0 + lightId, GL_CONSTANT_ATTENUATION, 0.0f);
+		glLightf(GL_LIGHT0 + lightId, GL_LINEAR_ATTENUATION, 0.0f);
+		glLightf(GL_LIGHT0 + lightId, GL_QUADRATIC_ATTENUATION, 1.0f);
 		glEnable(GL_LIGHT0 + lightId);
 	} else {
 		error("Scene::setupLights() Unknown type of light: %s", light->_type.c_str());

Modified: residual/trunk/driver_tinygl.cpp
===================================================================
--- residual/trunk/driver_tinygl.cpp	2006-05-16 17:38:04 UTC (rev 22493)
+++ residual/trunk/driver_tinygl.cpp	2006-05-16 19:04:09 UTC (rev 22494)
@@ -247,56 +247,69 @@
 void DriverTinyGL::setupLight(Scene::Light *light, int lightId) {
 	assert(lightId < TGL_MAX_LIGHTS);
 	tglEnable(TGL_LIGHTING);
-	float ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
-	float diffuseLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };
-	float specularLight[] = { 0.0f, 0.0f, 0.0f, 1.0f };
-	float lightPos[] = { 0.0f, 0.0f, 0.0f, 0.0f };
+	float ambientLight[] = { 0.0f, 0.0f, 0.0f, 1.0f };
+	float lightColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
+	float lightPos[] = { 0.0f, 0.0f, 0.0f, 1.0f };
 	float lightDir[] = { 0.0f, 0.0f, 0.0f, 0.0f };
+
 	lightPos[0] = light->_pos.x();
 	lightPos[1] = light->_pos.y();
 	lightPos[2] = light->_pos.z();
-	ambientLight[0] = (float)light->_color.red() / 256.0f;
-	ambientLight[1] = (float)light->_color.blue() / 256.0f;
-	ambientLight[2] = (float)light->_color.green() / 256.0f;
-//	diffuseLight[0] = (float)light->_intensity;
-//	diffuseLight[1] = (float)light->_intensity;
-//	diffuseLight[2] = (float)light->_intensity;
+//	lightColor[0] = (float)light->_color.red() / 256.0f;
+//	lightColor[1] = (float)light->_color.blue() / 256.0f;
+//	lightColor[2] = (float)light->_color.green() / 256.0f;
 
 	if (strcmp(light->_type.c_str(), "omni") == 0) {
-//		tglLightfv(TGL_LIGHT0 + lightId, TGL_AMBIENT, ambientLight);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_DIFFUSE, diffuseLight);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPECULAR, specularLight);
+		ambientLight[0] = (float)light->_color.red() / 256.0f;
+		ambientLight[1] = (float)light->_color.blue() / 256.0f;
+		ambientLight[2] = (float)light->_color.green() / 256.0f;
+		lightColor[0] = light->_intensity / 2;
+		lightColor[1] = light->_intensity / 2;
+		lightColor[2] = light->_intensity / 2;
+		tglDisable(TGL_LIGHT0 + lightId);
 		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightPos);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_CUTOFF, 1.8f);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_LINEAR_ATTENUATION, light->_intensity);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_DIFFUSE, lightColor);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_AMBIENT, ambientLight);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPECULAR, lightColor);
 		tglEnable(TGL_LIGHT0 + lightId);
 	} else if (strcmp(light->_type.c_str(), "direct") == 0) {
+		tglDisable(TGL_LIGHT0 + lightId);
+		ambientLight[0] = (float)light->_color.red() / 256.0f;
+		ambientLight[1] = (float)light->_color.blue() / 256.0f;
+		ambientLight[2] = (float)light->_color.green() / 256.0f;
+		lightColor[0] = light->_intensity;
+		lightColor[1] = light->_intensity;
+		lightColor[2] = light->_intensity;
 		lightDir[0] = light->_dir.x();
 		lightDir[1] = light->_dir.y();
 		lightDir[2] = light->_dir.z();
-		lightDir[3] = 0.0f;
-//		tglLightfv(TGL_LIGHT0 + lightId, TGL_AMBIENT, ambientLight);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_DIFFUSE, diffuseLight);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPECULAR, specularLight);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightPos);
+//		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightPos);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_DIFFUSE, lightColor);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_AMBIENT, ambientLight);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPECULAR, lightColor);
 		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPOT_DIRECTION, lightDir);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_CUTOFF, 1.8f);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_EXPONENT, 2.0f);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_LINEAR_ATTENUATION, light->_intensity);
+//		tglLightf(TGL_LIGHT0 + lightId, TGL_CONSTANT_ATTENUATION, 0.0f);
+//		tglLightf(TGL_LIGHT0 + lightId, TGL_LINEAR_ATTENUATION, 0.0f);
+//		tglLightf(TGL_LIGHT0 + lightId, TGL_QUADRATIC_ATTENUATION, 1.0f);
 		tglEnable(TGL_LIGHT0 + lightId);
 	} else if (strcmp(light->_type.c_str(), "spot") == 0) {
+		tglDisable(TGL_LIGHT0 + lightId);
+		lightColor[0] = (float)light->_color.red() / 256.0f;
+		lightColor[1] = (float)light->_color.blue() / 256.0f;
+		lightColor[2] = (float)light->_color.green() / 256.0f;
 		lightDir[0] = light->_dir.x();
 		lightDir[1] = light->_dir.y();
 		lightDir[2] = light->_dir.z();
-		lightDir[3] = 0.0f;
-//		tglLightfv(TGL_LIGHT0 + lightId, TGL_AMBIENT, ambientLight);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_DIFFUSE, diffuseLight);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPECULAR, specularLight);
 		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightPos);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_DIFFUSE, lightColor);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_AMBIENT, ambientLight);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPECULAR, lightColor);
 		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPOT_DIRECTION, lightDir);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_CUTOFF, 1.8f);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_EXPONENT, 2.0f);
-//		tglLightf(TGL_LIGHT0 + lightId, TGL_LINEAR_ATTENUATION, light->_intensity);
+		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_EXPONENT, 64.0f * light->_intensity);
+		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_CUTOFF, 90.0f);
+		tglLightf(TGL_LIGHT0 + lightId, TGL_CONSTANT_ATTENUATION, 0.0f);
+		tglLightf(TGL_LIGHT0 + lightId, TGL_LINEAR_ATTENUATION, 0.0f);
+		tglLightf(TGL_LIGHT0 + lightId, TGL_QUADRATIC_ATTENUATION, 1.0f);
 		tglEnable(TGL_LIGHT0 + lightId);
 	} else {
 		error("Scene::setupLights() Unknown type of light: %s", light->_type.c_str());


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.





More information about the Scummvm-git-logs mailing list