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

Different lighting behavior on different machines

本文关键字:照明 机器      更新时间:2023-10-16

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

我成功了。

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

这是基于学校提供的来源,在某一点上,网格的光泽是这样定义的

glMaterialf (GL_FRONT, GL_SHININESS, 250);

然而,在Open GL文档中,它指定

只接受范围[0128]中的值。

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

  • 我学校的OpenGL版本可能决定在[0128]中钳制亮度的值
  • 我的电脑版本可能使光泽饱和,这就是为什么我得到了如此明亮的结果

不过,非常感谢你的帮助,也感谢你花时间阅读这篇文章。