0

画面上のある点に画像を表示しようとしています。

現在のポイントのピッチとヨーがあります。必要なのは、これらの値を2つの座標点に変換することだけです。

これが私がこれまでにしたことです:

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);

一見、このコードは簡単に見えますが、なぜ期待されるポイントを表示しないのかわかりません。

変数yawpitchは、ここでは3Dのポイントへの回転です。

変数myPlayer_yawmyPlayer_pitchは、プレーヤーがいつでも見ている場所を表します。

私は何か間違ったことをしましたか?

ここに画像の説明を入力してください

私はそのような結果を得たいです:

  • プレーヤーを探しています=>リターン(高さ/ 2、幅/ 2)
  • プレーヤーは私の後ろにいます=>リターン(高さ、幅/ 2)
  • プレーヤーは私の左側にいます=>リターン(高さ/ 2、0)
  • プレーヤーは私の右側にあります=>リターン(高さ/ 2、幅)
  • プレーヤーは私の真上にいます=>リターン(0、幅/ 2)
4

1 に答える 1

0

最後に私はそれを使用して解決しましたvertex3D

コードは次のとおりです。

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);
}

あなたはそれをそのように使うことができます:

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)

これが誰かに役立つことを願っています。

于 2012-04-16T09:06:34.797 に答える