OpenGL正常光照问题

时间:2016-07-22 20:06:44

标签: c++ opengl graphics

我在OpenGL中遇到了轻微的问题。

我在我的C ++中加载了一个包含面部的眼镜OBJ,使用blender导出的法线和uvmapping,我希望可视化用户脸部的对象。对象是:https:https://drive.google.com/file/d/0B8ba1lz8BBHAUEVQX1hkYmtqYlE/view?usp=sharing

所以,我解决了一个线性系统,它找到了一个变换矩阵,将物体的所有点从3D变换到2D。我转置这个矩阵并在opengl中加载我的模型视图矩阵。这部分还可以。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho (0, 512, 512, 0, 100,-100); //Define a ortho
glMatrixMode (GL_MODELVIEW);
glLoadMatrixd(&mViewMatrix(0,0));

现在我想在眼镜中添加灯光效果,所以,我在opengl中配置这样的灯光:

GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position[] = { camXV2, camYV2, camZV2, 0.0 };
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);

我渲染对象并设置其各自的法线,但结果如下:

Wrong light effect

蓝色是真正的纹理颜色,但正如我们所看到的,结果与预期相差甚远。任何帮助

[Spektre编辑] obj预览正常

来自OBJ的法线: preview 来自面部的计算法线(忽略vn条目) preview

要测试您的引擎,请尝试使用此Wavefront OBJ:

v -1.0 -1.0 -1.0 
v +1.0 -1.0 -1.0 
v +1.0 +1.0 -1.0 
v -1.0 +1.0 -1.0 
v -1.0 -1.0 +1.0 
v +1.0 -1.0 +1.0 
v +1.0 +1.0 +1.0 
v -1.0 +1.0 +1.0 

vn -0.333 -0.333 -0.333 
vn +0.333 -0.333 -0.333 
vn +0.333 +0.333 -0.333 
vn -0.333 +0.333 -0.333 
vn -0.333 -0.333 +0.333 
vn +0.333 -0.333 +0.333 
vn +0.333 +0.333 +0.333 
vn -0.333 +0.333 +0.333 

f 1 2 3 4 
f 5 6 7 8 
f 1 2 6 5 
f 2 3 7 6 
f 3 4 8 7 
f 4 1 5 8 

这是一个简单的立方体,法线设置为将其遮蔽为球体。

0 个答案:

没有答案