1

この投稿でhttp://www.badlogicgames.com/wordpress/?p=504 libgdx 氏 Mario は次のように書いています。

ゼロからの OpenGL: OpenGL ES 1.x に関する非常によく書かれたチュートリアル シリーズです。OpenGL を使い始めるために必要なすべての基本事項をカバーしています。チュートリアルは IPhone 用に書かれており、Objective C/C++ を使用していることに注意してください。API は同じなので、これは大きな問題にはなりません。

残念なことに、実行中のチュートリアルの最初の例に相当する libgdx を取得できませんでした。これは次のとおりです。

- (void)drawView:(GLView*)view;
{
    Vertex3D    vertex1 = Vertex3DMake(0.0, 1.0, -3.0);
    Vertex3D    vertex2 = Vertex3DMake(1.0, 0.0, -3.0);
    Vertex3D    vertex3 = Vertex3DMake(-1.0, 0.0, -3.0);
    Triangle3D  triangle = Triangle3DMake(vertex1, vertex2, vertex3);

    glLoadIdentity();
    glClearColor(0.7, 0.7, 0.7, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColor4f(1.0, 0.0, 0.0, 1.0);
    glVertexPointer(3, GL_FLOAT, 0, &triangle);
    glDrawArrays(GL_TRIANGLES, 0, 9);
    glDisableClientState(GL_VERTEX_ARRAY);
}

私のコード...

public void render () {
    Gdx.gl11.glLoadIdentity();
    Gdx.gl11.glRotatef(rotation, 0.0f, 0.0f, 1.0f);
    Gdx.gl11.glClearColor((float)0.7, (float)0.7, (float)0.7, (float)1.0);
    Gdx.gl11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    Gdx.gl11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    Gdx.gl11.glColor4f((float)1.0, (float)0.0, (float)0.0, (float)1.0);
    Gdx.gl11.glVertexPointer(3, GL11.GL_FLOAT, BYTES_PER_VERTEX, vertices);
    Gdx.gl11.glDrawArrays(GL11.GL_TRIANGLES, 0, 9);
    Gdx.gl11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
}

ここでの問題は「頂点」です。私はそれがどうあるべきか分かりません。たくさんのグーグルの後、私は思いついた:

final int BYTES_PER_VERTEX = (3 + 4) * 4;

public void create () {
    ByteBuffer buffer = ByteBuffer.allocateDirect(BYTES_PER_VERTEX * 3);
    buffer.order(ByteOrder.nativeOrder());
    vertices = buffer.asFloatBuffer();

    float[] verts = {
            0.0f, 1.0f, 0.0f, 1, 0, 0, 0,
            1.0f, 0.0f, 0.0f, 0, 1, 0, 0,
            -1.0f, 0.0f, 0.0f, 0, 0, 1, 0};

    vertices.put(verts);
    vertices.flip();
}

. それは三角形を表示しているように見えますが、頂点の値は元の例と同じではありません (z 値は -3 ではなく 0 です。この場合、何も表示されません)。

誰でも頂点に光を当てることができますか?

4

1 に答える 1

3

これが私が持っているものです。私は三角形の代わりに正方形を作成しますが、あなたはジストを手に入れます. iPhone のチュートリアルにあるランダム コードの多くは、内部で処理されます。libgdx が (Java で) 内部でどのように呼び出しを行っているか (カメラ管理、メッシュ管理など) に興味がある場合は、libgdx のソースを実際に分析することができます。

create() で:

mesh = new Mesh(true, 4, 4, 
            new VertexAttribute(Usage.Position, 3, "a_position"),
            new VertexAttribute(Usage.ColorPacked, 4, "a_color"));

mesh.setVertices(new float[] {
             -1.0f, -1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255),
              1.0f, -1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255),
             -1.0f,  1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255),
              1.0f,  1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255)});

mesh.setIndices(new short[] { 0, 1, 2, 3 });

resize() で

float aspectRatio = (float) width / (float) height;
camera = new PerspectiveCamera(67, 2f * aspectRatio, 2f);
camera.near = 0.1f;
camera.translate(0, 0, 0);

render() で

Gdx.gl11.glClearColor(0.7f, 0.7f, 0.7f, 1.0f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
mesh.render(GL10.GL_TRIANGLE_STRIP, 0, 4);

それが役立つことを願っています。

資力:

http://dpk.net/2011/03/07/libgdx-cubes-handling-inputs-in-applicationlistener-render/

http://www.badlogicgames.com/wordpress/?p=2032

于 2012-03-04T03:16:13.007 に答える