我在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);
我渲染对象并设置其各自的法线,但结果如下:
蓝色是真正的纹理颜色,但正如我们所看到的,结果与预期相差甚远。任何帮助
[Spektre编辑] obj预览正常
要测试您的引擎,请尝试使用此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
这是一个简单的立方体,法线设置为将其遮蔽为球体。