美文网首页
3D图形学基础

3D图形学基础

作者: E术家 | 来源:发表于2020-07-16 20:40 被阅读0次

向量

在 3D 笛卡尔坐标系,⼀个顶点就是XYZ坐标空间上的⼀个位置。⽽在空间中给定的⼀个位置,恰恰是由⼀个单独的 XYZ 定义的,⽽这这样的 XYZ 就是向量。

向量

在X轴上的向量 (1,0,0) 向量⻓度为1。我们称为⻓度为1的向量为单位向量。

向量长度计算公式

如果⼀个向量不是单位向量,⽽我们把它缩放到1。这个过程叫做标准化。将⼀个向量进⾏标准化就是将它的缩为1。也叫做单位化向量单位向量表示一个方向。

向量 点乘 (dot product)

点乘只能发⽣在2个向量之间进⾏。

2个(三维向量)单元向量之间进⾏点乘运算将得到⼀个标量(不是三维向量,是⼀个标量)。它表示两个向量之间的夹⻆。

前提条件: 2个向量必须为单位向量
动作: 2个三维向量之间进⾏点乘
结构: 返回⼀个[-1,1]范围的值,这个值其实就是 夹⻆的cos值(余弦值)

点乘

math3d 库中提供了关于点乘的API

//1.m3dDotProduct3 函数获得2个向量之间的点乘结果;
float m3dDotProduct3(const M3DVector3f u,const M3DVector3f v);
//2.m3dGetAngleBetweenVector3 即可获取2个向量之间夹⻆的弧度值;
float m3dGetAngleBetweenVector3(const M3DVector3f u,const 
M3DVector3f v);

向量 点乘 (cross product)

2个向量之间叉乘就可以得到另外⼀个向量,新的向量会与原来2个向量定义的平⾯垂直。同时进⾏叉乘,不必为单位向量。通常用于计算法线

前提: 2个普通向量
动作: 向量与向量叉乘
结果: 向量(垂直于原来2个向量定义的平⾯的向量)

叉乘

math3d 库中提供了关于叉乘的API

//m3dCrossProduct3 函数获得2个向量之间的叉乘结果得到⼀个新的向量
void m3dCrossProduct3(M3DVector3f result,const M3DVector3f u ,const
M3DVector3f v);

矩阵

在其他编程标准中,许多矩阵库定义⼀个矩阵时,使⽤⼆维数组
OpenGL的约定⾥,更多倾向使⽤⼀维数组;这样做的原因是: OpenGL 使⽤的是 Column-Major(以列为主)矩阵排序的约定。

矩阵 矩阵

⼀个4*4矩阵是如何在3D空间中表示⼀个位置和⽅向的
列向量进⾏了特别的标注:矩阵的最后⼀⾏都为0,只有最后⼀个元素为1

单元矩阵初始化⽅式

// 单元矩阵初始化⽅式1
GLFloat m[] = {
        1,0,0,0, //X Column
        0,1,0,0, //Y Column
        0,0,1,0, //Z Column
        0,0,0,1 // Translation
};
// 单元矩阵初始化⽅式2
M3DMatrix44f m = {
         1,0,0,0, //X Column
         0,1,0,0, //Y Column
         0,0,1,0, //Z Column
         0,0,0,1 // Translation
};
//单元矩阵初始化⽅式3
void m3dLoadIdentity44f(M3DMatrix44f m);

将⼀个向量 * 单元矩阵 ,就相当于⼀个向量 * 1
不会发⽣任何改变

矩阵运算

在线性代数数学的维度,为了便于书写.。所以坐标计算,都是从左往右顺序,进⾏计算。如下列公式:

变换后顶点向量 = V_local * M_model * M_view * M_pro
变换后顶点向量 = 顶点 * 模型矩阵 * 观察矩阵 * 投影矩阵

单元矩阵

