所以我想,以显示其beeing roated鼠标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
所以我试图用一个四画,但也得出了同样的结果。有点令人头疼的是,第一次尝试在使用和不使用modelViewMatrix时正确显示。但是如果我运行第二个代码或没有modelViewMatrix的四元组,它会正确显示。由于我刚刚开始使用OpenGl,因此我无法真正发现我的错误。
如果有人想知道什么,我试图建立:
我想建立一个自上而下的比赛,但我不想使用所有这些花哨的引擎,你只需拖放所有你的东西togther并得到有些东西。我想写我的一个引擎,所以我碰到opentk图形。但我并没有想到渲染一个旋转到鼠标位置的纹理会非常困难。
非常感谢您的帮助。它直接向我展示了我的下一个问题。好像旋转是由物体的位置的影响,当我移动对象保持poiting对小鼠但在某些时候它变成太多,不停止转动。 – ZulluF