Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL照明正常故障_C++_Opengl_Lighting_Normals_Fbx - Fatal编程技术网

C++ OpenGL照明正常故障

C++ OpenGL照明正常故障,c++,opengl,lighting,normals,fbx,C++,Opengl,Lighting,Normals,Fbx,我正在尝试在我的OpenGL场景中实现照明。我正在从文件加载FBX模型和法线(由C4D生成)。但是灯光看起来不像我期望的那样。我看了很多论坛,但没有任何相关的结果。我已启用了GL\u规范化。。。 以下是一段代码片段: glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); float specularm[] = {1.8,1.8, 1.8, 1.0}; glMaterialfv(GL_FRONT, GL_SPECULAR, specularm); g

我正在尝试在我的OpenGL场景中实现照明。我正在从文件加载FBX模型和法线(由C4D生成)。但是灯光看起来不像我期望的那样。我看了很多论坛,但没有任何相关的结果。我已启用了
GL\u规范化
。。。
以下是一段代码片段:

glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
float specularm[] = {1.8,1.8, 1.8, 1.0};
glMaterialfv(GL_FRONT, GL_SPECULAR, specularm);
glMateriali(GL_FRONT, GL_SHININESS, 50);

float light_ambient[] = {0.0, 0.0, 0.0, 1.0};
float light_diffuse[] = {1.0, 1.0, 1.0, 1.0};
float light_specular[] = {1.0, 1.0, 1.0, 1.0};
float position0[] = {0.0f, 50.0f, 0.0f, 1.0f};

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, position0);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
在绘图功能中:

(我正在使用VBO进行绘图)

以下是问题的屏幕:


不应使用镜面反射材质参数>1。将它们改为1,看看这是否是问题所在。谢谢您的快速回复。但仍然存在相同的问题:/您确定偏移量计算正确吗
numberofpolygonvertexindex
听起来不像“缓冲区中的顶点总数”。你确定法线被正确导出了吗?法线是错误的。检查以精确指定的偏移量馈送到VBO的数据。[更好的是,使用交错数组,但这与问题无关]
numberofpolygonvertexindex
实际上是缓冲区中的顶点总数。我90%确信法线导出正确,因为当我在任何3D编辑器中导入模型时,它的行为都是正常的。
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
...
glBindBufferARB(GL_ARRAY_BUFFER_ARB, geometry[model[m].gIndexes[g]].VBOName);
glVertexPointer(3, GL_FLOAT, 0, 0);
glNormalPointer(GL_FLOAT, 0, (void*)(geometry[model[m].gIndexes[g]].NumberOfPolygonVertexIndexes * 3 * sizeof(float)));
glTexCoordPointer(2, GL_FLOAT, 0, (void*)(geometry[model[m].gIndexes[g]].NumberOfPolygonVertexIndexes * 3 * sizeof(float)* 2));
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, geometry[model[m].gIndexes[g]].VBOIndices);
...
glDrawElements(GL_TRIANGLES, geometry[model[m].gIndexes[g]].usemtl[o].VertexCount, GL_UNSIGNED_INT, (unsigned int*)0 + LastVertex);