Ja, ich setzte die Viewmatrix zur Einheitsmatrix. Ich habe dieses Konzept jetzt mal in mein Spiel übertragen, aber das Objekt wird über dem Slot angezeigt, obwohl die Position f die linke obere Ecke des Slots und d Länge bzw. Breite ist, so wie im KSKB, wo es funktioniert. Den folgenden Code auszuführen ist eigentlich nicht nötig, die Codes(Spiel/KSKB) im Vergleich:
Hier wird’s über dem Slot angezeigt
public void draw(Point2D.Float f, Point2D.Float d) {
glViewport((int)f.x, (int)(Display.getHeight()-f.y), (int)d.x, (int)d.y);
glUniformMatrix4(m.projectionMatrixLocation, false, Main.putFloatCoords(Main.projection(m.fov, d.x/d.y, 0.1f, 100)));
glUniformMatrix4(m.viewMatrixLocation, false, Main.putFloatCoords(Main.einheitsMatrix()));
m.modelMatrix = Main.matrixMultiply(m.modelMatrix, Main.putFloatCoords(Main.einheitsMatrix()));
m.modelMatrix = Main.matrixMultiply(m.modelMatrix, Main.putFloatCoords(Main.translate(0, 0, -2.5f)));
m.modelMatrix = Main.matrixMultiply(m.modelMatrix, Main.putFloatCoords(Main.rotate(0, 1, 0, 45.0f)));
o.draw();
m.modelMatrix = Main.matrixMultiply(m.modelMatrix, Main.putFloatCoords(Main.rotate(0, 1, 0, -45.0f)));
m.modelMatrix = Main.matrixMultiply(m.modelMatrix, Main.putFloatCoords(Main.translate(0, 0, 2.5f)));
glUniformMatrix4(m.projectionMatrixLocation, false, Main.putFloatCoords(Main.projection(m.fov, Display.getWidth()/Display.getHeight(), 0.1f, 100)));
glUniformMatrix4(m.viewMatrixLocation, false, m.viewMatrix);
glViewport(0, 0, Display.getWidth(), Display.getHeight());
}
Und hier das KSKB, es wird genau im Slot angezeigt
projMatrix = putFloatCoords(projection(45, Display.getWidth()/Display.getHeight(), 0.1f, 1000));
glMatrixMode(GL_PROJECTION);
glLoadMatrix(projMatrix);
glMatrixMode(GL_MODELVIEW);
glViewport(100, Display.getHeight()-100-75, 75, 75);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0,0,-5);
glRotatef(45, 1, 1, 0);
glColor4f(1, 1, 1, 1);
drawCube();
glPopMatrix();