0
私はアンドロイドアプリケーションのOpenGlに非常に素晴らしいルービックキューブを構築しました。残念ながら、私はそれをカメラに近づけると少し伸びて見えます。クローズオブジェクトが伸びている/消失点が変わっていますか?
私はそれが伸びずに、それはおそらく私の画面上に置くことができように大きな私のキューブを持っているしたいと思います:それはこのようになります。ここで
は、コードのビットです: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);
}
使用する投影行列を示してください。 –
Hey Stefan、 私が今追加したコードがあなたが探していたものかどうかはわかりません。私はあなたが求めた投影行列を見つけることができませんでした。私はチュートリアルからこのコードのほとんどを得て、私はそれのすべての細部を理解していません。お役に立てれば。それを見ていただきありがとうございます。 – aeduG
カメラがオブジェクトに近すぎます。カメラを少し後ろに動かして、近くの面を少し後ろに動かしてみてください。 (glFrustumfの5番目のパラメータ)。 –