沿Y轴旋转翻转精灵朝向时X轴输入反向及渲染位置偏移问题
问题原因
你遇到的异常是模型变换矩阵的构造顺序颠倒导致的:
你当前使用的是列主序矩阵,矩阵对向量的运算为右乘规则(矩阵 * 向量),构造矩阵时后执行的矩阵方法,会优先作用于顶点。
你现在的代码构造顺序是:缩放 → X轴旋转 → Y轴旋转 → Z轴旋转 → 平移
对应到顶点实际变换顺序为:平移 → Z轴旋转 → Y轴旋转 → X轴旋转 → 缩放
相当于你先把模型移动到了世界坐标位置,再对整个坐标系做旋转,自然会把模型的世界位置也跟着旋转方向反转,就出现了输入方向反转、精灵渲染位置和逻辑位置相反的问题。
解决方案
调整getTransformationMatrix的变换顺序,先执行平移,再执行旋转,最后执行缩放即可:
public Matrix4f getTransformationMatrix() { Matrix4f matrix = new Matrix4f(); // 平移最先调用,最后作用于顶点,将旋转缩放后的模型移动到世界坐标 matrix.translate(position); matrix.rotateX((float) Math.toRadians(rotation.getX())); matrix.rotateY((float) Math.toRadians(rotation.getY())); matrix.rotateZ((float) Math.toRadians(rotation.getZ())); // 缩放最后调用,最先作用于顶点,仅修改模型本地大小 matrix.scale(scale); return matrix; }
调整后Y轴旋转只会作用于模型本身的朝向,不会影响模型的世界坐标位置,输入方向和渲染位置都会恢复正常。
内容的提问来源于stack exchange,提问作者Amaury Le Roux Dupeyron
相关产品推荐
相关产品推荐

