2012-04-09 7 views
0

Ich versuche, ein Bild auf einem Punkt auf dem Bildschirm anzuzeigen.Spiel - Pitch und Gieren nach XY konvertieren

Ich habe die Steigung und die Gier des aktuellen Punktes. Alles, was ich brauche, ist, diese Werte in 2 Koordinaten umzuwandeln. Hier

ist das, was ich bisher getan:

double tmp_yaw = yaw - myPlayer_yaw; 
double tmp_pitch = pitch - myPlayer_pitch; 

if (tmp_yaw < -180D) tmp_yaw += 360D; 
if (tmp_yaw > 180D) tmp_yaw -= 360D; 

// X Y screen coords 
int x = (tmp_yaw/180) * (screen_width/2); 
int y = (tmp_pitch/90) * (screen_height/2); 

Auf den ersten Blick dieser Code sieht einfach aus, aber ich weiß nicht, warum ich nicht den Punkt anzeigt, wo es erwartet wird.

Variablen yaw und pitch sind hier die Drehung auf den Punkt in 3D.

Variablen myPlayer_yaw und myPlayer_pitch stehen für wo der Spieler jeden Moment sieht.

Habe ich etwas falsch gemacht?

enter image description here

Ich möchte diese Art der Ergebnisse erhalten:

  • Ich suche ein Spieler => Returns (Höhe/2, Breite/2)
  • Der Spieler hinter mir => Returns (Höhe, Breite/2)
  • Der Spieler auf meinem linken => Returns (Höhe/2, 0)
  • Der Spieler ist auf meinem rechten => Returns (Höhe/2, Breite)
  • Der Spieler über mir ist gerade => Returns (0, Breite/2)
+1

Pitch und Gier sind Winkelmessungen. Wie beabsichtigen Sie, einen Winkel zu einer Bildschirmposition zuzuordnen? –

+0

Ja das ist genau das, was ich will – Manitoba

+0

Punkt ist auf der Unterseite, wenn die Gier 180 ist, etc ... – Manitoba

Antwort

0

Schließlich löste ich es vertex3D

Hier verwendet der Code:

public void drawLine(Vector3 origin, Vector3 destination, int color) 
{ 
    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 
    GL11.glLineWidth(3.0F); 
    GL11.glDisable(GL11.GL_DEPTH_TEST); 
    GL11.glDepthMask(false); 
    GL11.glBegin(GL11.GL_LINES); 

    float red = (float)((color & 0xFF0000) >> 16); 
    float green = (float)((color & 0x00FF00) >> 8); 
    float blue = (float)(color & 0x0000FF); 
    GL11.glColor3f(red, green, blue); 

    double diffX = destination.x() - origin.x() + 0.05D; 
    double diffY = destination.y() - origin.y() - 1.35D; 
    double diffZ = destination.z() - origin.z() - 0.05D; 

    GL11.glVertex3d(0.0D, 0.0D, 0.0D); 
    GL11.glVertex3d(-diffX, -diffY, -diffZ); 

    GL11.glEnd(); 
    GL11.glDepthMask(true); 
    GL11.glEnable(GL11.GL_DEPTH_TEST); 
} 

Sie können es verwenden wie das:

Vector3 vOrg = new Vector3(x, y, z); 
Vector3 vDest = new Vector3(cameraX, cameraY, cameraZ); 
drawLine(vOrg, vDest, 0xFF0000); // Will display a red line (RGB format) 

Ich hoffe, dass dies jemand helfen wird.