You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:30:51