sorry,but I have another question...

Started by
-1 comments, last by Lanman 22 years, 1 month ago
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