自研无矩阵3D引擎中立方体Z轴旋转异常问题求助
Z轴旋转代码修复:解决立方体挤压变形问题
你的旋转代码出现挤压变形的核心原因是计算y坐标时复用了已经更新过的x值,而非使用旋转前的原始坐标。
错误原因拆解
你当前的代码:
vertex.x = vertex.x * cos(theta) - vertex.y * sin(theta) vertex.y = vertex.y * cos(theta) + vertex.x * sin(theta)
第一行执行后,vertex.x已经被替换为旋转后的新值,第二行再用这个新x去计算y,相当于对坐标做了错误的非线性变换,直接导致了挤压扭曲。
正确的Z轴旋转实现
必须先保存旋转前的原始x、y坐标,再基于原始值计算新坐标,标准Z轴旋转公式的正确代码实现:
# 先缓存原始坐标值 orig_x = vertex.x orig_y = vertex.y # 应用Z轴旋转公式 vertex.x = orig_x * cos(theta) - orig_y * sin(theta) vertex.y = orig_x * sin(theta) + orig_y * cos(theta)
原理说明
绕Z轴的旋转是正交线性变换,要求所有计算都基于旋转前的原始顶点坐标。通过缓存orig_x和orig_y,确保x和y的计算都使用同一组初始值,这样就能保证旋转后顶点间的相对距离不变,立方体自然不会出现挤压变形。
内容的提问来源于stack exchange,提问作者name
相关产品推荐
相关产品推荐

