在C#的OpenGL与OpenTK中如何用Vector3创建缩放矩阵?
使用Vector3实现OpenTK Matrix4的缩放变换
针对你遇到的OpenTK中Matrix4.CreateScale()不直接支持Vector3的问题,有两种简单的解决方式:
1. 直接传入Vector3的分量
OpenTK的Matrix4.CreateScale()其实提供了接受三个float参数的重载,你可以直接把Vector3的X、Y、Z分量分别传入:
// 假设scale是你定义的Vector3类型缩放参数 modelMatrix = Matrix4.CreateScale(scale.X, scale.Y, scale.Z);
2. 自定义扩展方法(更优雅的调用方式)
如果想让调用方式和平移、旋转保持一致(直接传Vector3),可以写一个扩展方法封装:
public static class Matrix4Extensions { public static Matrix4 CreateScale(Vector3 scale) { return Matrix4.CreateScale(scale.X, scale.Y, scale.Z); } }
调用时直接使用:
modelMatrix = Matrix4Extensions.CreateScale(scale);
额外提示:你的旋转代码存在问题
你当前的旋转逻辑每次赋值都会覆盖之前的矩阵,最终只会应用Z轴旋转。正确的做法是通过矩阵乘法组合三个轴的旋转(注意乘法顺序,通常按Z→Y→X的顺序组合,可根据需求调整):
public void UpdateRotation() { var rotX = Matrix4.CreateRotationX(rotation.x); var rotY = Matrix4.CreateRotationY(rotation.y); var rotZ = Matrix4.CreateRotationZ(rotation.z); gameObject.mesh.modelMatrix = rotZ * rotY * rotX; }
内容的提问来源于stack exchange,提问作者kibrjr BC
相关产品推荐
相关产品推荐

