2017-03-07 8 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の場合、何も表示されません。 私は、私が上で定義された「午後」マトリックスに翻訳を追加しましたこれは、いくつかの理由は、マトリックスのものであったことを考えた:

 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軸を反映しますが、 )。

関連する問題