gpt4 book ai didi

opengl - 由于gluPerspercitve的法线反转?

转载 作者:行者123 更新时间:2023-12-04 04:39:44 28 4
gpt4 key购买 nike

只是玩弄openglglut .我试图让立方体完全可见,所以我决定我可以用 gluPerspective();所以这是代码

#include <iostream>
#include <GL/glut.h>
#include <GL/gl.h>

using namespace std;

float _angle = 0.1f;

void render(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluPerspective(90.0, 1, 0.1, 100.0);
gluLookAt(1, 1, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);

glPushMatrix();
glRotatef(_angle, 0.0f,0.0f,1.0f);
glColor3f(1.0f,0.0f,0.0f);
glutSolidCube (1.0);
glPopMatrix();
_angle +=0.03f;

// check OpenGL error
GLenum err;
while ((err = glGetError()) != GL_NO_ERROR) {
cerr << "OpenGL error: " << err << endl;
}

glutSwapBuffers();
glutPostRedisplay();


}

void init(){
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);

glutInitWindowPosition(100,100);
glutInitWindowSize(640, 480);
glutCreateWindow("test");
glClearColor(0.2,0.2,0.2,0.0);

glEnable(GL_COLOR_MATERIAL);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

glutDisplayFunc(render);

glutMainLoop();
}


int main(int argc, char * argv[]) {

glutInit(&argc, argv);
init();
return 0;
}

这就是结果:

enter image description here

没有 gluPerspective() 的立方体部分看起来如何:
enter image description here

我怎样才能让它看起来正常?

最佳答案

我不一定会说,当您弄乱投影矩阵时,法线会反转,就像缠绕方向反转一样。
OpenGL 确定多边形缠绕,用于在投影后剔除正面/背面的多边形。当您的投影矩阵和模型 View 矩阵在 Z 应面向的方向(换句话说,惯用手)上不一致时,您将遇到这些奇怪的问题。
传统上,投影矩阵设置为在 OpenGL 中乘以模型 View 矩阵时反转 Z。固定功能管道一直以这种方式工作,这就是产生 OpenGL 右手坐标系的原因。如果你翻转 Z 坐标,你会改变方向顶点在投影后缠绕。
说了这么多,我不认为这实际上是你的问题。您在此处使用逐顶点照明,并且已将模型 View 矩阵与投影矩阵相结合。当需要进行逐顶点光照计算时,它们是在错误的坐标空间中完成的。我建议您将模型 View 与投影分开...

glMatrixMode   (GL_PROJECTION);
glLoadIdentity ();

gluPerspective (90.0, 1, 0.1, 100.0);

glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();

gluLookAt (1, 1, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
现在,您已经正确分离了变换矩阵,固定功能照明应该可以按预期工作。
更新:
除了我上面描述的,还有一件事你忘了做。深度测试在 OpenGL 中默认是禁用的(因为不能保证你甚至有一个深度缓冲区);你需要启用它。
glEnable (GL_DEPTH_TEST);
当您调用 gluPerspective (...) 时,您的纵横比设置不正确,应该是 640.0f/480.0f而不是 1 .

关于opengl - 由于gluPerspercitve的法线反转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071482/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com