大家好我正在开发一款需要使用opengl es的app。不过我有一些问题。我的任务是旋转一个关于任意点的矩阵,比如说(0,0,0)。我做了一些关于谷歌的研究,最常见的方法是
有效
glTranslatef(centerX, centerY, centerZ);
glRotatef(angle, 0, 0, 1);
glTranslatef(-centerX, -centerY, -centerZ);
然而我的问题是我使用的是opengl es 2.0。 opengl 2.0中不存在函数translatef。我有一个名为translateBy的函数,但我无法弄清楚如何使用translateBy函数将我的矩阵转换为某个点
感谢任何帮助将不胜感激。
答案 0 :(得分:0)
在OpenGL ES 2.0中,您必须使用顶点着色器,并使用
更新每个帧中的模型视图矩阵GLint modelviewmatrix = glGetUniformLocation(m_simpleProgram, "ModelviewMatrix");
matrx4 modelviewMatrix = rotation * translation;
glUniformMatrix4fv(modelviewmatrix, 1, 0, modelviewMatrix.Pointer());
假设matrx4为4x4的矩阵类。旋转和平移是用于旋转和平移的4x4矩阵对象。 只需制作自己的翻译和旋转功能, Translatef(x,y,z)相当于
Matrx4 Translate( x, y, z)
{
Matrx4 m;
m = { 1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
x, y, z, 1 }
return m;
}
和Rotatef(度,vector3轴)相当于
Matrx4 Rotate( float degree, vector3 axis)
{
float radians = degrees * 3.14159f / 180.0f;
float s = std::sin(radians);
float c = std::cos(radians);
Matrx4 m = Identity(); /// load identity matrix
m[0] = c + (1 - c) * axis.x * axis.x;
m[1] = (1 - c) * axis.x * axis.y - axis.z * s;
m[2] = (1 - c) * axis.x * axis.z + axis.y * s;
m[4] = (1 - c) * axis.x * axis.y + axis.z * s;
m[5] = c + (1 - c) * axis.y * axis.y;
m[6] = (1 - c) * axis.y * axis.z - axis.x * s;
m[8] = (1 - c) * axis.x * axis.z - axis.y * s;
m[9] = (1 - c) * axis.y * axis.z + axis.x * s;
m[10] = c + (1 - c) * axis.z * axis.z;
return m;
}