Also versuche ich eine Textur in OpenGl anzuzeigen, die an die Maus gesendet wird, aber ich kann es nicht so ausführen, wie ich es möchte. Zuerst habe ich versucht, die Textur über 2 Dreiecke anzuzeigen, die ein Quad bilden. Wie folgt aus:Texturen werden mit OpenGL nicht richtig dargestellt
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();
Aber da es dreht sich um den Ursprung (0,0) Punkt, der nicht in der Mitte ist es nicht wie beabsichtigt funktioniert. Danach habe ich versucht, den Ursprung in dem Zentrum des Quad wie folgt zu setzen:
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();
Da der Code für die Matrix gleich bleibt ich es auf dieser Code-Schnipsel weggelassen. Dies funktioniert fast wie beabsichtigt. Der Ursprung ist in der Mitte und die Textur rotiert um ihn herum, aber anstatt mir die Textur zu zeigen, wird sie 4 mal angezeigt. Schwer zu erklären, also habe ich ein Bild: Texture beeing displayed 4 times instead of once
Also habe ich versucht, es mit einem Quad zu zeichnen, kam aber zu dem gleichen Ergebnis. Die akward Sache ist, dass der erste Versuch korrekt mit und ohne die ModelViewMatrix angezeigt wird. Aber wenn ich den zweiten Code oder das Quad ohne die ModelViewMatrix ausführen, wird es richtig angezeigt. Seit ich mit OpenGl angefangen habe, kann ich meinen Fehler nicht wirklich finden.
Wenn jemand wissen will, was ich zu bauen versuche:
Ich versuche, ein Topdown Spiel zu bauen, aber ich möchte nicht alle diese Phantasie Motoren verwenden, wo man einfach per Drag & Drop alle togther stopfen und bekommen etwas aus. Ich wollte meine eine Engine schreiben, also bin ich auf opentk für Grafiken gestoßen. Aber ich dachte nicht, dass das Rendern einer Textur, die sich in die Position der Maus dreht, so schwer wäre.
für Ihre Hilfe Vielen Dank. Und es zeigte mir direkt mein nächstes Problem. Es scheint, als ob die Rotation von der Position des Objekts beeinflusst wird und wenn ich mich bewege, bleibt das Objekt auf der Maus stehen, aber irgendwann dreht es sich zu sehr und hört nicht auf sich zu drehen. – ZulluF