3D 旋转扭曲立方体
3D Rotation warps cube
过去几周我一直在创建一个 3D 引擎,并且我已经设法为我的对象进行平移和缩放。但是我的轮换有点问题。
当我尝试在 z 轴上将我的立方体旋转 45 度时,它变得扭曲了。
Example
这里是我所有的立方体旋转计算的地方。 'vertices' 是一个包含我的立方体中所有点的数组。代码仅限于沿z轴旋转。
public void rotate(vec3 r) {
rotation.add(r);
float sinZ = (float) Math.sin(Math.toRadians(r.z));
float cosZ = (float) Math.cos(Math.toRadians(r.z));
for (int vdx = 0; vdx < vertices.size(); vdx++) {
vec3 v = vertices.get(vdx);
v.x = v.x * cosZ - v.y * sinZ;
v.y = v.y * cosZ + v.x * sinZ;
vertices.set(vdx, v);
}
}
假设立方体位于位置 (0, 0, 0)
我希望在不使用外部模块的情况下执行此操作。
您需要临时变量 x, y,例如:
x = v.x * cosZ - v.y * sinZ;
y = v.y * cosZ + v.x * sinZ;
v.x = x;
v.y = y;
否则v.y的计算使用了错误的v.x
过去几周我一直在创建一个 3D 引擎,并且我已经设法为我的对象进行平移和缩放。但是我的轮换有点问题。 当我尝试在 z 轴上将我的立方体旋转 45 度时,它变得扭曲了。
Example
这里是我所有的立方体旋转计算的地方。 'vertices' 是一个包含我的立方体中所有点的数组。代码仅限于沿z轴旋转。
public void rotate(vec3 r) {
rotation.add(r);
float sinZ = (float) Math.sin(Math.toRadians(r.z));
float cosZ = (float) Math.cos(Math.toRadians(r.z));
for (int vdx = 0; vdx < vertices.size(); vdx++) {
vec3 v = vertices.get(vdx);
v.x = v.x * cosZ - v.y * sinZ;
v.y = v.y * cosZ + v.x * sinZ;
vertices.set(vdx, v);
}
}
假设立方体位于位置 (0, 0, 0)
我希望在不使用外部模块的情况下执行此操作。
您需要临时变量 x, y,例如:
x = v.x * cosZ - v.y * sinZ;
y = v.y * cosZ + v.x * sinZ;
v.x = x;
v.y = y;
否则v.y的计算使用了错误的v.x