2012-04-12 8 views
0

私はアンドロイドアプリケーションのOpenGlに非常に素晴らしいルービックキューブを構築しました。残念ながら、私はそれをカメラに近づけると少し伸びて見えます。クローズオブジェクトが伸びている/消失点が変わっていますか?

My Rubiks Cube 1

My Rubiks Cube 2

私はそれが伸びずに、それはおそらく私の画面上に置くことができように大きな私のキューブを持っているしたいと思います:それはこのようになります。ここで

は、コードのビットです:

gl.glMatrixMode(GL10.GL_MODELVIEW); 

    gl.glLoadIdentity(); 

    float z = 3; 
    float x = 0; 
    float y = 3; 

    GLU.gluLookAt(gl, x, y, z, 0, 0, 0, 0, 1, 0); 

は私がGLU.gluPerspective()で動作するようにしようとしたが、それはうまくいきませんでした。

EDIT:

@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glDisable(GL10.GL_DITHER); 

    gl.glClearColor(0, 0, 0, 0); 

    gl.glShadeModel(GL10.GL_SMOOTH); 
    gl.glClearDepthf(1f); 
    gl.glEnable(GL10.GL_DEPTH_TEST); 
    gl.glDepthFunc(GL10.GL_LEQUAL); 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
} 

@Override 
public void onDrawFrame(GL10 gl) { 

    gl.glDisable(GL10.GL_DITHER); 

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

    gl.glMatrixMode(GL10.GL_MODELVIEW); 

    gl.glLoadIdentity(); 

    float z = 3; 
    float x = 0; 
    float y = 3; 

    GLU.gluLookAt(gl, x, y, z, 0, 0, 0, 0, 1, 0); 


    gl.glRotatef(angleX, 1, 0, 0); //This is the rotation if surface is touched 
    gl.glRotatef(angleY, 0, 1, 0); 

    f.draw(gl); //drawing the pieces of the cube 
    r.draw(gl); 
    l.draw(gl); 
    u.draw(gl); 
    d.draw(gl); 
    b.draw(gl); 

    for (int i = 0; i < corners.length; i++) { 
     corners[i].draw(gl); 
    } 
    for (int i = 0; i < edges.length; i++) { 
     edges[i].draw(gl); 
    } 
    display(); //this has nothing to do with opengl 

} 

@Override 
public void onSurfaceChanged(GL10 gl, int width, int height) { 
    gl.glViewport(0, 0, width, height); 

    float ratio = (float) width/height; 

    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 
    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 25); 
} 
+0

使用する投影行列を示してください。 –

+0

Hey Stefan、 私が今追加したコードがあなたが探していたものかどうかはわかりません。私はあなたが求めた投影行列を見つけることができませんでした。私はチュートリアルからこのコードのほとんどを得て、私はそれのすべての細部を理解していません。お役に立てれば。それを見ていただきありがとうございます。 – aeduG

+0

カメラがオブジェクトに近すぎます。カメラを少し後ろに動かして、近くの面を少し後ろに動かしてみてください。 (glFrustumfの5番目のパラメータ)。 –

答えて

2

カメラが被写体にあまりにも近いです。ここに私のレンダラークラスからのより多くのコードがあります。カメラを少し後ろに動かして、近くの面を少し後ろに動かしてみてください。 (第5パラメータからglFrustumf)。

関連する問題