0

JOGLを使用して、Javaで単純なWavefrontObjファイルローダーとレンダラーを構築しています。ただし、単純なバニーテストメッシュをロードしているときはいつでも、グリッチな方法でレンダリングされており、何が原因であるかわかりません。ジオメトリの頂点と法線を使用しているだけで、テクスチャやマテリアルは使用していません。

経験豊富なグリッチ

そのグリッチの別の角度

init()以下は、メソッドからのGL初期化コードです。

gl.setSwapInterval(1);
gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f);        
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthFunc(GL2.GL_LESS);
gl.glEnable(GL2.GL_CULL_FACE);
gl.glCullFace(GL2.GL_BACK);
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glClearDepth(1.0d);

そして、これは私がモデルをレンダリングするために使用している方法です(今のところ固定パイプライン):

 gl.glBegin(GL2.GL_TRIANGLES);
    for(Face face : master.faces) {
        for(int i = 0; i < face.points.length; i++) {
            gl.glNormal3f(face.normals[i].x, face.normals[i].y, face.normals[i].z);             
            gl.glVertex3f(face.points[i].x, face.points[i].y, face.points[i].z);
        }
    }
    gl.glEnd();

すべての面と頂点masterを含むメインの「グループ」はどこにありますか。チェックしました-すべてがマスターグループに入り、glNormal3fとglVertex3fがすべての三角形の必要なすべての頂点に対して呼び出されます。

誰かがそれらのグリッチを引き起こしている可能性があるものを知ることができますか?

編集1:

射影行列とモデルビュー行列を設定するために使用しているコードは次のとおりです。

float aspect = (float) width / (float) height;

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();

glu.gluPerspective(60.0f, aspect, 0.01f, 100.0f);
glu.gluLookAt(2.0f, 1.0f, 1.5f,
        0.0f, 0.0f, 0.0f,
        0.0f, 1.0f, 0.0f);

gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
4

2 に答える 2

1

gl.glDepthFunc(GL2.GL_LESS);を削除してみてください。gl.glClearDepth(1.0d);

于 2012-11-09T22:16:30.803 に答える
0

さて、これは私のオブジェクトローダーのばかげた小さなバグが原因であるように見えました。入力頂点を解析すると、ジオメトリ頂点のすべてのx座標の最初の文字が途切れます。これらはすべて正規化されており、であるため、これは正の値には影響しませんでしたが、0.43 = .43すべての負の値を台無しにして、正として解釈されました。

それを理解するのに少し時間がかかりましたが、最終的にはそれを見つけました。それは、最も小さなエラーを追跡するのが非常に難しいことを示しています。

于 2012-11-25T11:50:02.343 に答える