【发布时间】:2014-09-29 13:30:14
【问题描述】:
我正在使用 OpenGL ES 2.0 并尝试使用一些方法来构建我的对象类来旋转/平移/缩放它们。
我只是在 0,0,0 中设置我的对象,然后将其移动到屏幕上的所需位置。以下是我单独移动它的方法。之后我运行 buildObjectModelMatrix 将所有矩阵传递到一个 objectMatrix 中,这样我就可以获取顶点并将它们与我的 modelMatrix/objectMatrix 相乘,然后再渲染它。
我认为是对的,我必须按这个顺序乘我的矩阵:
[缩放]x[旋转]x[平移]
->
[临时]x[翻译]
->
[对象矩阵]
我找到了一些文献。也许我会在几分钟内得到它,如果我愿意,我会更新它。
http://gamedev.stackexchange.com
setIdentityM(scaleMatrix, 0); setIdentityM(translateMatrix, 0); setIdentityM(rotateMatrix, 0);
public void translate(float x, float y, float z) {
translateM(translateMatrix, 0, x, y, z);
buildObjectModelMatrix();
}
public void rotate(float angle, float x, float y, float z) {
rotateM(rotateMatrix, 0, angle, x, y, z);
buildObjectModelMatrix();
}
public void scale(float x, float y,float z) {
scaleM(scaleMatrix, 0, x, y, z);
buildObjectModelMatrix();
}
private void buildObjectModelMatrix() {
multiplyMM(tempM, 0, scaleMatrix, 0, rotateMatrix, 0);
multiplyMM(objectMatrix, 0, tempM, 0, translateMatrix, 0);
}
已解决: 整个事情的问题是,如果你在翻译之前进行缩放,你翻译的距离就会有所不同!乘以矩阵的正确代码应该是(如果我错了,请纠正我)
private void buildObjectModelMatrix() {
multiplyMM(tempM, 0, translateMatrix, 0, rotateMatrix, 0);
multiplyMM(objectMatrix, 0, tempM, 0, scaleMatrix, 0);
}
您首先平移和旋转。之后,您可以缩放对象。
用多个对象测试...所以我希望这会有所帮助:)
【问题讨论】:
标签: android matrix opengl-es matrix-multiplication