旋转物体使其变小
Rotating the object makes it smaller
当我用我创建的函数在opengl es中旋转模型矩阵时,模型矩阵使模型在旋转时变小,我不明白为什么。
这里是旋转函数的代码(只绕z轴旋转)
public void rotateZ(float angle){
float cos = (float) (Math.cos(Math.toRadians(angle)));
float sin = (float) (Math.sin(Math.toRadians(angle)));
Matrix4x4 ret = IdentityM();
ret.setValue(cos, 0, 0);
ret.setValue(-sin, 0, 1);
ret.setValue(sin, 1, 0);
ret.setValue(cos, 1, 1);
Multiply(ret);
}
这里是乘法函数的代码:
public void Multiply(Matrix4x4 m){
float[][] m1 = m.toFloatMat();
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
float value = 0f;
for(int t = 0; t < 4; t++){
value += matrix[i][t] * m1[t][j];
}
matrix[i][j] = value;
}
}
}
和 setValue 函数:
public void setValue(float v, int i, int j){
matrix[i][j] = v;
}
对象只是越来越小,我不明白为什么><
在您的 Multiply
函数中,您在计算乘积时覆盖了原始矩阵。做一个临时矩阵存放结果,然后写回class成员matrix
.
当我用我创建的函数在opengl es中旋转模型矩阵时,模型矩阵使模型在旋转时变小,我不明白为什么。
这里是旋转函数的代码(只绕z轴旋转)
public void rotateZ(float angle){
float cos = (float) (Math.cos(Math.toRadians(angle)));
float sin = (float) (Math.sin(Math.toRadians(angle)));
Matrix4x4 ret = IdentityM();
ret.setValue(cos, 0, 0);
ret.setValue(-sin, 0, 1);
ret.setValue(sin, 1, 0);
ret.setValue(cos, 1, 1);
Multiply(ret);
}
这里是乘法函数的代码:
public void Multiply(Matrix4x4 m){
float[][] m1 = m.toFloatMat();
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
float value = 0f;
for(int t = 0; t < 4; t++){
value += matrix[i][t] * m1[t][j];
}
matrix[i][j] = value;
}
}
}
和 setValue 函数:
public void setValue(float v, int i, int j){
matrix[i][j] = v;
}
对象只是越来越小,我不明白为什么><
在您的 Multiply
函数中,您在计算乘积时覆盖了原始矩阵。做一个临时矩阵存放结果,然后写回class成员matrix
.