gpt4 book ai didi

安卓 OpenGL ES : Rotation against arbitrary axis?

转载 作者:行者123 更新时间:2023-11-29 22:23:39 30 4
gpt4 key购买 nike

我有一个在 Android OpenGL-ES 上渲染的点云。我可以正确翻译它(我认为)但是当我旋转它时,我无法让它按预期工作。我希望它围绕点云的中心旋转(我有这个 3D 点),但我不知道该怎么做。

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 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);
}

以及创建表面方法,因为我不确定它是否会影响任何东西:

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();
}

这是我的观察默认变量:

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)。我也不知道如何找到一个眼睛位置来显示整个模型提供的随机最大点值...

谁能猜出为什么它不会像我期望的那样旋转?

最佳答案

翻译后旋转!

转换按照您指定的顺序进行。如果您在平移之前旋转,那么平移会受到旋转等的影响。如果您在旋转之前平移,那么旋转会在旋转之前平移,因此它将位于对象的中心。

有关更多信息,请参阅这些页面:

http://www.3dcodingtutorial.com/Basic-OpenGL-functions/Translate-and-Rotate-functions.html

http://www.swiftless.com/tutorials/opengl/rotation.html

http://www.opengl.org/resources/faq/technical/transformations.htm

http://www.falloutsoftware.com/tutorials/gl/gl5.htm

关于安卓 OpenGL ES : Rotation against arbitrary axis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525740/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com