QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2337|回复: 8

3D编程的一点心得

[复制链接]
发表于 2004-3-10 18:42:34 | 显示全部楼层 |阅读模式
最近用SDL,glut,g++做了一下Linux下的3D编程,有一点心得,想与大家分享一下。
  我没有自己从零开始,先D了quake2和quake3的一些代码,关于MD2,MD3和bsp的,然后用D的level编辑器先生成map文件,编译为bsp文件,然后D一些3d模型(md2,md3),再将他们显示出来,正在做一些小的3d游戏。
  其实做3D游戏,id的代码真的值的一看,极具参考性
  如果想要源码和继续讨论的话,可以在此板或与 [email protected]联系。
  3d 编程的一点经验-关于MD2、MD3和BSP
        (jupiter周伯河)
  声明:本文所有涉及的软件和文件格式的所有权归原作者所有,本文只是进行一些学术上的交流,如果有侵权,请与我联系。
1、 首先要保证你在Linux下有3D驱动,如果没有也没有关系,你可以下载SDL for Windows和libjpeg for windows和glut库,这可能是用得最多的三个库了。另外也要有一些文件格式的资料,如TGA,PCX,MD2,MD3,MDL,BSP,MAP等等。另外如果是在windows下编程,请用标准的C或C++语言,不要用VC生成代码。在windows下用标准的C或C++库,这将保证你的代码可以完全在windows和linux下相互移植。
2、 快速进入3D世界
在网上下载MD2,MD3,BSP的源代码,下载一个quake的关卡编辑器,我知道的有Radiant和QuArk是免费软件,一个PAK包浏览软件pakexplr,用它你可以查看quake的资源包.pak文件,另外你还需要quake2和quake3游戏,用以地图编辑,编译和提取纹理等。
3、首先,你先编译通过下载的源代码,运行一下有一个感受,我看过不少代码,都很简单,还有用类封装的。用起来也很方便。
4、用Radiant软件编辑一张简单的房间出来,要注意的是,你的.map文件要放在游戏的data目录下,就是有pak包的目录,因为最后将.map文件编译为bsp文件 的qbsp软件要目录中含有quake2或quake3的目录。Radiant是一个关卡编辑器,它是可见即可得的3d软件,慢慢使用一下,不难的。需要说明的是,.map文件其实是一个文本文件,你可以用文本编辑器打开看一下,会有很多收获的,它对了解文本方式的3d数据存储也有帮助。
5、将编辑好的.bsp文件和纹理文件一起放到你的bsp装载程序下,要特别注意的是目录结构和文件名的大小写,在linux下是区分大小写的,纹理文件可以用自己的替换,格式转换一下,大小要是2^n,用256x256,或128x128的就行,纹理的目录和文件名要与bsp文件中的一致,用khexedit看一下.bsp文件也行。
6、现在你就可以将一个怪物调入你编辑的地图里了
,控制怪物的起始帧和结束帧就可以实现怪物的跑和跳等动作,加入视角控制和简单的碰撞检测,一个游戏就出来。
7、要多看源代码,文件格式,和二进制文件格式,会发现很多思想的闪光点,其实做这些工作自己还没有写几行代码呢,但主要是学习一些有用东西。

  这只是一个简单的流程,大家在实践的过程中有什么问题和不清楚,可以与我讨论,我的
E-mail: [email protected]
QQ : 122068772
只想本文对想进入3D世界的新手有一些启发。

  还忘说了,在Linux中编写OPENGL+GLUT程序,RedHat9.0下还要下载GLUT库的开发包glut*deve*rpm,编译时用如下指令:
g++ -g -o foo foo.cc -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -L/usr/X11R6/lib
    最好是写一个Makefile文件,make文件中包含一个clean目标
clean:
rm *.o
在无法更新可执行文件时,先make clean,再make
这样省时省力。另外多开一terminal终端,随时用man glEnable等查函数指南

因为只是有时的感想,随便加的,纯属个人的观点

关于Linux下编程用的编辑工具的选择
推荐用Emacs,因为它支持多buffer,多窗口,各种编程模式,集成的编译命令......;并且在远端登录的情况,它是最好的选择,虽然它学习起来比较困难,但不要畏惧它,征服它!

关于游戏的程序结构
游戏的程序结构有三种:
C函数结构,所有的代码都以函数形式组织
class类结构,以类对游戏的各模块进行封装
plug插件式结构,游戏的各模块以插件的形式组织
后两种结构有许多优点,仅在性能上有所损失,不过可用专门的编译器和优化手段进行弥补

几种有用的资源
quake,quakeII,quakeIII源代码
HL2源代码
Cube源代码
Gamelib源代码 函数式的组织结构
Clanlib引擎,class结构
Crystal Space引擎,插件式结构
Lua嵌入式的脚本语言
Cint嵌入式的脚本语言
Sword2 消息结构的脚本引擎

在google上搜索这些资源吧
发表于 2004-3-10 18:47:14 | 显示全部楼层
en
满强的   建议写一篇介绍出来  把程序也贴出来
我用sdl写2d游戏  3d的东西没考虑过   
交流一下!
回复

使用道具 举报

 楼主| 发表于 2004-3-10 19:48:44 | 显示全部楼层

移入一楼了

移入一楼了
回复

使用道具 举报

发表于 2004-3-10 20:18:16 | 显示全部楼层
我已经把你加为好友了  你没反映
关于碰撞检测 你有经验吗?
回复

使用道具 举报

 楼主| 发表于 2004-3-10 20:33:02 | 显示全部楼层
对于简单的地图可以使用一张地图的mask表,这要求对地图设计合理,还有BSP,Box,区域检测等老牌得法,我想我会用mask表,因为小程序中适用一些。
回复

使用道具 举报

发表于 2004-3-10 20:37:08 | 显示全部楼层
:neutral:   继续学习去
回复

使用道具 举报

 楼主| 发表于 2004-3-10 20:37:35 | 显示全部楼层

移入一楼了

移入一楼了
回复

使用道具 举报

发表于 2004-3-10 22:27:23 | 显示全部楼层
[quote:0e3b1c9880="ferlyworld"]还忘说了,在Linux中编程OPENGL+GLUT库的编译用,GLUT库要D下glut*deve*rpm:
  g++ -g -o foo foo.cc -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -L/usr/X11R6/lib[/quote]
这个是很重要啊!
希望编入精华!!!
回复

使用道具 举报

发表于 2004-3-12 12:53:05 | 显示全部楼层
好贴子
有指路得作用
比n个代表强多了
呵呵
顶一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 19:58 , Processed in 0.039347 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表