美文网首页
OpenGL中的LookAt与Unity中的LookRotati

OpenGL中的LookAt与Unity中的LookRotati

作者: 卅云川 | 来源:发表于2022-09-26 21:21 被阅读0次

近日开发的一些功能,需要开发独立于Unity的一些旋转算法,其中就需要一个Unity中四元数的LookRotation方法的平替。

矩阵的知识不用很快就忘记了,而今天有幸找到了一篇讲述OpenGL中的LookAt方法的文章,并记录在此基础上开发平替版LookRotation的思路,文章路径:Breakdown of the LookAt function in OpenGL | Geert Arien

文章中的LookAt源码,获得的其实是视图矩阵的逆矩阵,为的是能够将视图内的坐标转换到世界坐标。而我们的诉求,其实就是当某个实体朝向一个给定的方向向量时,能够获取到该实体的旋转矩阵,有了旋转矩阵再获取四元数也就是一个公式的事情了。

所以,文章中讲述的线性变换内容并不是我们重点关注的,需要关注的是旋转部分。

旋转部分,因旋转矩阵与矩阵的逆矩阵的数值是一致的,所以依据方向向量、给定的向上的向量,就可以以此求出:

  • 旋转后的z轴向量(即给定的方向向量)
  • z轴向量与给定的向上的向量,叉乘可以求出旋转后的x轴向量
  • 通过前面得到的旋转后的x、z轴向量,叉乘得出y轴向量

需要说明的是,此处的计算会因左手坐标系与右手坐标系的不同而有细节上的差别,一定要根据自身诉求选择计算公式。文章里是以右手坐标系进行计算的,而我们的需求则是在左手坐标系下,所以向量的求解会有很大不同。我的开发工作就是因为在旋转矩阵、左手坐标系这里犯了糊涂,导致在这里兜兜转转很久。

下面就贴个源码:

// 创建基于左手坐标系的,朝向目标的旋转矩阵
public static Matrix3x3 CreateLookAt(ref Vector3 forward, ref Vector3 up)
{
    Vector3 zaxis = Vector3.Normalize(forward);
    Vector3 xaxis = Vector3.Normalize(Vector3.Cross(up, zaxis));
    Vector3 yaxis = Vector3.Cross(zaxis, xaxis);

    return new Matrix3x3(
        xaxis.X, xaxis.Y, xaxis.Z,
        yaxis.X, yaxis.Y, yaxis.Z,
        zaxis.X, zaxis.Y, zaxis.Z
    );
}

相关文章

  • OpenGL中的LookAt与Unity中的LookRotati

    近日开发的一些功能,需要开发独立于Unity的一些旋转算法,其中就需要一个Unity中四元数的LookRotati...

  • (三)Unity中简单使用OpenGL

    参考:Unity中简单使用Opengl关于unity3D的GL图像库的使用(这篇文章写的贼详细)Unity在脚本中...

  • unity 解决游戏粉屏

    原因:OpenGL不支持,在unity 高版本中 是默认添加的OpenGL3 但是在很多手机中还没有支持OpenG...

  • Unity解决LookAt乱动的问题

    Unity的Lookat相比大家都很熟悉吧,简单理解就是一个物体的Z轴始终朝着目标 比如 但是这样会有一个严重的问...

  • 2018-01-03

    Unity FinalIK,非常好的插件,主要用了LookAT,很方便,设置如下: 开发中用的是代码实现关键两步:...

  • Unity游戏和行业分析

    Unity or Unity3D是基于OpenGL API的游戏开发工具,而OpenGL实际上是一个跨平台、...

  • OpenGL(六) OpenGL中的向量与矩阵

    向量 在高中时期,其实大家就已经学过向量的相关知识了,这儿我们再复习一遍。 什么是向量? 在数学中,向量(也称为欧...

  • Shader第二十六讲 Tessellation

    Unity 5.1之前的版本,OpenGL ES2.0 、3.0、desktop OpenGL的渲染都是分别的版本...

  • OpenGL 中的向量与矩阵

    向量 在 3D 笛卡尔坐标系,一个顶点,就是 XYZ 坐标空间上的一个位置。而这个位置是由一个唯一的 XYZ 定义...

  • OpenGL中的裁剪与混合

    一、裁剪 另一种提高渲染性能的方法是只刷新屏幕上发生变化的部分。我们可能还需要将 OpengGL 渲染限制在窗口中...

网友评论

      本文标题:OpenGL中的LookAt与Unity中的LookRotati

      本文链接:https://www.haomeiwen.com/subject/kwuxartx.html