sorry,but I have another question...
My engine now draw lights with per-pixel lightning. It can do more than one light. Everything is allright but there only one more thing...
In first pass I render the lightmap. It''s done by the card. Blend is set to GL_ONE,GL_ONE. Then in the second pass, when I have the lightmap drawed, I draw the map, with normal textures. The blend is set to GL_DST_COLOR,GL_ONE...In the tutorial I used is writen GL_SRC_COLOR,GL_ONE, but in the source code for that tutor is GL_DST_COLOR,GL_ONE...so what? I''ve tried both, and the SRC one doesn''t show the lightmap. The DST does, but the walls are transparent, but int the tutorial not! Why? I don''t understand...
here''s my render code:
GLfloat x_m, y_m, z_m, u_m, v_m;
void OpenGL_RenderScene(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
gluLookAt(glEye.EyeX,glEye.EyeY,glEye.EyeZ,glEye.LookX,glEye.LookY,glEye.LookZ,glEye.UpX,glEye.UpY,glEye.UpZ);
glColor3f(1,1,1);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glEnable(GL_TEXTURE_2D);
for (unsigned int an = 0; an < World.SActorNo; an++) {
for (unsigned int loop_m = 0; loop_m < World.SActor[an].TriangleNo; loop_m++) {
for (unsigned int l = 0; l < World.PointLightNo; l++) {
OpenGL_ActivatePointLight(l);
glBegin(GL_TRIANGLE_FAN);
x_m = World.SActor[an].Triangle[loop_m].Vertex[0].x;
y_m = World.SActor[an].Triangle[loop_m].Vertex[0].y;
z_m = World.SActor[an].Triangle[loop_m].Vertex[0].z;
u_m = World.SActor[an].Triangle[loop_m].Vertex[0].u;
v_m = World.SActor[an].Triangle[loop_m].Vertex[0].v;
OpenGL_ProcessPointLight(x_m, y_m, z_m, l);
glVertex3f(x_m,y_m,z_m);
x_m = World.SActor[an].Triangle[loop_m].Vertex[1].x;
y_m = World.SActor[an].Triangle[loop_m].Vertex[1].y;
z_m = World.SActor[an].Triangle[loop_m].Vertex[1].z;
u_m = World.SActor[an].Triangle[loop_m].Vertex[1].u;
v_m = World.SActor[an].Triangle[loop_m].Vertex[1].v;
OpenGL_ProcessPointLight(x_m, y_m, z_m, l);
glVertex3f(x_m,y_m,z_m);
x_m = World.SActor[an].Triangle[loop_m].Vertex[2].x;
y_m = World.SActor[an].Triangle[loop_m].Vertex[2].y;
z_m = World.SActor[an].Triangle[loop_m].Vertex[2].z;
u_m = World.SActor[an].Triangle[loop_m].Vertex[2].u;
v_m = World.SActor[an].Triangle[loop_m].Vertex[2].v;
OpenGL_ProcessPointLight(x_m, y_m, z_m, l);
glVertex3f(x_m,y_m,z_m);
glEnd();
OpenGL_DeactivatePointLights();
}
}
}
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_DST_COLOR, GL_ZERO);
for (an = 0; an < World.SActorNo; an++) {
for (unsigned int loop_m = 0; loop_m < World.SActor[an].TriangleNo; loop_m++) {
glBindTexture(GL_TEXTURE_2D, World.glTexture[World.SActor[an].Triangle[loop_m].Texture]);
glBegin(GL_TRIANGLE_FAN);
x_m = World.SActor[an].Triangle[loop_m].Vertex[0].x;
y_m = World.SActor[an].Triangle[loop_m].Vertex[0].y;
z_m = World.SActor[an].Triangle[loop_m].Vertex[0].z;
u_m = World.SActor[an].Triangle[loop_m].Vertex[0].u;
v_m = World.SActor[an].Triangle[loop_m].Vertex[0].v;
glTexCoord2f(u_m, v_m); glVertex3f(x_m,y_m,z_m);
x_m = World.SActor[an].Triangle[loop_m].Vertex[1].x;
y_m = World.SActor[an].Triangle[loop_m].Vertex[1].y;
z_m = World.SActor[an].Triangle[loop_m].Vertex[1].z;
u_m = World.SActor[an].Triangle[loop_m].Vertex[1].u;
v_m = World.SActor[an].Triangle[loop_m].Vertex[1].v;
glTexCoord2f(u_m, v_m); glVertex3f(x_m,y_m,z_m);
x_m = World.SActor[an].Triangle[loop_m].Vertex[2].x;
y_m = World.SActor[an].Triangle[loop_m].Vertex[2].y;
z_m = World.SActor[an].Triangle[loop_m].Vertex[2].z;
u_m = World.SActor[an].Triangle[loop_m].Vertex[2].u;
v_m = World.SActor[an].Triangle[loop_m].Vertex[2].v;
glTexCoord2f(u_m, v_m); glVertex3f(x_m,y_m,z_m);
glEnd();
}
}
glLoadIdentity();
OpenGL_cPrintText(0, EngineData.ResolutionWidth-265, EngineData.ResolutionHeight-30, 255, 255, 255, 1, 10, "Flame Engine");
OpenGL_cPrintText(0, 10, 10, 255, 255, 255, 0, 7, "FPS: %i",(int)OpenGL_FPS);
OpenGL_cPrintText(0, 10, 30, 255, 255, 255, 0, 7, "Eye: X:%f Y:%f Z:%f H:%i, V:%i",World.DActor[0].X,World.DActor[0].Y,World.DActor[0].Z,(int)(World.DActor[0].Ha/0.0174532925f),(int)(World.DActor[0].Va/0.0174532925f));
glFinish();
SwapBuffers(EngineData.hDC);
return;
}
//-------------------------------------------------------------------
The tutorial I have used is here and here''s the screenshot of my engine...what I have to do ? Thanks!
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement