分享到新浪微博 分享到QQ空间 打印

[原创改版教程] nds 3d游戏hack入门(0) 预告&简述(3月14日更新福利)

nds 3d游戏hack入门(0) 预告&简述(3月14日更新福利)

最近研究了一下DS的3D引擎,鉴于相关的中文资料很少,于是自不量力,想写一系列教程,此为预告
由于本人没有3D编程经验跟3D制图经验,对3D引擎的理解全部基于gbatek(no$gba作者写的文档)跟nitroSDK(任天堂官方的DS开发套件)以及desmume(开源的DS模拟器),有理解错误的地方,还请批评指正
教程主要总结显存控制、3D矩阵、3D纹理贴图、纹理坐标、多边形与顶点等方面的内容,不会涉及到3D特效这些方面,并将列出可用的API(商业游戏内部的API),方便进行各种hack
因为是游戏hack教程,并不面向DS游戏的开发者,所以不会介绍3D游戏开发的内容,有这方面需要的,可以研究一下devkitPro里有关nds 3D编程方面的内容
读者如果没有线性代数方面的知识,可能阅读起来会很吃力

nds 3D引擎简述
NDS的3D引擎有2个部分组成,一个是几何引擎(Geometry Engine)跟一个渲染引擎(Rendering Engine)组成
几何引擎负责计算坐标与分配多边形属性,渲染引擎负责将几何引擎的运算结果转换为实际图像并最终输出
几何引擎与渲染引擎各自拥有一个顶点缓存跟一个多边形缓存,总大小是248K
操作3D引擎的方式是通过往指定的I/O寄存器写入参数,达到对3D引擎发送命令的目的
其中swap_buffers命令可以将几何引擎的多边形缓存与顶点缓存与渲染引擎的多边形缓存与顶点缓存进行交换操作
因此,一般情况下,只需要在几何引擎上完成操作,然后swap_buffers一下,就可以通过渲染引擎完成最后的输出
no$gba debugger的3D查看器,包含了最后一次到上一次的swap_buffers命令之间,往几何引擎发送的所有命令
此外,还可以在菜单中的windows->debug messages中选中3D log,将显示所有的3D命令,当然,debugger可能会变得很卡

坐标系方面,NDS的3D引擎采用的是右手坐标系,主要有世界坐标系、模型坐标系,纹理坐标系,camera坐标系等,
这些坐标系都是相对而言的,不同的坐标系通过乘以相关的矩阵进行转换,具体的转换将在后面的文章中一一描述
配图,右手坐标系
虽然是右手坐标系,跟opengl一样,但矩阵的存储方式是行优先的方式,矩阵的乘法采用右乘,这点又跟D3D一样,很多opengl的矩阵求法,如果放在NDS上必须转置
最后是3D模型
nds的3D模型是由若干个多边形作为骨架,外面包裹上纹理贴图后形成,在no$gba debugger的3D查看器中,会把多边形列为主项,点开加号后,可以看到后面的命令

配图,no$gba debugger的3D查看器


福利1,3D相关的I/O寄存器符号表

用法如下,仅限于DS游戏,在DS游戏目录下创建一个文本,名字是“游戏名.txt”
把文本里的内容复制过去,保存为unicode格式(这步必须,不然ct2无法识别)
然后用ct2打开这款ds游戏,按"工具->NDS文件系统信息",然后再按"编辑->NEF符号表编辑器",点击"生成",ok,符号表生成了
最后用no$gba debugger打开就能看到了

nds 3d游戏hack入门(1) 显存控制
nds 3D游戏hack入门(2) 3D矩阵篇
nds 3D游戏hack入门(3) 多边形、顶点与光照
nds 3D游戏hack入门(4) 纹理篇

[ 本帖最后由 enler 于 2013-5-20 12:13 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

线性代数……是向量什么的么?
今之众人,其下圣人也远矣,而耻于师。
是故圣亦圣,愚亦愚。
圣人之所以为圣,愚人之所以为愚,
其皆出于此乎?

TOP

引用:
原帖由 阴魂君 于 2013-3-19 13:25 发表
线性代数……是向量什么的么?
矩阵 向量这些东西 具体见3D矩阵那章,正在编写的多边形 顶点 光照篇也有涉及到向量的内容,此外,因为是hack教程,编程知识要有

[ 本帖最后由 enler 于 2013-3-19 15:15 编辑 ]

TOP

蜀黍赞一个

TOP

更新的好像已经过半了的样子,三级精华送上,算是给这个系列教程应有的称谓。

enler最近搞3D研究也很辛苦的样子,加油嗯


想死你们了!

TOP

望而生畏。。。。。。加油

TOP