Я работаю с OpenGL ES 2.0 и пытаюсь создать класс объектов с помощью некоторых методов, чтобы повернуть/перевести/масштабировать их.Масштаб, повернуть, перевести w. матрицы в openGl ES 2.0
Я просто установил свой объект в 0,0,0 и переместил его в нужное положение на экране. Ниже приведены мои методы для его перемещения отдельно. После этого я запустил buildObjectModelMatrix, чтобы передать все матрицы в одну objectMatrix, поэтому я могу взять вершины и размножить их с помощью modelMatrix/objectMatrix и затем вынести их.
Что я думаю, что это правильно, я должен умножить свои матрицы в следующем порядке:
[Масштаб] х [вращение] х [перевод]
->
[Темп] х [ перевод]
->
[objectMatrix]
Я мы нашли некоторую литературу. Может быть, я получу его за несколько минут, если я захочу, я его обновлю.
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);
}
с этим вы переводите и вращать первый. Впоследствии вы можете масштабировать объект.
Испытано с несколькими объектами ... так что я надеюсь, что это помогло :)
спасибо, да, это было сделано – LordSmith