1

Android デバイスで OpenGL ES 2.0 を使用しています。

球体を起動して実行し、描画しようとしています。現在、私はほぼ球体を持っていますが、明らかにそれは非常に間違っています.

私のアプリでは、途中で ByteBuffer に変換して OpenGL に渡す Vector3 のリストを保持しています。Cube と Tetrahedron で nicley を描画しているので、コードが問題ないことはわかっています。私が変更した 2 つの部分は次のとおりです。 頂点の決定 頂点の描画。

問題のコード スニペットを次に示します。私は何を間違っていますか?極座標の決定:

private void ConstructPositionVertices()
{
    for (float latitutde = 0.0f; latitutde < (float)(Math.PI * 2.0f); latitutde += 0.1f)
    {
        for (float longitude = 0.0f; longitude < (float)(2.0f * Math.PI); longitude += 0.1f)
        {
            mPositionVertices.add(ConvertFromSphericalToCartesian(1.0f, latitutde, longitude));
        }
    }
}

極座標からデカルト座標への変換:

public static Vector3 ConvertFromSphericalToCartesian(float inLength, float inPhi, float inTheta)
{
    float x = inLength * (float)(Math.sin(inPhi) * Math.cos(inTheta));
    float y = inLength * (float)(Math.sin(inPhi) * Math.sin(inTheta));
    float z = inLength * (float)Math.cos(inTheta);
    Vector3 convertedVector = new Vector3(x, y, z);
    return convertedVector;
}

円を描く:

inGL.glDrawArrays(GL10.GL_TRIANGLES, 0, numVertices);

明らかにいくつかのコードを省略しましたが、間違いはこれらのスニペットのどこかにあると確信しています。ポイントを OpenGL に渡し、ポイントを接続する必要がある Triangles を呼び出す以外に、ポイントを使用することはありません。

編集:写真がいいかもしれません!

スフィアフェイル

4

2 に答える 2

2

z は phi を使用して計算する必要があります。float z = inLength * (float)Math.cos(inPhi);

また、生成されたポイントは三角形ではないので、GL_LINE_STRIP を使用することをお勧めします。

于 2013-03-21T06:13:26.053 に答える