4

クワッドの描画を開始しましたが、頂点をいじり始めたときに、X 座標が反転していることに気付きました。私が何を意味するかを示す写真を次に示します。

ここに画像の説明を入力

これが私の頂点です-実際に表示する必要のないインデックスとテクスチャ座標です。

static final int COORDS_PER_VERTEX = 3;
static float positionCoords[] = { 
    -0.5f,  0.5f, 0.0f,   // top left
    -0.5f, -0.5f, 0.0f,   // bottom left
     0.5f, -0.5f, 0.0f,   // bottom right
     0.5f,  0.5f, 0.0f }; // top right

static final int COORDS_PER_TEXTURE = 2;
static float textureCoords[] = { 
    0.0f, 0.0f, 
    0.0f, 1.0f,
    1.0f, 1.0f,
    1.0f, 0.0f, };

private final short indices[] = { 0, 1, 2 };

そして、ここで Projection と View Matrix を変更します。

public void onSurfaceChanged(GL10 naGl, int width, int height)
{
        Log.d(TAG, "GL Surface Changed - Setting Up View");

    GLES20.glViewport(0, 0, width, height);

    float ratio = (float) width / height;

    Matrix.frustumM(ProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7);

    Matrix.setLookAtM(ViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
}

なぜ「後ろ向き」に描かれるのでしょうか。また、カメラがオブジェクトの後ろにある可能性があるため、オブジェクトの後ろにいる場合、3 次元空間で左が正になると考えました。

4

1 に答える 1

6

あなたは確かにオブジェクトを裏側から見ています。

あなたのlookAt関数は目を(0,0,-3)に配置し、lookAtポイントを(0,0,0)に配置しています。デフォルトでは、負の z 軸が画面を指していますが、逆方向 (正の z 軸に向かって) から見ています。

期待どおりのビューを得るには、(0,0,3) を (0,0,0) に向けて目を向ける必要があります。

Red Book のこの章は参考になるかもしれません。

于 2012-08-05T18:45:40.527 に答える