Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-06-07 15:01:31 +0400
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-06-07 15:01:31 +0400
commitb468bf726c50d3126fac2664164e1be0d6e209c5 (patch)
tree777c7beb1094a652dd75548904abeb6f39073a00 /source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
parent7d840a256e0094c159b2fc60bc3395b79f29e0cf (diff)
Lighting updates:
Added specular after texture. Added Light properties: Negative, No Diffuse, No Specular, Quad, Quad2
Diffstat (limited to 'source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp')
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp44
1 files changed, 29 insertions, 15 deletions
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
index 125f3265305..f2315fef0fb 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
@@ -49,6 +49,7 @@
#include "RAS_IRasterizer.h"
#include "RAS_LightObject.h"
#include "RAS_ICanvas.h"
+#include "RAS_GLExtensionManager.h"
// next two includes/dependencies come from the shadow feature
@@ -297,6 +298,9 @@ void KX_BlenderRenderTools::EnableOpenGLLights()
glEnableClientState(GL_NORMAL_ARRAY);
#endif //SLOWPAINT
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, false);
+ if (bgl::QueryExtension(bgl::_GL_EXT_separate_specular_color) || bgl::QueryVersion(1, 2))
+ glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
+
}
@@ -352,22 +356,18 @@ int KX_BlenderRenderTools::applyLights(int objectlayer)
//std::vector<struct RAS_LightObject*> m_lights;
std::vector<struct RAS_LightObject*>::iterator lit = m_lights.begin();
+ glPushMatrix();
+ glLoadMatrixf(m_viewmat);
for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit)
{
RAS_LightObject* lightdata = (*lit);
if (lightdata->m_layer & objectlayer)
{
-
- glPushMatrix();
- glLoadMatrixf(m_viewmat);
-
-
vec[0] = (*(lightdata->m_worldmatrix))(0,3);
vec[1] = (*(lightdata->m_worldmatrix))(1,3);
vec[2] = (*(lightdata->m_worldmatrix))(2,3);
vec[3] = 1;
-
if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
vec[0] = (*(lightdata->m_worldmatrix))(0,2);
@@ -384,9 +384,9 @@ int KX_BlenderRenderTools::applyLights(int objectlayer)
glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
glLightf((GLenum)(GL_LIGHT0+count), GL_CONSTANT_ATTENUATION, 1.0);
glLightf((GLenum)(GL_LIGHT0+count), GL_LINEAR_ATTENUATION, lightdata->m_att1/lightdata->m_distance);
- // without this next line it looks backward compatible.
- //attennuation still is acceptable
- // glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, la->att2/(la->dist*la->dist));
+ // without this next line it looks backward compatible.
+ //attennuation still is acceptable
+ glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, lightdata->m_att2/(lightdata->m_distance*lightdata->m_distance));
if(lightdata->m_type==RAS_LightObject::LIGHT_SPOT) {
vec[0] = -(*(lightdata->m_worldmatrix))(0,2);
@@ -402,19 +402,33 @@ int KX_BlenderRenderTools::applyLights(int objectlayer)
else glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, 180.0);
}
- vec[0]= lightdata->m_energy*lightdata->m_red;
- vec[1]= lightdata->m_energy*lightdata->m_green;
- vec[2]= lightdata->m_energy*lightdata->m_blue;
- vec[3]= 1.0;
- glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
+ if (lightdata->m_nodiffuse)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
+ }
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
+ if (lightdata->m_nospecular)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else if (lightdata->m_nodiffuse) {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
+ }
glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
glEnable((GLenum)(GL_LIGHT0+count));
count++;
- glPopMatrix();
}
}
+ glPopMatrix();
return count;