【问题标题】:Rotate Object OpenGL ES 2.0旋转对象 OpenGL ES 2.0
【发布时间】:2016-09-22 12:51:53
【问题描述】:

我们使用以下代码在 OpenGL ES 2.0 中绘制 BMP 图像: (x1,y1是左下坐标,x2,y2是屏幕上物体的右上坐标,tempimage数据是指向存储的bmp图像信息的指针)

struct
{
  GLuint uiId;
  GLuint uiLowerLeftLoc;
  GLuint uiScaleMatrixLoc;
  GLuint auiLoc[eNumUniforms];
}
m_ShaderProgram;

glUniform2f(m_ShaderProgram.uiLowerLeftLoc, x1, y1);
float afMatrix[4] = { x2 - x1, 0, 0, y2 - y1 };
glUniformMatrix2fv(m_ShaderProgram.uiScaleMatrixLoc, 1, GL_FALSE, afMatrix);
glBindTexture(GL_TEXTURE_2D, m_uiTexForeground);
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, tempimagedata);
glBindBuffer(GL_ARRAY_BUFFER, m_uiVbo);
glEnableVertexAttribArray(VERTEX_ARRAY);
glVertexAttribPointer(VERTEX_ARRAY, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableVertexAttribArray(VERTEX_ARRAY);

我想根据角度旋转对象。这如何实现?

【问题讨论】:

    标签: opengl-es-2.0 powervr-sgx dm814x


    【解决方案1】:

    您应该在渲染网格之前向您正在使用的着色器发送一个旋转/变换矩阵。在您的顶点着色器中,将坐标乘以矩阵。

    此站点有助于了解使用矩阵进行渲染的基础知识(它使用 C++ 和 GLM):http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/

    【讨论】:

    • 我是 OpenGL 新手。据了解,使用的 MVP 矩阵用于 3D 旋转(如果我错了,请纠正我),到目前为止,这相当复杂。有什么方法可以仅对对象进行 2D 旋转吗?目前我们正在绘制 PNG/JPEG/BMP 图片以及 2D 平面中的自定义框。这就是我们想要旋转的。我们正在计算这些对象的顶点坐标,(4 组坐标用于框,2 组用于 BMP/JPEG/PNG)。我们尝试计算坐标并尝试使用新的方向进行绘图,但着色器应用不正确。你能帮忙吗?
    • 对于旋转,矩阵是要走的路。即使是 2D,MVP 系统仍应使用。虽然,您可以将平移和缩放范围缩小到 x 和 y,并且对于旋转只需实现 z 旋转矩阵。
    • 要记住的重要一点是,当您正在渲染的网格物体上应用旋转时,它将围绕其本地原点旋转。这就是为什么必须在着色器中应用平移,以及为什么不能从外部更改顶点坐标的原因。否则,原点会偏离网格,并且看起来会围绕原点循环。很多人忘记了这一点,这可能是结果不正确的原因。
    • 感谢 SporreKing。我们正在从外部控制顶点坐标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多