私はAndroid OpenGL-ESでレンダリングしたポイントクラウドを持っています。私はそれを正しく翻訳することができますが、私がそれを回転させると、私はそれを望みのように動作させることができません。私はそれをポイントクラウドの中心(私はこの3Dポイントを持っている)について回転させたいが、それをどうやって行うのか分からない。Android OpenGL ES:任意軸に対する回転?
public void onDrawFrame(GL10 gl) {
// Clears the screen and depth buffer.
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
// Replace the current matrix with the identity matrix
gl.glLoadIdentity();
// Translates 4 units into the screen.
GLU.gluLookAt(gl, eyeX, eyeY, eyeZ,
centerX, centerY, centerZ,
upX, upY, upZ);
// rotate
gl.glRotatef(_xAngle, 1f, 0f, 0f);
gl.glRotatef(_yAngle, 0f, 1f, 0f);
gl.glRotatef(_zAngle, 0f, 0f, 1f);
gl.glTranslatef(_xTranslate, _yTranslate, _zTranslate);
// Draw things
ptCloud.draw(gl);
aBox.draw(gl);
}
ユーザーの操作に応答して_translate変数と_angle変数を変更し、OpenGlがそれらに作用します。私の視点が設定された直後に私は私のprCloudで描画ルーチンを実行することがわかります。
:ここpublic void onSurfaceChanged(GL10 gl, int width, int height) {
// Sets the current view port to the new size.
gl.glViewport(0, 0, width, height);
// Select the projection matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
// Reset the projection matrix
gl.glLoadIdentity();
// Calculate the aspect ratio of the window
GLU.gluPerspective(gl, 45.0f, (float) width/(float) height, 0.001f,
1000000.0f);
// Select the modelview matrix
gl.glMatrixMode(GL10.GL_MODELVIEW);
// Reset the modelview matrix
gl.glLoadIdentity();
}
は私のルックアットデフォルト変数です:私はわからないので、それは何も影響を与える場合
public void draw(GL10 gl) {
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glPointSize(0.5f);
gl.glDrawArrays(GL10.GL_POINTS, 0, numVertices);
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
と同様に表面を作成する方法を:私はことを紹介します
private float eyeX = 20;
private float eyeY = -150;
private float eyeZ = 60;
private float centerX = 0;
private float centerY = 0;
private float centerZ = 0;
private float upX = 0;
private float upY = 0;
private float upZ = 1;
ポイントは(0,0,0)から(120,180,38)の範囲になるようにスケールされています。私はまた、全体のモデルがランダムに提供される目の位置を見つける方法を知りません最大ポイント値...
私はどのように私が期待するだろう回転誰かが推測できますか?
実は、これは私がポイントに対してそれを回転させることができます(0,0,0 )。任意の点(ポイントクラウドの中心のような)に対してどのように回転させるのですか? – RedLeader
..入手します。回転前のポイントに翻訳します。回転する。その点の否定に翻訳してください。 – RedLeader
@RedLeader別のオプションは、変換を実行する前にglPushMatrixを実行してから、グラフィックスの状態を元に戻した時の状態に戻したときに、プッシュマトリックスと言っていたので、ポイントのネガを翻訳する必要はありません –