2017-03-07 86 views
0

我剛開始學習opengl,所以我可能不知道所有的東西。在VB.net中使用OpenTK。OpenGL:如何設置頂點z座標爲正數量?

我有這樣的代碼:

Dim pm As Matrix4 = Matrix4.CreatePerspectiveFieldOfView(1.57, 16/9, 0.1, 100) 
    GL.MatrixMode(MatrixMode.Projection) 
    GL.LoadMatrix(pm) 
    GL.Begin(PrimitiveType.Triangles) 
    GL.Vertex3(0, 0, -1) : GL.Color4(1.0!, 0!, 0!, 1.0!) 
    GL.Vertex3(1, 0, -1) : GL.Color4(0.0!, 1.0!, 0!, 1.0!) 
    GL.Vertex3(0, 1, -1) : GL.Color4(0.0!, 0.0!, 1.0!, 1.0!) 
    GL.End() 

這正確繪製三角形。

但是當我改變z座標到+ ve時,它們消失了。就像GL.Vertex3(0, 0, +1)時那個頂點消失一樣。當所有3個頂點的z座標都是+ ve時,什麼都看不見。 我認爲這是因爲一些矩陣的東西,所以我增加了一個翻譯上面定義的「PM」矩陣:

 Matrix4.CreateTranslation(0, 0, +1.0!, pm) 

仍然沒有任何反應。

但是,當所有人都-ve那麼一切都很好:

GL.Vertex3(0, 0, -10) : GL.Color4(1.0!, 0!, 0!, 1.0!) 
GL.Vertex3(1, 0, -10) : GL.Color4(0.0!, 1.0!, 0!, 1.0!) 
GL.Vertex3(0, 1, -10) : GL.Color4(0.0!, 0.0!, 1.0!, 1.0!) 

注:我已經按照this指南。他的代碼似乎有同樣的問題,雖然沒有人解決它。 His code

有人可以向我解釋這個東西嗎?提前致謝。

回答

0

在OpenGL中,通常假定攝像頭正在朝-z方向看(這是一個約定,而不是限制)。由於這個原因,投影矩陣通常以這樣的方式構造,即它們將[-nearPlane,-farPlane]與可見深度區域之間的間隔映射。

如果你想看正z,那麼你必須添加一個額外的觀察矩陣,使攝像機圍繞y軸旋轉180°(或者是一個簡單地反映z軸的曲線,但是然後繞線順序發生變化)。