请问,当添加了纹理贴图后,就好像没有光照的效果了(旋转的时候不会变亮变暗),这可能是什么原因阿?
显示部分的代码
void RenderScene(void)
{
// Clear the window and the depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glPushMatrix();
//把整个场景移动到视图中
glTranslatef(-20.0f, -40.0f, -250.0f);
//描绘背景
glBegin(GL_QUADS);
glColor3ub(0,128,0);
glVertex3f(200.0f, 0.0f, -200.0f);
glVertex3f(-200.0f, 0.0f, -200.0f);
glVertex3f(-200.0f, -20.0f, 200.0f);
glVertex3f(200.0f, 0.0f, 170.0f);
glEnd();
glPopMatrix(); glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
//开启纹理贴图
glEnable(GL_TEXTURE_2D);
glPushMatrix();
//把整个场景移动到视图中
glTranslatef(-20.0f, -20.0f, -230.0f);
glRotatef(45.0f, 0.0f, 1.0f, 0.0f); // Save matrix state and do the rotation
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
DrawRect(FALSE);
// Restore transformations
glPopMatrix(); glDisable(GL_TEXTURE_2D);
// Get ready to draw the shadow
// First disable lighting and save the projection state
glDisable(GL_LIGHTING);
// Save matrix state and do the rotation
glPushMatrix();
glTranslatef(-20.0f, -20.0f, -230.0f);
glRotatef(45.0f, 0.0f, 1.0f, 0.0f); // Calculate projection matrix to draw shadow on the ground
MakeShadowMatrix(points, lightPos, shadowMat);
// Multiply by shadow projection matrix
glMultMatrixf((GLfloat *)shadowMat);
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
DrawRect(TRUE);
// Restore transformations
glPopMatrix(); glEnable(GL_LIGHTING);
// Flush drawing commands
glutSwapBuffers();
}
显示部分的代码
void RenderScene(void)
{
// Clear the window and the depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glPushMatrix();
//把整个场景移动到视图中
glTranslatef(-20.0f, -40.0f, -250.0f);
//描绘背景
glBegin(GL_QUADS);
glColor3ub(0,128,0);
glVertex3f(200.0f, 0.0f, -200.0f);
glVertex3f(-200.0f, 0.0f, -200.0f);
glVertex3f(-200.0f, -20.0f, 200.0f);
glVertex3f(200.0f, 0.0f, 170.0f);
glEnd();
glPopMatrix(); glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
//开启纹理贴图
glEnable(GL_TEXTURE_2D);
glPushMatrix();
//把整个场景移动到视图中
glTranslatef(-20.0f, -20.0f, -230.0f);
glRotatef(45.0f, 0.0f, 1.0f, 0.0f); // Save matrix state and do the rotation
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
DrawRect(FALSE);
// Restore transformations
glPopMatrix(); glDisable(GL_TEXTURE_2D);
// Get ready to draw the shadow
// First disable lighting and save the projection state
glDisable(GL_LIGHTING);
// Save matrix state and do the rotation
glPushMatrix();
glTranslatef(-20.0f, -20.0f, -230.0f);
glRotatef(45.0f, 0.0f, 1.0f, 0.0f); // Calculate projection matrix to draw shadow on the ground
MakeShadowMatrix(points, lightPos, shadowMat);
// Multiply by shadow projection matrix
glMultMatrixf((GLfloat *)shadowMat);
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
DrawRect(TRUE);
// Restore transformations
glPopMatrix(); glEnable(GL_LIGHTING);
// Flush drawing commands
glutSwapBuffers();
}
解决方案 »
- 请问下网页游戏和网络游戏服务端开发要掌握哪些知识?
- vc sql 改变某一列的某个值
- CStatic的简单问题
- 求《Visual C++开发GIS系统(第2版)》图书或者电子书
- vc6的watch窗口,具有树和listctrl的结合体外观,是如何实现的?
- 10053错误,如何解决?急..........
- 很晕的问题——如何判断两个字符串的相似程度
- 为何我在程序内动态调用库函数老是出问题
- VB,VC之间数据传输的问题,以及opengl的插件问题,请指导,谢谢
- VS2008工程,因结构体字节对其问题导致的string赋值出现崩溃,求大佬解答
- 读取硬盘上的.bmp 文件,并且全屏显示
- 关于memory mapping的问题
你用glTexImage2D(GL_TEXTURE_2D,0,3,64,64,0,GL_RGB,GL_UNSIGNED_BYTE,image)读纹理贴出来的颜色与原图不一样,把GL_RGB改成GL_BGR就可以了。