最近用SDL,glut,g++做了一下Linux下的3D编程,有一点心得,想与大家分享一下。

我没有自己从零开始,先D了quake2和quake3的一些代码,关于MD2,MD3和bsp的,然后用D的level编辑器先生成map文件,编译为bsp文件,然后D一些3d模型(md2,md3),再将他们显示出来,正在做一些小的3d游戏。

其实做3D游戏,id的代码真的值的一看,极具参考性

如果想要源码和继续讨论的话,可以在此板或与 ferlyworld@21cn.com联系。

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: ferlyworld@21cn.com

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上搜索这些资源吧

linux 3d开发工具,Linux 3D 编程介绍  (转)相关推荐

  1. 3D开发工具HOOPS最新解析合集,助力实现web端高性能模型渲染

    一.3D技术为创新提供强大助力 不管您想搭建桌面.WEB或者移动端APP应用,技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构,同时,一批可信任的工业领域3D技术专家也将 ...

  2. C++后端开发程序员应该彻底搞懂的【libevent网络库】,libevent组件构成以及编程要领丨Linux服务器开发丨服务端编程

    90分钟搞懂libevent网络库 1. 服务端事件组成 2. libevent组件构成以及编程概要 3. memcached是如何使用libevent 视频讲解如下,点击观看: C++后端开发程序员 ...

  3. 安装Ubuntu 14.04系统Linux微信开发工具的笔记

    安装Ubuntu 14.04系统&微信开发工具的笔记 Ubuntu 14.04系统所需硬件配置低,我所使用的1.9GRAM笔电上正是安装的此系统. 最近因为崩溃重装了一次,并接着安装了linu ...

  4. 红黑树在linux内核中的应用场景(红黑树,进程管理CFS,内存管理)丨epoll丨c/c++linux服务器开发丨linux后台开发

    红黑树在linux内核中的应用场景(红黑树,进程管理CFS,内存管理) 视频讲解如下: 红黑树在linux内核中的应用场景(红黑树,进程管理CFS,内存管理)丨epoll丨c/c++linux服务器开 ...

  5. 全面了解C++后端开发技能树,C++后端开发面试技术点丨C/C++linux服务器开发丨linux后台开发

    C++后端开发技能树,C++后端开发面试技术点 视频讲解如下: 全面了解C++后端开发技能树,C++后端开发面试技术点丨C/C++linux服务器开发丨linux后台开发丨网络编程丨面试经验 C/C+ ...

  6. Linux漏洞建议工具Linux Exploit Suggester

     Linux漏洞建议工具Linux Exploit Suggester 在Linux系统渗透测试中,通常使用Nessus.OpenVAS对目标主机进行扫描,获取目标主机可能存在的漏洞.如果无法进行漏洞 ...

  7. 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统

    剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...

  8. 详解5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶丨Linux服务器开发丨Linux后端开发

    5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶 1. 进程调度CFS的红黑树场景 2. 虚拟内存管理的红黑树场景 3. 共享内存slab的红黑树场景 视频讲解如下,点击观看: [干 ...

  9. M的编程备忘录之Linux——基础开发工具

    目录 1.Linux软件包管理器 yum 1.1.查看软件包 1.2.安装软件 1.3.卸载软件 2.Linux开发工具 vim 2.1.vim的基本概念 2.2.vim的基本操作 1.进入vim 2 ...

最新文章

  1. 华为于璠:新一代AI开源计算框架MindSpore的前世与今生 | AI ProCon 2019
  2. kubernetes相关概念
  3. jqGrid ColModel Options
  4. PostgreSQL数据库设置远程连接
  5. 11旋转编码器原理图_雷恩PRECILEC I9H系列增量式编码器
  6. Python是一门什么样的语言
  7. python unpack infinity_fit_转换出错:输入包含NaN、infinity或对dtype(“float64”)太大的值...
  8. oracle 动态游标行数,oracle动态游标的简单实现方法
  9. 私人博客定制---服务器接口封装
  10. dz论坛php.ini设置,Discuz!X1.5至3.2论坛Win主机与Linux主机伪静态设置方法
  11. python和java哪个好找工作-2019年Python、Java、C++学哪个更好?薪资更高?
  12. 1041: 谭浩强C语言(第三版)习题5.5
  13. 视频文件损坏怎么修复,赤兔视频修复软件助您
  14. 广域网宽带接入技术二PPPoE原理及配置
  15. android 卸载残留代码,完全卸载AndroidStudio(示例代码)
  16. 前端面试经典js题目Foo 与 getName
  17. 算法笔记习题 2-9小节
  18. ABeam Insight (德硕)| Smart Conference ——让你的生意跨越语言障碍
  19. 让我带你弄明白什么是RPC ,帮你整理一下你的小脑瓜!
  20. GD32F103基础教程—GPIO输出实验(五)

热门文章

  1. java动态方法_Java 动态方法调用
  2. Redis之下,大兵SDS的复仇之旅 !
  3. Python 之 沙盒环境--virtualenv
  4. unity手游使用terrian注意事项
  5. scrapy框架开发爬虫实战——css语法
  6. 用51单片机c语言实现电磁炉功能,基于单片机电磁炉控制系统设计..doc
  7. 介质天线的设计原理_天线原理与设计.pdf
  8. 近日总结3.20-3.22(内控流程图、VBA对象树、编程语言对比、BI的学习)
  9. 关于微信电子健康卡回调地址错误问题
  10. 【光学】基于matlab米氏散射和瑞利散射仿真【含Matlab源码 1948期】