zoukankan      html  css  js  c++  java
  • MultiplyVector方法

    该方法的功能是用来对方向向量v进行矩阵变换,当矩阵与v进行变换时,只是对v的方向进行转换。那么系统就会对参与变换的Matrix4x4矩阵M进行特殊处理。

    例如:经过系统处理后就变为

    其中n002 + n102 + n202 = 1,n012 + n112 + n212 = 1,n022 + n122 + n222 = 1。此处以DirectX为例。在DirectX中向量的变换时v.M,而在OpenGL中向量的变换形式是M.v。

    看下面的例子

    using UnityEngine;
    using System.Collections;
    
    public class MultiplyVector_ts : MonoBehaviour {
    
        public Transform tr;
        Matrix4x4 mv0 = Matrix4x4.identity;
        Matrix4x4 mv1 = Matrix4x4.identity;
        // Use this for initialization
        void Start () {
    
            mv0.SetTRS(Vector3.one * 10.0f, Quaternion.Euler(new Vector3(0.0f, 30.0f, 0.0f)), Vector3.one);
    
            mv1.SetTRS(Vector3.one * 10.0f, Quaternion.Euler(new Vector3(0.0f, 0.6f, 0.0f)), Vector3.one);
        }
        
        // Update is called once per frame
        void Update () {
    
      
        }
    
        void OnGUI()
        {
            if(GUI.Button(new Rect(10.0f,10.0f,120.0f,45.0f),"方向旋转30度"))
            {
                tr.position = mv1.MultiplyPoint(tr.position);
                Vector3 tmp = new Vector3(10.0f, 0.0f, 0.0f);
                Vector3 v = mv0.MultiplyVector(tmp);
                Debug.Log("变换前的模长: " + tmp.magnitude);
                Debug.Log("变换后的向量: " + v);
                Debug.Log("变换后的模长: " + v.magnitude);
            }
        }
    }

    运行结果

    从上面的例子中我们可以证明,使用MultiplyVector方法只是改变了向量的方向,但其模的大小并未改变。

    关于代码中出现的SetTRS方法说明一下,该方法的功能是可以重设Matrix4x4矩阵。

    函数原型为

    //pos为位置向量,q为旋转角,s为放缩向量
    public void SetTRS(Vector3 pos,Quaternion q,Vector3 s);

    例如

    Matrix4x4 m1 = Matrix4x4.identity;
    m1.SetTRS(pos,q,s);
    Vector3 v2 = m1.MultiplyPoint3x4(v1);

    则v2的值等同于将v1的position增加pos,rotation旋转q,scale放缩s后的值。

  • 相关阅读:
    初心,勇敢~
    京东云,100倍故障时长赔付,呵呵
    京东万象数据接口,钱没花完,接口404,客服是白痴,无法维权
    随便写点
    关于UltraEdit的两个小问题
    Java
    2016年12月12日 回忆录随笔----------记录庸碌无为的一年四个月零十一天(一)
    iOS开发学习笔记
    sprintf函数php的详细使用方法
    BMS开发日记
  • 原文地址:https://www.cnblogs.com/tgycoder/p/5101790.html
Copyright © 2011-2022 走看看