[Scummvm-cvs-logs] SF.net SVN: scummvm:[34392] residual/trunk/engine/backend/platform/sdl

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Sat Sep 6 22:56:44 CEST 2008


Revision: 34392
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34392&view=rev
Author:   aquadran
Date:     2008-09-06 20:56:43 +0000 (Sat, 06 Sep 2008)

Log Message:
-----------
better light setup, spot lights still not correct

Modified Paths:
--------------
    residual/trunk/engine/backend/platform/sdl/driver_gl.cpp
    residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp

Modified: residual/trunk/engine/backend/platform/sdl/driver_gl.cpp
===================================================================
--- residual/trunk/engine/backend/platform/sdl/driver_gl.cpp	2008-09-06 20:49:48 UTC (rev 34391)
+++ residual/trunk/engine/backend/platform/sdl/driver_gl.cpp	2008-09-06 20:56:43 UTC (rev 34392)
@@ -71,6 +71,9 @@
 
 	_currentShadowArray = NULL;
 
+	GLfloat ambientSource[] = { 0.6, 0.6, 0.6, 1.0 };
+	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientSource);
+
 	glPolygonOffset(-6.0, -6.0);
 }
 
@@ -332,60 +335,42 @@
 	glEnable(GL_LIGHTING);
 	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 };
+	float lightDir[] = { 0.0f, 0.0f, 0.0f };
 
-	lightPos[0] = light->_pos.x();
-	lightPos[1] = light->_pos.y();
-	lightPos[2] = light->_pos.z();
-	float intensity = light->_intensity / 1.5f;
-	lightColor[0] = ((float)light->_color.red() / 15.0f) * light->_intensity;
-	lightColor[1] = ((float)light->_color.blue() / 15.0f) * light->_intensity;
-	lightColor[2] = ((float)light->_color.green() / 15.0f) * light->_intensity;
+	float intensity = light->_intensity / 1.3f;
+	lightColor[0] = ((float)light->_color.red() / 15.0f) * intensity;
+	lightColor[1] = ((float)light->_color.blue() / 15.0f) * intensity;
+	lightColor[2] = ((float)light->_color.green() / 15.0f) * intensity;
 
 	if (strcmp(light->_type.c_str(), "omni") == 0) {
+		lightPos[0] = light->_pos.x();
+		lightPos[1] = light->_pos.y();
+		lightPos[2] = light->_pos.z();
 		glDisable(GL_LIGHT0 + lightId);
-		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightPos);
 		glLightfv(GL_LIGHT0 + lightId, GL_DIFFUSE, lightColor);
+		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightPos);
 		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();
-//		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightPos);
+		lightDir[0] = -light->_dir.x();
+		lightDir[1] = -light->_dir.y();
+		lightDir[2] = -light->_dir.z();
 		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_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);*/
+		glLightfv(GL_LIGHT0 + lightId, GL_POSITION, lightDir);
+		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;
+		lightPos[0] = light->_pos.x();
+		lightPos[1] = light->_pos.y();
+		lightPos[2] = light->_pos.z();
 		lightDir[0] = light->_dir.x();
 		lightDir[1] = light->_dir.y();
 		lightDir[2] = light->_dir.z();
-		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_POSITION, lightPos);
 		glLightfv(GL_LIGHT0 + lightId, GL_SPOT_DIRECTION, lightDir);
-		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);*/
+		glLightf(GL_LIGHT0 + lightId, GL_SPOT_CUTOFF, 90);
+		glEnable(GL_LIGHT0 + lightId);
 	} else {
 		error("Scene::setupLights() Unknown type of light: %s", light->_type.c_str());
 	}

Modified: residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp
===================================================================
--- residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp	2008-09-06 20:49:48 UTC (rev 34391)
+++ residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp	2008-09-06 20:56:43 UTC (rev 34392)
@@ -125,8 +125,8 @@
 	memset(_storedDisplay, 0, 640 * 480 * 2);
 
 	_currentShadowArray = NULL;
-	
-	TGLfloat ambientSource[] = {0.0, 0.0, 0.0, 1.0};
+
+	TGLfloat ambientSource[] = { 0.6, 0.6, 0.6, 1.0 };
 	tglLightModelfv(TGL_LIGHT_MODEL_AMBIENT, ambientSource);
 }
 
@@ -376,60 +376,42 @@
 	tglEnable(TGL_LIGHTING);
 	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 };
+	float lightDir[] = { 0.0f, 0.0f, 0.0f };
 
-	lightPos[0] = light->_pos.x();
-	lightPos[1] = light->_pos.y();
-	lightPos[2] = light->_pos.z();
-	float intensity = light->_intensity / 1.5f;
-	lightColor[0] = ((float)light->_color.red() / 15.0f) * light->_intensity;
-	lightColor[1] = ((float)light->_color.blue() / 15.0f) * light->_intensity;
-	lightColor[2] = ((float)light->_color.green() / 15.0f) * light->_intensity;
+	float intensity = light->_intensity / 1.3f;
+	lightColor[0] = ((float)light->_color.red() / 15.0f) * intensity;
+	lightColor[1] = ((float)light->_color.blue() / 15.0f) * intensity;
+	lightColor[2] = ((float)light->_color.green() / 15.0f) * intensity;
 
 	if (strcmp(light->_type.c_str(), "omni") == 0) {
+		lightPos[0] = light->_pos.x();
+		lightPos[1] = light->_pos.y();
+		lightPos[2] = light->_pos.z();
 		tglDisable(TGL_LIGHT0 + lightId);
-		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightPos);
 		tglLightfv(TGL_LIGHT0 + lightId, TGL_DIFFUSE, lightColor);
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightPos);
 		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();
-//		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightPos);
+		lightDir[0] = -light->_dir.x();
+		lightDir[1] = -light->_dir.y();
+		lightDir[2] = -light->_dir.z();
 		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_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);*/
+		tglLightfv(TGL_LIGHT0 + lightId, TGL_POSITION, lightDir);
+		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;
+		lightPos[0] = light->_pos.x();
+		lightPos[1] = light->_pos.y();
+		lightPos[2] = light->_pos.z();
 		lightDir[0] = light->_dir.x();
 		lightDir[1] = light->_dir.y();
 		lightDir[2] = light->_dir.z();
-		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_POSITION, lightPos);
 		tglLightfv(TGL_LIGHT0 + lightId, TGL_SPOT_DIRECTION, lightDir);
-		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);*/
+		tglLightf(TGL_LIGHT0 + lightId, TGL_SPOT_CUTOFF, 90);
+		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