从0开发游戏引擎之游戏引擎底层数学库实现

简介: 矩阵相乘: 先说什么是行什么是列,横着的就是行,竖着的就是列。可以看一下图片1.1,别弄过了。不然一会计算一起全都弄饭了算起来就全错。 计算说的简单点就是每一行乘上每一列,然后把算出来的结果保存到一个新的矩阵对应的n行m列中。

这篇文章主要是讲了矩阵的相乘、旋转、平移、缩放、绕轴翻转、求逆、求转置等运算。


矩阵一共写了两套,一个是给2D元素使用的,一套是给3D对象使用的,这里为了减少篇幅,只写4*4的矩阵的运算,原理和3*3矩阵一直,相比之下比3*3矩阵困难,理解了4*4的运算自然也就理解3*3的运算了。


矩阵相乘:  先说什么是行什么是列,横着的就是行,竖着的就是列。可以看一下图片1.1,别弄过了。不然一会计算一起全都弄饭了算起来就全错。   计算说的简单点就是每一行乘上每一列,然后把算出来的结果保存到一个新的矩阵对应的n行m列中。其实这个可以从结果出发反着看比较容易能看懂,比如说我要计算mat[0][0]这个mat的第0行第0列怎么算? 就是让


a[0][0]*b[0][0]+


a[0][1]*b[1][0]+


a[0][2]*b[2][0]+


a[0][3]*b[3][0] 得到的结果就是mat[0][0]想要的结果


程序1.1


Matrix3D Matrix3D::operator*(Matrix3D &mat)
{
  Matrix3D temp;
  for (int i = 0; i < 4; i++)
  {
    for (int j = 0; j < 4; j++)
    {
      temp.m[i][j] =
        m[i][0] * mat.m[0][j] +
        m[i][1] * mat.m[1][j] +
        m[i][2] * mat.m[2][j] +
        m[i][3] * mat.m[3][j];
    }
  }
  return temp;
}



3db0244802a64d05a81aad1d5d844424.jpg


矩阵绕X轴旋转:直接套用图1.2 公式就可以:


ff6c9d607350467e99933d6b33f458df.jpg


但是大家一定会有疑问,公式里不是这样的呀?为什么行列正好反过来了,这是因为OpenGL虽然用的是行矩阵,但是是列主序。相当于存空间信息的时候要以列主序的方式去存。


下文有具体解释什么是行主序,什么是列主序列,这里就不展开讲这个了。


https://www.jianshu.com/p/bfc8327eaad3


程序1.2


void Matrix3D::XRotate(float angle)
{
  m[1][1] =cos(GL_PI/180*angle) ; m[1][2] =sin(GL_PI/180*angle) ;
  m[2][1] =-sin(GL_PI/180*angle); m[2][2] =cos(GL_PI/180*angle) ;
}


矩阵绕Y轴旋转:同上直接套图1.3公式,空间信息存成列主序列:


6e98e15d1a1a4e4490544ab22b80b8bd.jpg


程序1.3


void Matrix3D::YRotate(float angle)
{
  m[0][0] =cos(GL_PI/180*angle); m[0][2] =-sin(GL_PI/180*angle) ;
  m[2][0] = sin(GL_PI / 180 * angle); m[2][2] =cos(GL_PI/180*angle);
}


矩阵绕Z轴旋转:同上直接套图1.4公式,空间信息存成列主序列:


1237eb9a33064ece907383e017dfd1e3.jpg

相关文章
|
人工智能 安全 Unix
游戏编程之九 设计工具之游戏引擎
游戏编程之九 设计工具之游戏引擎
101 0
|
3月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
126 4
|
6月前
|
C# 开发者 前端开发
揭秘混合开发新趋势:Uno Platform携手Blazor,教你一步到位实现跨平台应用,代码复用不再是梦!
【8月更文挑战第31天】随着前端技术的发展,混合开发日益受到开发者青睐。本文详述了如何结合.NET生态下的两大框架——Uno Platform与Blazor,进行高效混合开发。Uno Platform基于WebAssembly和WebGL技术,支持跨平台应用构建;Blazor则让C#成为可能的前端开发语言,实现了客户端与服务器端逻辑共享。二者结合不仅提升了代码复用率与跨平台能力,还简化了项目维护并增强了Web应用性能。文中提供了从环境搭建到示例代码的具体步骤,并展示了如何创建一个简单的计数器应用,帮助读者快速上手混合开发。
159 0
|
9月前
|
数据可视化 vr&ar 开发工具
Unity游戏开发引擎是什么?有哪些优点
Unity引擎是一款由Unity Technologies开发的跨平台游戏开发引擎,广泛用于创建2D和3D游戏以及其他交互式内容,如虚拟现实(VR)和增强现实(AR)应用程序。
194 3
|
9月前
|
机器学习/深度学习 前端开发 JavaScript
WebAssembly 的魅力:高效、安全、跨平台(下)
WebAssembly 的魅力:高效、安全、跨平台(下)
WebAssembly 的魅力:高效、安全、跨平台(下)
|
9月前
|
JavaScript 前端开发 安全
WebAssembly 的魅力:高效、安全、跨平台(上)
WebAssembly 的魅力:高效、安全、跨平台(上)
WebAssembly 的魅力:高效、安全、跨平台(上)
BXA
|
程序员 C++ 开发者
使用C++特性构建游戏引擎
游戏引擎是用来设计、开发和构建计算机游戏的软件框架。它们由一些基本的工具和程序构成,可帮助游戏设计师和开发者轻松地创建、管理和优化游戏。基本上,游戏引擎是实现游戏的所有技术的一个集合
BXA
180 0
从0开发游戏引擎之游戏引擎底层数学库实现
从0开发游戏引擎之游戏引擎底层数学库实现
|
定位技术
从0开发游戏引擎之 序言(引擎内主要模块)
从0开发游戏引擎之 序言(引擎内主要模块)
|
图形学 UED
Unity2018新功能探索|图形渲染、下一代Runtime、众多美工工具!
关于Unity2018Unity2018增强了Unity的核心技术, 让创作者能够充分发挥自身才智,进行更有效协作。探索Unity广告如何获取新的用户利用Unity Ads全球广告网络推广游戏,坐拥广大新玩家访问高级游戏娱乐内容10亿以上的独立设备玩家触手可及在正确场合适时获取目标玩家,即玩家参与度最高时创作者的工作空间Unity Editor是艺术家、设计师、开发者和其他职业人员的创意中心,有2D 、3D场景设计工具, 故事和电影, 灯光, 音响系统,精灵管理工具,还有粒子特效和功能强大的dopesheet 动画系统。
1951 0