我最近尝试使用OpenGL在C ++中创建一个.obj网格加载器,我遇到了一个奇怪的问题。
我有一个std::vector<Vector3f>
表示面的顶点的坐标,另一个表示它的法线。在我的Vector3f
中,有一个std::array<float,3>
,因此我可以保留元素之间的连续性。
// Vertex Pointer to triangle array
glVertexPointer(3,GL_FLOAT, sizeof(Vector3f), &(_triangles[0].data[0]));
// Normal pointer to normal array
glNormalPointer(GL_FLOAT,sizeof(Vector3f),&(_normals[0].data[0]));
当我在学校的计算机上编译程序时,它会产生很好的效果,但是当我在台式计算机上编译它时,灯光很奇怪,就像所有的脸都在镜头里反射光一样,所以它们看起来都是白色的。
你们知道我的问题是什么吗?
编辑:
我的电脑在ArchLinux下,我的窗口管理器很棒,这是写在我电脑上的贴纸上
Intel Core i7-3632QM 2.2GHz with Turbo Boost up to 3.2GHz.
NVIDIA GeForce GT 740M
我对学校的计算机了解不多,但我认为他们在Ubuntu上。
答案 0 :(得分:1)
我做到了。
当然,有了这么少的信息,任何人都难以找到答案。
这是基于学校给出的来源,并且在某个时刻,网格的光泽被定义为
glMaterialf (GL_FRONT, GL_SHININESS, 250);
但是,在Open GL documentation中,它指定了
仅接受[0,128]范围内的值。
所以我猜不同版本的OpenGL对这个错误反应不同:
但是,非常感谢你的帮助,并花时间阅读这篇文章。