|
最近在上自己的论坛,发现不注册居然无法看到帖子,而且修改权限后也无法更正,所以将其转到这里来,以使更多的爱好者了解一些常识。
何雨锋基于VC的Truevision3D教程
作者:何雨锋
本人的TV编程能力并不很强,也属于学习者一类的,本不准备发表什么教程之类的东西,但是某些实验性作品发布以后,一些人指责我只发布游戏,不发布源码,在技术上搞保守。思量许久之后,觉得还是该写一点东西,让那些希望用VC来开发TV3D的朋友能快速上手和入门,为繁荣中国的游戏事业贡献自己一点点力量。
1、为什么选择VC6作为开发平台?
实际上TV3D是个很容易上手的引擎,可以支持Visual Basic 6.0 \Visual Studio .NET(C#、Visual Basic .NET)\Visual C++ 6.0 \Delphi
等多种语言进行开发,使用各种语言开发利弊如下:
上手速度 开发难度和效率 程序运行库 调试 外设响应速度
VC6 慢 难 无须安装任何运行库 难 高
VB6 快 低 安装几M的VB运行库 容易 慢
VB、VC#.net 快 中等 必须安装FrameWork(70M以上) 容易 高
Dephi 慢 难 无需安装运行库 难 不明
在这多种语言中,所有语言的渲染速度几乎都是相同的,但对外设的响应速度上,VB明显偏慢,对于一些对外设响应较高的游戏不建议用VB制作;
而.net平台虽然对外设速度较快,但必须安装Framework.net才能运行,上百兆的FrameWork.net毕竟相当多的电脑并未安装,Dephi没用过,所以不知道性能如何。
2、哪些类是VC6所不支持的?
有一些TV3D中的类是VC6所不支持的,所以为先做好心理准备,大家应该知道,在TV3D6.2中,有部分类是VC6所不支持的,而在TV3D6.5中,几乎所有其他语言支持的类,VC6都能支持了,除了TVmedia(声音效果)以外。所以决定使用VC进行开发的朋友,一定要做好学习其他声音引擎的心理准备,比如FMOD。除了media,TV3D6.2中VC不支持的库还有:
Math数学运算库-----这个库中有很多运算公式,最有用的是Matrix矩阵变换公式。
CollisionResult对象--即碰撞对象,对于一个3D游戏来说,还有什么比碰撞检测更有用的东西吗?
如果你要执意学习TV3D6.2而不是6.5,这两个类恐怕对你来说就很难了,当然也有解决方法,对于math库,没办法,你就只有自求数学能力超强。
而对于CollisionResult,6.2虽然没有提供这个对象,但是提供了一个简单的线与其他物体是否碰撞的简易函数,我们可以做出伪碰撞的结果。
而TV3D6.5则好得多,几乎支持所有的类,而且功能上要提高很多。
3、学习本教程所需要的知识?
学习此教程需要如下一些知识:C语言能力,对类、对象、成员变量与函数的一些基本了解,还有就是3维的想象力。当然,你必须使用过VC6,知道SDK和MFC的区别,最好再懂一点3DMAX或Maya之类的绘图软件,因为里面一些基本概念跟TV是相通的。
为了使学习者看懂我的代码,我写几个东西,如果连这都看不懂,那么请不用再学习此教程,先补习以下C++知识再说:
int *c &uu return vv; yy.c yy->c yy->c() (int) cc
4、使用TV3D进行开发,开发与运行的软件环境是什么?
方案一,使用TV3D6.2:a、至少安装Directx SDK 7.0 (100兆左右) b、安装TV3D6.2 SDK (65M) 运行环境:Directx8以上 (XP以上的操作系统均自带)
方案二:使用TV3D6.5: a、至少安装Directx SDK 2007-8 (800兆左右) b、安装TV3D6.5 SDK (70M) 运行环境:Directx9.0C以上( D3D9_36 ,36以前的9.0无法使用)
5、本教程以TV6.2为主进行讲解,如何运行第一个TV3D6.2的VC范例?
如果你安装了TV6.2SDK,并且能成功运行其中的自带工具等,那么恭喜你,你的机器上已经可以使用TV6.2了,但如果你一来就可以运行VC6的范例,那么才叫怪事。
用VC6打开你的TV范例,只有一个dsw项目管理文件,里面有10个范例。
仔细看里面的文件:
a、 tv3dcpp.h 这个文件很重要,里面不但包括有D3DVECTOR三维点的定义(TV65的定义为cTV_3DVECTOR),而且包括了所有TV对象库的定义,
所以在所有的范例中都有这么一行:#include "..\tv3dcpp.h" ,如果路径不对,那么请修改。
b、 tv3dcpp.lib 这个文件如果没有在VC目录中,那么在其他目录中也应该能找得到。选择VC6的菜单中的[Project]中的[Seting],里面可以看到有很多个范例,
其中选项卡中选[link] ,然后在common options中,你可以看到这里有很多lib文件,里面必须包含有含有正确的相对路径的tv3dcpp.lib文件(TV65是tv3d65.lib文件)
如果你实在嫌麻烦,就将其复制到TV3DSDK\VC6下,然后在link中所有lib文件的最后(不是整个文件列表的最后)
即/nologo之前加上一句..\tv3dcpp.lib就可以了。直到运行时不报错说什么什么.lib文件找不到为止。
c、 如果你发现编译时候说的找不到d3d8.h或d3d9.h这个包含文件,不要紧,是因为你的VC语言(不是TV3D的VC文件夹,是Virtual Studio的文件夹)的include文件夹中没有d3d8之类的包含头文件,
哪里去找这些头文件呢?你可以去搜一下你安装的directx sdk文件夹,那里会有的,但不一定是d3d8,也可能是d3d9或d3d7,你可以试着把所有d3d8开头的h头文件复制到你的VS的include目录中
,之后,你就可以tv3dcpp.h中用#include <d3d8.h>而不出错了。
好了,在这些事情都做完之后,你运行一下你的第一个范例,看能否正常运行,如果能够,那么恭喜你,你今后的所有范例都将在此基础上进行了。
但是需要说的是,你不一定把每个范例的link lib都做对了,你可能只是改了其中的一个,所以,你得把每一个的第二步都做一次,这样才能保证你的其他范例不会找不到lib文件。
当然你也许会发现,虽然程序可以执行,但是当你需要弹出成员函数时,却没有提示,你可以试着在你的head文件中添加tv3dapp.h文件。
6、引擎。(TVengine)
在讲这个之前,我们来看一下Tutorial 1.cpp的一些代码:
pEngine = CreateTVEngine();
pEngine->Init3DWindowedMode ((long)WindowHandle, true);
pEngine->put_DisplayFPS(tvtrue);
第一句是引擎被建立,在TV3D中所有的对象都必须被建立,所以专门有个函数CreateTVEngine(),其他所有物体都得这样建立
比如CreateTVMesh(),CreateTVScene(),CreateTVACtor() ........
凡是不建立对象就使用的,一律弹出。
第二句是把引擎初始化到窗体句柄WindowHandle中
第三句是允许显示fps. 那么这个tvtrue什么意思呢?在TV3D62中,所有bool都用tvtrue和tvfalse表示.
而不是true和false.
7、补一下其他方面,实际上,TV65的VC使用更为方便快捷。
以下为凭记忆写的:
只需要引用tv65.dll和tv3d.lib即可。#include <d3d8.h>这一包含文件已经根本不需要再使用。
对于点D3D_vector不需要再定义,因为在blobal.h中已经完全帮你定义好了。
好运。以后有时间在专门补65入手教程。 |
|