图形学
whoispo
这个作者很懒,什么都没留下…
展开
-
OpenGL导入的纹理图片错位
OpenGL的纹理图片宽度不是4的整倍数时,纹理图片显示时会发生错位,这是因为OpenGL默认的对齐字节数是4,只要改为1就行。原创 2024-05-11 14:56:10 · 255 阅读 · 0 评论 -
3维旋转的3种表示方法之间的关系
点击图片,可以放大观看。、原创 2021-07-09 18:38:48 · 198 阅读 · 0 评论 -
Introduction to 3D Game Programming with DirectX 12一书学习记录(第一个例子编译错误)
准备开始学一学d3d,听说《Introduction to 3D Game Programming with DirectX 12》这本书不错,于是就拿来学一学。不料第一个例子,按照书中的指示,就总是编译错误,错误的提示是“C2102 &要求左值”。仔细去看错误所在的代码,发现代码中用&给一个临时变量取地址,看起确实不太合理,是不是错误呢? 我新建了一个工程,写了一个简单的例子:#include <iostream>using namespace std;struct原创 2021-01-15 23:44:28 · 2741 阅读 · 7 评论 -
OpenGL坐标系转化之投影坐标系
坐标系转换OpenGL中物体建立在各自的局部坐标系【模型坐标系】中,然后经过平移旋转变换到【世界坐标系】中,然后根据视角的位置和方向转换到【视角坐标系】中,然后根据投影关系,是正交投影还是透视投影,转换到【投影坐标系】中,再然后转换到NDC(Normalized Device Coordinate)【标准设备坐标系】中,再然后转换到【窗口坐标系】中。每一次坐标转换其实就是一个矩阵乘法。之所以弄这么多中间坐标系,而不是一次将坐标系转换到窗口坐标系中,也是为了方便用户交互操作,将坐标转换参数解耦。在之前原创 2020-10-09 21:29:39 · 486 阅读 · 0 评论 -
推导LookAt函数定义的视图矩阵
在OpenGL中需要定义一个视图(view)矩阵,很多库都提供一个叫LookAt的函数,可以定义该视图矩阵。该函数的原型是Mat4x4 LookAt(pos: vector3D, target: vector3D, up:vector3D)直观的理解,就是pos为观察者当前的坐标,target朝向的点坐标,up为观察者上方方向。返回的就是一个视图矩阵。其实所谓的视图矩阵,就是一个坐标系与坐标系之间的转换矩阵。视图矩阵将世界坐标系下的坐标转换到了视图坐标系下。我们来推导一下三维坐标系转换的关系原创 2020-09-10 10:55:36 · 3496 阅读 · 0 评论 -
万向锁的简单数学解释
我们知道用欧拉角表示空间的旋转,容易产生万向锁(Gimbal Lock)问题,这常常不太容易理解。下面给出一个直观的数学解释。欧拉角表示的空间旋转,可以用绕三个坐标轴的旋转矩阵的乘积表示万向锁问题就是出现在这种表示方法中。 假如我们令β=90°\beta=90°β=90°,上面的RRR就等于:我们对这个RRR进行一下化简,并且利用三角函数公式,可以得到也即当β=90°\beta=90°β=90°时,另外两个自由度α,γ\alpha,\gammaα,γ,变成了一个自由度α+γ\alpha+\ga原创 2020-08-30 10:07:48 · 935 阅读 · 0 评论 -
Hermite曲线与Bezier曲线的关系
结论最近在研究3次样条曲线。曲线由四个控制点控制,依次记为P0,P1,P2,P3。在绘制Hermite曲线的时候,发现如果令P0处的导数为3倍P1-P0,P3处的导数为3倍P3-P2,则P0,P1,P2,P3构成的Hermite曲线与P0,P1,P2,P3构成的Bezier曲线完全相同。下面详细分析说明这一点分析通用的三次Hermite曲线的参数表达式为P(u)=P0(2u3−3u2+1)+P3(−2u3+3u2)+P0′(u3−2u2+u)+P3′(u3−u2) P(u)=P_0(2u^3-3u原创 2020-07-04 10:11:23 · 2517 阅读 · 2 评论