1

前日にlibgdxの作業を開始しました。2 つの角が左下と右下にあり、1 つの点が画面の中央上部にあるような三角形を作成したかったのです。遠近法カメラを使用しています。私のコード例は次のとおりです。

public class Test1 implements ApplicationListener{

    PerspectiveCamera camera;
    Mesh triangle;

    @Override
    public void create() {
        // TODO Auto-generated method stub
        camera = new PerspectiveCamera(67, 45, 45 / (Gdx.graphics.getWidth() / (float)Gdx.graphics.getHeight()));
        camera.near = 1;
        camera.far = 200;
        triangle = createTriangle();
    }

    @Override
    public void resize(int width, int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void render() {
        // TODO Auto-generated method stub
        GL10 gl = Gdx.gl10;
        gl.glClearColor(0, 0, 0, 1);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glEnable(GL10.GL_DEPTH_TEST);

        camera.update();
        camera.apply(gl);

        triangle.render(Gdx.gl10.GL_TRIANGLES);

    }

    public Mesh createTriangle() {
        float[] vertices = {-45f, -27f, -67,
                45f, -27f, -67,
                0, 27f, -67
        };

        short[] indices = {0,1,2};
        Mesh mesh = new Mesh(true, 3, 3, new VertexAttribute(Usage.Position, 3, ShaderProgram.POSITION_ATTRIBUTE));
        mesh.setVertices(vertices);
        mesh.setIndices(indices);
        return mesh;


    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub

    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub

    }

    @Override
    public void dispose() {
        // TODO Auto-generated method stub

    }
}

OpenGL には単位がないことを読んでいたので、幅を 45 単位にし、それに応じて高さを設定することにしました。アプリケーションを実行すると、三角形が期待どおりに表示されません。画面の幅と高さよりも小さいです。3D の経験はありません。どこが間違っているのか教えてください。スクリーンショットは次のとおりです。

ここに画像の説明を入力

4

1 に答える 1

0

長方形を作りたいとおっしゃいましたか?指定した頂点は3つだけですか?トライアングルのことですか?もしそうなら、あなたの結果の問題は何だと思われますか?

乾杯

編集1: あなたの質問を読み直したので、私が与えた答えをお詫びします。

サイズ変更機能を実装する必要があります。レンダリングが呼び出される前にウィンドウが作成されるときに一度呼び出されるので、そこにカメラを作成します。の線に沿った何か

@Override
public void resize(int width, int height) {
   float aspectRatio = (float) width / (float) height;
   camera = new PerspectiveCamera(67,2f * aspectRatio, 2f);
}

あなたが探しているものでなければなりません。詳しくは、カメラのセクションをご覧ください。正投影カメラに関するものかもしれませんが、基本的な原則は引き続き適用されます

編集2: OpenGlのユニットはアプリケーション固有です。使用する単位を設定する必要があります。

ただし、慣例があります。たとえば、デフォルトでは、カメラは負のZ軸を「見下ろし」、正のXは右に、正のYは上になります。これは右手の法則と呼ばれます。

3Dカメラを45のビュー幅(幅45のカメラのオブジェクトが画面全体に表示されるように)とアスペクト比を超える45の高さを持つように設定しました。覚えておかなければならないのは、遠くにある3Dのオブジェクトは、近くにあるときよりも小さいということです。したがって、三角形が画面全体に表示されることを期待していたかもしれませんが、三角形のポイントのZ座標は遠く(カメラから67)離れているため、三角形は小さく見えます。

2Dのみに関心がある場合は、anと呼ばれるものを使用して、OrthographicCamera描画するものがカメラからの距離によってサイズが変化しないようにします(遠近法はありません) 。

于 2012-11-07T17:57:30.263 に答える