不同机器上的不同照明行为

时间:2014-09-22 15:56:46

标签: c++ opengl

我最近尝试使用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上。

1 个答案:

答案 0 :(得分:1)

我做到了。

当然,有了这么少的信息,任何人都难以找到答案。

这是基于学校给出的来源,并且在某个时刻,网格的光泽被定义为

glMaterialf (GL_FRONT, GL_SHININESS, 250);

但是,在Open GL documentation中,它指定了

  

仅接受[0,128]范围内的值。

所以我猜不同版本的OpenGL对这个错误反应不同:

  • 我学校的OpenGL版本可能决定在[0,128]
  • 中限制光泽的价值
  • 我的电脑版本可能会使光泽变得饱和,这就是为什么我有如此明亮的结果。

但是,非常感谢你的帮助,并花时间阅读这篇文章。