【Unity学习 3D基础数学编程】

本文介绍了2D和3D坐标系的概念,包括左手系和右手系,以及YUP和ZUP。接着探讨了向量的特性,如用于确定平面、控制速度,并讲解了向量的规范化和叉积、点积的应用。还讨论了矩阵在空间变换中的作用,如平移、缩放和旋转。最后,展示了Vector3D类的实现,包含向量的加减、叉积和归一化等操作。
摘要由CSDN通过智能技术生成

2.坐标系

  1. 2D坐标系:一般以屏幕左上角或者左下角为原点。 3D坐标系:左手系(默认使用的)和右手系,Y UP和Z UP。

3.向量

  1. 向量的特性:只能位移,不能缩放、旋转。
  2. 两个不相等的向量确定也给平行四边形、确定一个平面、确定一个三角形等。
  3. 可以用单位向量控制玩家的速度。
  4. now.Normalize(); 规范化向量,求这个向量的单位向量.
  5. 向量叉积:u x v可以计算平面的法向量。
  6. 向量点积:可以用来编写shader来模拟光照的颜色效果。

4.矩阵

  1. 对于一个空间点,设T为平移矩阵,S为缩放矩阵,R为旋转矩阵,则V * R * S * T为变化后的位置,但这样计算效率低,可以通过先计算RTS,然后再直接V * RTS,RTS就是代表了旋转、平移、缩放的矩阵。

平面及射线

  1. 射线的定义:P0为起点,u为单位向量,则P(t)=P0+tu;t为射线长度
  2. 平面的定义:P0为平面上的一点,n为法向量,p为平面任意一点,则n(p - p0)=0
  3. 射线与平面关系:t = (n.p1 - n.p0) / n.u;若t>=0,则射线与平面相交,且交点为p0+tu,若t<0,则不相交。

Vector3D类

public class Vector3D
{

    public float x, y, z;



    public Vector3D(float x=0f,float y=0f,float z=0f)
    {
        this.x = x;
        this.y = y;
        this.z = z;
        
    }
    




    public Vector3D add(Vector3D vec)
    {
        Vector3D ret = new Vector3D(x, y, z);
        ret.x += ret.x;
        ret.y += ret.y;
        ret.z += ret.z;
        return ret;
    }

    public Vector3D sub(Vector3D vec)
    {
        Vector3D ret = new Vector3D(x, y, z);
        ret.x -= vec.x;
        ret.y -= vec.y;
        ret.z -= vec.z;
        return ret;
    }

    public Vector3D corss(Vector3D vec)
    {
        Vector3D ret = new Vector3D();
        ret.x = y * vec.z - z * vec.y;
        ret.y = z * vec.x - x * vec.z;
        ret.z = x * vec.y - y * vec.x;
        return ret;
    }



    public void normalize()
    {
        float length = (float)System.Math.Sqrt(x * x + y * y + z * z);
        x /= length;
        y /= length;
        z /= length;
    }
    public override string ToString()
    {
        return string.Format("(" + x + "," + y + "," + z + ")");
    }

    public static Vector3D operator + (Vector3D lv,Vector3D rv)
    {
        return lv.add(rv);
    }

    public static Vector3D operator - (Vector3D lv,Vector3D rv)
    {
        return lv.sub(rv);
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞲_大河弯弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值