0

私は私の学校のプロジェクトに取り組んでいて、それを始めたばかりです。SGFモデルをロードして表示するために管理されたフレームワークiveが提供されていますが、頂点から単純なテクスチャフロアを作成するために別のシェーダーを使用する場合は、モデルのみが表示されます(コンパイル後、フロアは0.5秒間表示されますが、後で表示されなくなります) )それを行う方法について何か提案はありますか?

    public void display(GLAutoDrawable drawable) {
    final GL3 gl = drawable.getGL().getGL3();
    loader.setUniformMatrix("projection", projection);

    gl.glClear(GL3.GL_COLOR_BUFFER_BIT | GL3.GL_DEPTH_BUFFER_BIT);

    myTexture.bind(gl, modeling, "my_texture");
    myTexture.bind(gl, modeling, "my_texture2");

    myTexture.bind(gl, program, "my_texture");
    myTexture.bind(gl, program, "my_texture2");

    Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);
    program.setUniformMatrix("model_view", mv);
    program.use(gl);

    gl.glDrawArrays(GL3.GL_TRIANGLES, 0, numVertices);
    // 2nd part
   // modeling.setUniformMatrix("model_view", mv);
    modeling.setUniformMatrix("model_view", mv);
    modeling.use(gl);
        for (Map.Entry<String, VertexBufferObject> entry : vboHashMap.entrySet()) {
            String key = entry.getKey();
            entry.getValue().bind(gl);
            gl.glDrawArrays(GL3.GL_TRIANGLES, 0, SGFLoader.getNumVertices(key));
        }
}

2番目の部分(モデルのロードを担当)の後に線を削除すると、木の板が表示されます。それ以外の場合は、モデルのみがレンダリングされます。

何か疑惑はありますか?

4

1 に答える 1

1

display()メソッドで床の頂点配列をバインドしているようには見えません。すべてを設定するときに一度バインドすると思いますが、フレームごとに再度バインドするのを忘れてください。これにより、ほんの一瞬点滅する理由がわかります。

OpenGLは、内部でオブジェクト指向ではありません。呼び出すglDrawArraysと、最後にバインドした配列が描画されます。

于 2013-01-11T17:35:46.080 に答える