2016-09-22 167 views
0

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

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

我想旋转对象的角度。这可以如何实现?

回答

0

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

这个网站是很好的理解与矩阵渲染的基础知识(它使用C++和GLM):http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/

+0

我是新来的OpenGL的。根据理解,所使用的MVP矩阵用于3D旋转(如果我错了,请纠正我),到目前为止这是非常复杂的。是否有任何方法只是2D旋转的对象? 目前我们正在绘制PNG/JPEG/BMP图片以及2D平面中的自定义框。这是我们想旋转的东西。我们正在计算这些对象的顶点坐标,(4个坐标为框,2个为BMP/JPEG/PNG)。我们尝试计算坐标并试图以新的方向进行绘图,但着色器应用程序没有正确执行。 你能帮忙吗? –

+0

对于旋转,矩阵是要走的路。 MVP系统应该仍然可以用于2D。虽然,您可以缩小平移和缩放到x和y,而旋转只是实现z旋转矩阵。 – SporreKing

+0

需要记住的重要一点是,当旋转应用于正在渲染的网格物体时,它将围绕它的本地原点旋转。这就是翻译必须在着色器中应用的原因,以及为什么不能在外部更改顶点坐标。否则,原点将从网格移开,并且它将看起来围绕原点循环。很多人都忘记了这一点,这可能是导致错误结果的原因。 – SporreKing