游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7909|回复: 4

基于VC的Truevision3D教程

[复制链接]

11

主题

145

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2008-7-28 19:15:00 | 显示全部楼层 |阅读模式
最近在上自己的论坛,发现不注册居然无法看到帖子,而且修改权限后也无法更正,所以将其转到这里来,以使更多的爱好者了解一些常识。


何雨锋基于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入手教程。

0

主题

386

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
QQ
发表于 2008-7-28 20:33:00 | 显示全部楼层

Re:基于VC的Truevision3D教程

在你的论坛看过了,写地很好.

11

主题

145

帖子

176

积分

注册会员

Rank: 2

积分
176
 楼主| 发表于 2008-7-29 19:41:00 | 显示全部楼层

Re:基于VC的Truevision3D教程

呵呵,谢谢,以后我会适当公布一些技术资料的。

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-3-3 19:54:00 | 显示全部楼层

Re: 基于VC的Truevision3D教程

为什么我用TV3D65会出现错误呢??????????   
--------------------Configuration: Template - Win32 Debug--------------------
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Template.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Template.exe - 2 error(s), 0 warning(s)

11

主题

145

帖子

176

积分

注册会员

Rank: 2

积分
176
 楼主| 发表于 2012-11-15 12:36:00 | 显示全部楼层

Re:基于VC的Truevision3D教程

好象是没有在设置里面加入动态链接库语句吧,很久没摸这个了,TV65其实跟VS2008合作很愉快的,而且C#好象也很好用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-10 13:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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