2014-09-22 47 views
0

我最近試圖在C++中用OpenGL製作一個.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

你的桌面環境(操作系統和物理)? – 2014-09-22 16:02:28

+0

你說得對,這可能是有用的......我應該想到它。我在我的帖子中添加了它! – tforgione 2014-09-22 17:46:06

回答

1

我做到了。

當然,有了這麼一點信息,任何人都很難找到答案。

這是基於通過校定的來源,並且在某一點,該網狀物的光澤中定義的方式

glMaterialf (GL_FRONT, GL_SHININESS, 250); 

然而,在Open GL documentation,它指定了

只接受[0,128]範圍內的值。

所以我想不同版本的OpenGL的反應不同,以這樣的錯誤:

  • 我校的OpenGL的版本可能決定夾緊光澤的[0128]
  • 我的電腦版的價值可能會使發光變得飽和,這就是爲什麼我有如此明亮的結果。

但是,非常感謝您的幫助,並花時間閱讀本文。

+1

我理解規範的方式,調用這個值大於128的值應該生成一個'GL_INVALID_VALUE',並保持當前值不變。默認值是0.0。所以你的家用電腦很可能正確處理這個問題。 – 2014-09-23 02:36:59

+0

謝謝你的精確度,你可能是對的! – tforgione 2014-09-23 08:06:41

相關問題