
1. 3d数学 学习笔记
梦幻DUO
游戏开发爱好者
展开
-
3D数学 坐标系
坐标系什么是多坐标系?用处是什么? 顾名思义,多坐标系指在同一空间的不同坐标系。如下图为了绘制不同的几何体,有时需要更换一个相对容易绘制的坐标系,这就形成了多坐标系。 该如何表示各种坐标系关系? 在游戏模型中,为了表达一个模型各个部位,需要建立多坐标系。而这些不同的坐标系又有嵌套关系(如耳朵坐标系嵌套在头部坐标系中,头部坐标系又嵌套在上体坐标系,上体坐标系又嵌套在整个身体坐标系中原创 2015-07-13 11:35:08 · 1355 阅读 · 0 评论 -
3D数学 自定义三维向量类进行运算
3D数学 自定义向量类进行运算设计一个3维向量类,可以实现如下运算:零向量负向量向量大小、长度、模标量与向量的乘除法单位向量向量的加法和减法距离公式向量点乘向量叉乘由于原理很简单,所以不解释,下面给出全部源代码://Vector3.h#pragma onceclass Vector3{public: Vector3(); Vector3(double X,do原创 2015-07-15 19:33:31 · 3679 阅读 · 0 评论 -
3D数学 4x3矩阵类源代码(附中文注释)
4x3矩阵类///////////////////////////////////////////////////////////////////////////////// 3D数学基础:游戏与图形开发// 3D Math Primer for Games and Graphics Development//// Matrix4x3.h - Matrix4x3类声明// Matrix4原创 2015-10-31 21:35:08 · 2841 阅读 · 0 评论 -
3D数学 方向、方位和角位移
方位、方向和角位移1. 方向与方位的区别 一个向量可以指定方向,但是不可以扭转: 扭转一个对象可以改变它的方位: 因此: 指定方向仅仅需要2个数字(例如极坐标系)。 指定方位至少需要3个数字。2. 什么是角位移 角位移不可以用绝对值(absolute terms)来表示。 就像平移一个点,需要一个已知的点(原点)。旋转一个角度,也需要一原创 2015-09-22 16:28:47 · 2118 阅读 · 0 评论 -
3D数学 欧拉角编程
欧拉角编程1. 欧拉角转换到矩阵 欧拉角描述了一个旋转序列。分别计算出每个旋转的矩阵再将它们连成一个矩阵,这个矩阵就代表了整个角位移。注意,要区分物体-惯性矩阵还是惯性-物体矩阵,它们互逆(也互为转置矩阵)。void RotationMatrix::setup(const EulerAngles& orientation){ //计算角度的sin和cos值 float sh,原创 2015-09-22 21:22:36 · 1619 阅读 · 0 评论 -
3D数学 RotationMatrix
1. 如何使用矩阵表示方位 通过列出从一个坐标系到另一个坐标系的转变矩阵来表示两个坐标系之间的关系。 例如:从物体坐标系到惯性坐标系的转变矩阵,也可以通过逆矩阵从惯性坐标系转换回物体坐标系。 示例: 我们会看一下如何用一个矩阵将一个点从一个坐标系转变到另一个坐标系。 下图使用一个矩阵将飞机从物体坐标系转换到惯性坐标系。 我们用粗黑箭头指示矩阵的每一行和物体坐标轴原创 2015-09-22 19:28:28 · 1559 阅读 · 0 评论 -
3D数学 AABB(轴对齐矩形边界框)
3D数学 AABB轴对齐矩形边界框1. 几何图元 直线:由两个向量定义直线的方向 射线:由两个向量定义直线的方向,其中一个向量定义射线的起点 球和圆 矩形边界框(AABB) 2. AABB(轴对齐矩形边界框)C++实现///////////////////////////////////////////////////////原创 2015-09-22 22:05:56 · 4223 阅读 · 0 评论 -
3D数学 数学通用函数库源代码(附中文注释)
/////////////////////////////////////////////////////////////////////////////// // 3D数学基础:游戏与图形开发// 3D Math Primer for Games and Graphics Development//// MathUtil.h - 各种数学通用程序声明// MathUtil.h - De原创 2015-11-09 10:40:31 · 1417 阅读 · 0 评论 -
3D数学 矩阵和线性变换之正交投影
矩阵和线性变换之正交投影1. 具有正交投影效果的矩阵是怎样的? 这里给出一个正交投影在法向量(而且同时又是单位向量)为(x,y,z)平面上的投影矩阵,数学证明暂时不说,详见《3d数学基础 图形与游戏开发》。 2. 投影矩阵编程示例void Matrix3X3::setOrthProject(Vector3 &vec){ assert(fabs(vec*vec) - 1 < 0.原创 2015-07-20 20:31:07 · 1535 阅读 · 0 评论 -
3D数学 矩阵和线性变换之镜像
矩阵和线性变换之镜像1. 什么是镜像变换? 在2D中镜像变换就如下图所示,沿着某条轴发生对称现象就叫镜像变换。在3D中同理可以得到沿着某个平面发生对称的现象。 2. 镜像变换的矩阵是怎样的? 我们想来看简单的,沿着x轴、y轴或z轴发生镜像变换(注意是“沿着”轴的镜像,而不是“关于”轴对称),原理很简单,只需要让x、y或z变为相反数即可。所以我们分别只需令单位矩阵上第一列、第二列或第三原创 2015-07-20 21:29:36 · 5618 阅读 · 1 评论 -
3D数学 矩阵和线性变换之缩放
矩阵和线性变换之缩放1. 具有缩放效果的矩阵是怎样的? 我们这里只做沿着x、y、z轴方向的缩放,至于沿着任意方向的缩放比较复杂而且也很少用,所以暂时不介绍。如下图所示,原理非常简单,x、y、z乘上对应的缩放系数kx,ky,kz就得到了缩放后的结果。 2. 缩放矩阵编程示例void Matrix3X3::setScale(Vector3& vec){ m11 = vec.x;原创 2015-07-20 20:00:51 · 1244 阅读 · 0 评论 -
3D数学 矩阵和线性变换之切变
矩阵和线性变换之切变1. 什么是切变? 我们来看一幅图片。下面的图片,随着y增大,x的偏移会越来越大。这种类型的变换就叫切换。我们可以得到下图的公式x’ = x + sy。该公式转换成矩阵就得到了切变矩阵。 2. 切变效果的矩阵是怎样的? 在3D中,同样的道理,有如下右边三个矩阵,分别是随着z增大,x和y发生切变。随着y增大,x和z发生切变。随着z增大,x和y发生切变。 3.原创 2015-07-20 22:34:05 · 3390 阅读 · 0 评论 -
3D数学 矩阵和线性变换之旋转
矩阵和线性变换之旋转1. 如何在3D世界中对坐标进行变换? 我们可以通过产生一个具有某种变换效果的矩形,用坐标上的某个点乘上这个矩阵,就会得到变换后的点。这是线性代数中线性变换的内容。2. 具有旋转效果的矩阵如何生成? 首先说明下,这本书里用的都是左手坐标系。我们规定左手坐标系,拇指朝向旋转轴,其他手指的方向就是旋转的正方向。 通过线性变换的数学推理,可以得到, 绕X轴原创 2015-07-19 18:52:42 · 3769 阅读 · 2 评论 -
3D数学 矩阵乘法编程
矩阵乘法编程设计一个3x3矩阵类,实现如下功能:3x3矩阵矩阵与矩阵的乘法向量与矩阵的乘法具体的数学知识就不详述了,直接贴代码。这里利用到上一篇3D数学向量运算的代码。//Matrix3X3.h#pragma once#include "Vector3.h"class Matrix3X3{public: //矩阵相乘 Matrix3X3 operator*(Matrix原创 2015-07-16 22:44:48 · 1296 阅读 · 0 评论 -
3D数学 欧拉角类源代码(附中文注释)
欧拉角类源代码(附中文注释)///////////////////////////////////////////////////////////////////////////////// 3D数学基础:游戏与图形开发// 3D Math Primer for Games and Graphics Development//// EulerAngles.h - 欧拉角类声明// Eul原创 2015-10-31 22:38:46 · 1716 阅读 · 1 评论