gpt4 book ai didi

android - 使用矩阵。在 OpenGL ES 2.0 中旋转

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:39 24 4
gpt4 key购买 nike

编辑 - 添加更多代码

尝试使用 OpenGL ES 2.0 正确旋转四边形时遇到很多问题。

它似乎总是围绕屏幕坐标的中心旋转。我试图让它围绕它自己的中心旋转(对于 2d,因此仅 z 轴)。

我一直在试验 Matrix.translate,如下所示。但是,在这里更改 x 或 y 位置只是将四边形绘制在屏幕上的不同位置,但是当它旋转时,它会再次围绕屏幕中心旋转。请有人解释一下如何让它绕着自己的 z 轴旋转(如轮子)?

谢谢,这里是相关的代码行 - 如果需要更多,请询问,我会发布。 (请注意,我在 SO 和更广泛的互联网上看过很多类似的问题,但到目前为止我还没有找到答案)。

谢谢。

//Set rotation
Matrix.setRotateM(mRotationMatrix, 0, -angle, 0, 0, 1.0f);

//Testing translation
Matrix.translateM(mRotationMatrix, 0, -.5f, .5f, 0f);

// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mvpMatrix, 0, mRotationMatrix, 0, mvpMatrix, 0);

我的着色器(在类级别声明)

private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +

"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
"}";

private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";

来自 onSurfaceChanged

float ratio = (float) width / height;
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);

在我的 onDrawFrame 方法中

// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, 3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

//Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);

最佳答案

我遇到了同样的问题(看到奇怪的扭曲和其他一切),我的解决方案基于 Android Training > Displaying Graphics with OpenGL ES > Adding Motion下面。

(如果需要,请转到我的详细帖子: OpenGL ES Android Matrix Transformations .)

  1. mModelMatrix设置为恒等矩阵

    Matrix.setIdentityM(mModelMatrix, 0); // initialize to identity matrix
  2. 将翻译应用于mModelMatrix

    Matrix.translateM(mModelMatrix, 0, -0.5f, 0, 0); // translation to the left
  3. 将旋转应用到 mRotationMatrix(角度以度为单位)

    Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);
  4. 通过 Matrix.multiplyMM 结合旋转和平移

    mTempMatrix = mModelMatrix.clone();
    Matrix.multiplyMM(mModelMatrix, 0, mTempMatrix, 0, mRotationMatrix, 0);
  5. 将模型矩阵与投影和相机 View 相结合

    mTempMatrix = mMVPMatrix.clone();
    Matrix.multiplyMM(mMVPMatrix, 0, mTempMatrix, 0, mModelMatrix, 0);

关于android - 使用矩阵。在 OpenGL ES 2.0 中旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15837177/

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