展鸿丶 展鸿丶
沙雕程序员。
关注数: 8 粉丝数: 1,091 发帖数: 6,291 关注贴吧数: 12
【进阶向】矩阵讲解 What is Matrix ? 【什么是矩阵?】 矩阵从书面上看是一组4x4或者4x3的数字,就像下图这样:矩阵是一个几乎万能的向量,它可以同时描述平移、缩放和旋转。 矩阵可以把空间中的一个点变换到空间中任意位置。 矩阵就是这麽吊。 下面引用网络上的文章一段话: 顶点进行几何变换的过程,从数学层面讲,就是顶点和矩阵相乘产生新顶点的过程。 你们熟悉的向量是这样的: 点1 + 向量 = 点2 然而矩阵的应用也差不多: 矩阵 × 点1 = 点2 我就不扯数学计算了,因为我也不懂。 矩阵有诸多奇妙的特性,我只说最重要的一个。 矩阵相乘,又叫做连接矩阵。 如果有矩阵1让点旋转20度,又有矩阵2让点平移(1, 1),那么可以把这两个矩阵连接起来,成为一个新的矩阵3,这个矩阵可以直接把点旋转20度然后又平移。结果就是两个矩阵组合在一起了。 矩阵2 × 矩阵1 = 矩阵3 这里需要注意,矩阵相乘是不满足乘法交换律的,也就是说 矩阵2 × 矩阵1 和 矩阵1 × 矩阵2 得到的结果是完全不同的。 先旋转再平移 和 先平移再旋转 得到的结果显然不同,下面用图片解释: 方式1:方式2:你可以看到两种顺序得到的结果是完全不同的。 好了,最重要的理论说完了,接下来要告诉你们怎麽实际去用。 你可能想问: 1、怎麽得到一个可以把物体旋转20度的矩阵? 2、怎麽得到一个可以把物体平移的矩阵? 3、怎麽用矩阵把顶点变换到新的位置? 4、怎麽连接矩阵? 就像你所理解的一样,矩阵是一堆数字,顶点也是一堆数字,怎麽用它们进行计算? 代码我就懒得搬了 直接去看 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fcrsky%2Fp%2F5485577.html&urlrefer=5f149069984df92fdef38779f635b498 你可以把代码抄到AMXX里。 那么这里就稍微举个栗子: 平移变换 ---------------------------------------------------------- float m1[4][4]; // 矩阵1 float trans[3] = { 2, 0, 0 }; // 平移变换量 (就是你们常见的向量) float p1[3]; // 变换前的顶点 float p2[3]; // 变换后的顶点 MatrixIdentity( m1 ); // 初始化矩阵( 必须要 ) MatrixTranslation( m1, trans ); // 设置平移矩阵 VectorTransform( p1, m1, p2 ); // 把顶点和矩阵相乘,得到新的顶点 旋转变换 ---------------------------------------------------------- float m1[4][4]; // 矩阵1 float angle = 90 × (PI ÷ 180); // 角度转换为弧度 float p1[3]; // 变换前的顶点 float p2[3]; // 变换后的顶点 MatrixIdentity( m1 ); // 初始化矩阵( 必须要 ) MatrixRotation( m1, angle, 1, 0, 0 ); // 设置旋转矩阵,绕X轴旋转90度 VectorTransform( p1, m1, p2 ); // 把顶点和矩阵相乘,得到新的顶点 连接矩阵 ---------------------------------------------------------- float m1[4][4]; // 假设这是一个平移矩阵 float m2[4][4]; // 假设这是一个旋转矩阵 float m3[4][4]; // 新的矩阵 float p1[3]; // 原始顶点 float p2[3]; // 变换后的顶点 MatrixConcat( m1, m2, m3 ); 连接矩阵 (先旋转后平移) VectorTransform( p1, m3, p2 ); // 那么现在可以得到旋转并平移后的新顶点
[+1s]HL目录结构说明 Half-Life\ gldrv\3dfxgl.dll// 3DFX显卡驱动 gldrv\drvmap.txt// platform\// Steam平台组件 valve\// HL主目录 valve\cl_dlls\// 客户端模块目录 valve\cl_dlls\client.dll// 客户端主模块,客户端游戏逻辑以及操作输入等等 valve\cl_dlls\GameUI.dll// 客户端操作界面模块,就是游戏里的主菜单和对话框那些 valve\cl_dlls\particleman.dll// 提供特效处理接口的模块 valve\dlls\// 服务端模块目录 valve\dlls\hl.dll// 服务端单人模式模块 valve\dlls\mp.dll// 服务端多人模式模块 valve\events\// 特效脚本目录,已废弃,里面的文件只用来占位 valve\gfx\// 缩写,包含地图某些纹理资源 valve\gfx\env\// 地图环境纹理(大多是天空纹理,但不限于) valve\gfx\shell\// 用于定义游戏按键绑定的命令,被GameUI.dll引用 valve\gfx\vgui\// VGUI系统使用的某些资源,对话框以及游戏内的面板所使用的图片等 valve\gfx\colormap.lmp// 调色板文件,格式是 RGB 三字节排列 valve\gfx\conback.lmp// 同上 valve\gfx\palette.lmp// 同上 valve\hw\// hardware的缩写,存放对应显卡类型的配置文件,例如N卡会加载geforce.cfg valve\logos\// 喷图原型图片,游戏内将会重新渲染颜色,并且生成一个临时文件 valve\maps\// 游戏地图,BSP为地图文件,TXT为地图描述文件 valve\models\// 游戏内使用的模型文件,扩展名为MDL,xxT.mdl为对应的纹理包,xx01.mdl为对应的动画数据包 valve\resource\// 存放大多数GameUI.dll使用的资源文件(游戏对话框布局、配色文件和翻译文件) valve\resource\background\// 游戏内的背景图(切片) valve\resource\UI\// 游戏内的布局文件,计分板和文字提示窗口等等(CS1.6将会有购买菜单等) valve\resource\BackgroundLayout.txt// 背景图配置文件 valve\resource\BackgroundLoadingLayout.txt// 同上,但这个是游戏初始化的时候 valve\resource\CDKeyEntryDialog.res// CDK对话框布局文件 valve\resource\ChangeGameDialog.res// 更改游戏对话框布局文件 valve\resource\ClientScheme.res// 游戏内配色文件以及边框布局文件 valve\resource\CreateMultiplayerGameGameplayPage.res// 创建多人游戏对话框布局文件(服务器名字什麽的那个列表) valve\resource\CreateMultiplayerGameServerPage.res// 选择地图的那个界面 valve\resource\DemoEditDialog.res// Demo播放器 valve\resource\DemoEventsDialog.res// 同上 valve\resource\DemoPlayerDialog.res// 同上 valve\resource\DemoPlayerFileDialog.res// 同上 ... valve\SAVE\// HL单人模式存档目录 valve\scripts\// 脚本目录 valve\sound\// 声音资源目录 valve\sound\materials.txt// 材质类型定义文件,对应WAD里的纹理名称(不懂为什麽要放Sound目录),将会影响脚步声和子弹威力! valve\sound\sentences.txt// HL声音脚本,用来播放一连串声音... ... valve\sprites\// 地图内使用的2D纹理(SPR文件),也包含HUD使用的纹理(数字、武器图标什麽的) valve\*_textscheme.txt// VGUI使用的配置文件,用于配置不同分辨率的字体大小... valve\cached.wad// valve\config.cfg// 游戏CVAR和按键绑定配置文件,引擎自动生成 valve\decals.wad// 地图里的贴图(爆炸痕迹、子弹痕迹、血液痕迹、...) valve\delta.lst// 网络数据包配置文件,引擎根据这个配置文件来处理数据包 valve\fonts.wad// 一些字形图 valve\gfx.wad// 地图纹理包 valve\halflife.wad// 默认纹理包 valve\liblist.gam// 游戏主配置文件,模块等等 valve\listenserver.cfg// 内建服务器使用的配置文件 valve\mapcycle.txt// 地图列表(用于自动更换地图) valve\server.cfg// HLDS使用的配置文件 valve\settings.scr// 建立服务器界面使用的文件,保存服务器名字、地图时间之类的数据 valve\skill.cfg// HL使用的用于配置难易度的文件 valve\spectatormenu.txt// 观察者菜单(文字菜单?)没见过 valve\spectcammenu.txt// 缩写,观察者摄像机配置(切换观察模式) valve\steam.inf// 控制台敲version显示的信息 valve\titles.txt// 文字菜单配置文件 valve\user.scr// 设置->高级设置 里保存的数据 valve\valve.rc// 核心配置文件,没有它将无法启动服务器 ... a3dapi.dll// A3D声卡驱动文件 Core.dll// Demo播放器使用的网络组件 dbg.dll// 调试用的组件(会生成一些错误日志文件) DemoPlayer.dll// Demo播放器组件 FileSystem_Stdio.dll// 文件系统组件 FileSystem_Steam.dll// 同上 hl.exe// 客户端启动程序 hlds.exe// HL服务器程序 hltv.exe// 转播服务器程序 hw.dll// 引擎模块(硬件加速)这个就是引擎! Mp3dec.asi// MP3解码组件 Mss32.dll// 同上 Mssv12.asi// 同上 Mssv29.asi// 同上 Steam.dll// Steam平台组件 steamclient.dll// Steam平台组件 sw.dll// 引擎模块(软件模拟) swds.dll// HLDS用的引擎模块(去除了渲染功能) tier0_s.dll// 工具库组件 vgui.dll// VGUI系统 vgui2.dll// 同上 voice_miles.dll// 网络语音模块 voice_speex.dll// 网络语音模块 vstdlib_s.dll// 工具库组件 欢迎纠错和补充
首页 1 2 3 4 下一页