2017-03-03 9 views
-1

OpenGlでマウスにローリングされているテクスチャを表示しようとしていますが、実行したくないテクスチャを表示しようとしています。まず、Quadを構築する2つの三角形を使ってテクスチャを表示しようとしました。OpenGLを使用してテクスチャが正しく表示されない

Matrix4 modelViewMatrix = 
      Matrix4.CreateScale((float)Width/Txture.Width, (float)Height/Txture.Height, 1f) * 
      Matrix4.CreateRotationZ(Convert.ToSingle(LookingDir/(180/Math.PI))) * 
      Matrix4.CreateTranslation((float)X_PixPos, (float)Y_PixPos, 0f); 
     GL.MatrixMode(MatrixMode.Modelview); 
     GL.LoadMatrix(ref modelViewMatrix); 


     GL.BindTexture(TextureTarget.Texture2D, Txture.ID); 
     GL.Begin(PrimitiveType.Triangles); 
     GL.Color4(1f, 1f, 1f, 1f); 
     GL.TexCoord2(0, 0); GL.Vertex2(0, 0); 
     GL.TexCoord2(1, 1); GL.Vertex2(Txture.Width, Txture.Height); 
     GL.TexCoord2(0, 1); GL.Vertex2(0, Txture.Height); 

     GL.TexCoord2(0, 0); GL.Vertex2(0, 0); 
     GL.TexCoord2(1, 0); GL.Vertex2(Txture.Width, 0); 
     GL.TexCoord2(1, 1); GL.Vertex2(Txture.Width, Txture.Height); 
     GL.End(); 

しかし、中心にない原点(0,0)点を中心に回転するため、意図したとおりに動作しません。その後私はこのようなクワッドの中心に原点を入れてみました:

 GL.BindTexture(TextureTarget.Texture2D, Txture.ID); 
     GL.Begin(PrimitiveType.Triangles); 
     GL.Color4(1f, 1f, 1f, 1f); 
     GL.TexCoord2(-1f, 1f); GL.Vertex2(-Txture.Width/2.0f, Txture.Height/2.0f); 
     GL.TexCoord2(1f, 1f); GL.Vertex2(Txture.Width/2.0f, Txture.Height/2.0f); 
     GL.TexCoord2(1f, -1f); GL.Vertex2(Txture.Width/2.0f, -Txture.Height/2.0f); 

     GL.TexCoord2(-1f, 1f); GL.Vertex2(-Txture.Width/2.0f, Txture.Height/2.0f); 
     GL.TexCoord2(1f, -1f); GL.Vertex2(Txture.Width/2.0f, -Txture.Height/2.0f); 
     GL.TexCoord2(-1f, -1f); GL.Vertex2(-Txture.Width/2.0f, -Txture.Height/2.0f); 
     GL.End(); 

行列のコードは同じままので、私はこのコードスニペットにそれを残しました。これはほぼ意図どおりに動作します。原点は中央にあり、テクスチャはその周りを回転しますが、私にテクスチャを表示するのではなく、それを4回表示します。説明するのが難しいので、私は写真を持っています:Texture beeing displayed 4 times instead of once

私はクワッドでそれを描こうとしましたが、同じ結果になりました。 akwardことは、最初の試行は、modelViewMatrixの有無にかかわらず正しく表示されていることです。しかし、modelViewMatrixを使わずに2番目のコードまたはクワッドを実行すると、正しく表示されます。私はOpenGlで始まって以来、本当に私の間違いを見つけることはできません。

誰もが私が構築しようとしています何を知りたい場合は、次の

私はトップダウンのゲームを構築しようとしていますが、私はあなただけのドラッグ&ドロップあなたがtogther詰め込むすべてをしてもらう、これらすべてのファンシーなエンジンを使用したくありません何か外に出る。私は1つのエンジンを書こうと思っていたので、私はグラフィックのためにopentkを見つけました。しかし、私は、マウスの位置に回転するテクスチャのレンダリングが非常に難しいとは考えていませんでした。

答えて

0

テクスチャ座標(TexCoord2)は実際の幾何学的位置から多かれ少なかれ独立しています。それらの範囲は[0,0](左上)から[1,1](右下)です。 4つのテクスチャが表示されるのは、Quadの-1から1にテクスチャをマップする必要があるということです。 wrap-modeをrepeatに設定すると、-1から1は、各軸に沿って互いに正確に2つのテクスチャを意味します。

あなただけの1食感を持つようにしたい場合は、テクスチャが0から1に座標を使用:

GL.TexCoord2(0, 1); GL.Vertex2(-Txture.Width/2.0f, Txture.Height/2.0f); 
GL.TexCoord2(1, 1); GL.Vertex2(Txture.Width/2.0f, Txture.Height/2.0f); 
GL.TexCoord2(1, 0); GL.Vertex2(Txture.Width/2.0f, -Txture.Height/2.0f); 

GL.TexCoord2(0, 1); GL.Vertex2(-Txture.Width/2.0f, Txture.Height/2.0f); 
GL.TexCoord2(1, 0); GL.Vertex2(Txture.Width/2.0f, -Txture.Height/2.0f); 
GL.TexCoord2(0, 0); GL.Vertex2(-Txture.Width/2.0f, -Txture.Height/2.0f); 
+0

はあなたの助けのためにありがとうございました。それは私に次の問題を直接示してくれました。回転がオブジェクトの位置の影響を受けているように見えます。オブジェクトを移動すると、マウス上でpoitingを維持しますが、ある時点では回転が止まりすぎず、回転しません。 – ZulluF

関連する問題