在OpenGL 的维度。如下列公式:
变换顶点向量 = M_pro * M_view * M_model * V_local
变换顶点向量 = 投影矩阵 * 视图变换矩阵 * 模型矩阵 * 顶点

单元矩阵

变换

变换 解释
视图变换 指定观察者位置
模型变换 在场景中移动物体
模型视图 描述视图/模型变换的二元性(2种看到模型转换的方式)
投影 改变视景体大小和设置它的投影方式
视口 伪变化,对窗口上最终输出进行缩放

模型变换

  • 平移
平移
void m3dTranslationMatrix44(M3DMatrix44f m, float x, float y, float z);

m:平移后获得的新的矩阵(输出的结果)
x:在X轴的平移距离
y:在Y轴的平移距离
z:在Z轴的平移距离

  • 旋转
旋转
m3dRotationMatrix44(m3dDegToRad(45.0), float x, float y, float z);

m3dDegToRad(45.0) : 角度转弧度
x:围绕X轴旋转
y:围绕Y轴旋转
z:围绕Z轴旋转

  • 缩放
缩放
void m3dScaleMatrix44(M3DMatrix44f m, float xScale, float yScale, float zScale);

m:缩放后获得的新的矩阵(输出的结果)
xScale:在X轴的缩放比
yScale:在Y轴的缩放比
zScale:在Z轴的缩放比
当缩放比为成负数时,实际上是对图像的反转

  • 综合变换
void m3dMatrixMultiply44(M3DMatrix44f product, const M3DMatrix44f a, const M3DMatrix44f b);

product:变换后获得的新的矩阵(输出的结果)
a:一种变换
b:一种变换

变换的顺序会改变最终的结果

模型变换

可以看到上方和下方都执行了平移&旋转操作,但是最终结果并不相同,是因为这些变换都是基于模型本身坐标系执行的,结果也在本身的坐标系中体现。

相关文章

  • 3D数学基础 简要归纳

    3D数学基础 简要归纳 计算机图形学第一准则:看上去是对的就是对的,简单记为近似原则 OpenGL是基于3D的,屏...

  • 3D图形学基础

    向量 在 3D 笛卡尔坐标系,⼀个顶点就是XYZ坐标空间上的⼀个位置。⽽在空间中给定的⼀个位置,恰恰是由⼀个单独的...

  • 3D图形学基础部分

    推荐图书: 1.三维几何学基础: ①三维坐标系统: 模型坐标系:世界坐标系:摄像机坐标系:屏幕投影坐标系:(小孔成...

  • 入门AR,VR,OpenGL必备知识--3D图形学基础理论

    引言 请不要质疑你的眼睛,文章的题目就是“3D图形学基础理论”。可能有人要疑惑了,作为一个 iOS 开发者为什么要...

  • [Unity][基础篇]坐标系

    无论是2d还是3d游戏开发,图形学都是基础,解析几何的基本思想是将几何图形抽象成点的运动轨迹,从而点可以作为组成图...

  • 计算机图形学基础重点

    计算机图形学基础重点 计算机图形学的定义:  计算机图形学(CG)是研究怎样利用计算机来显示、生成和处理图形的原理...

  • OpenGL入门 环境搭建与名词解释

    图形学API介绍 OpenGL(Open Graphics Library):是用于渲染2D、3D矢量图形的跨语言...

  • 向量点积(Dot Product),向量叉积(Cross Pro

    向量点积(Dot Product),向量叉积(Cross Product) 参考的是《游戏和图形学的3D数学入门教...

  • Vulkan的相机矩阵与投影矩阵

    简介 3D世界中,点是三维的,但是我们的屏幕是二维的,如何将三维的点变换成二维的是图形学中最重要的一步,也是最基础...

  • 你对建模有几分的了解?你真正懂得什么是3D建模了吗

    3D建模是计算机图形学中用于产生任何对象或表面的3D数字表示的技术。 艺术家使用特殊的软件来操纵虚拟空间中的点(称...

网友评论

      本文标题:3D图形学基础

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