![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TV3
文章平均质量分 60
冷雨夜刀锋
这个作者很懒,什么都没留下…
展开
-
2D文字输入框
<br />西昌.何雨锋 2D文字输入框<br />'--------------------------------------------<br />' TrueVision3D Edit Box tutorial<br />'--------------------------------------------<br />' This samples uses the Key buffering feature of the Input engine<br />' that is useful f转载 2010-07-06 19:09:00 · 386 阅读 · 0 评论 -
云
<br />-------------西昌.何雨锋 云<br />云如果渲染不出来,那就很可能是因为陆地的渲染放到了天空盒的前面,<br />所以在渲染时,陆地一定要放在天空盒的后面才能保证陆地的雨啊、云啊能正确渲染出来。<br />云是陆地的附属物,只要读出云的文件就可以直接在land中初始化云,之后云不需要任何渲染语句就可以自动出来了。<br />fac1->LoadTexture("..//..//..//img//Cloud1.dds","clouds",-1,-1,TV_COLORKEY_RED,原创 2010-07-07 14:06:00 · 400 阅读 · 0 评论 -
在屏幕上显示2D文字
<br />---------------------西昌.何雨锋 2D文字的两种写法<br />2D文字有两种写的方法<br />第一种是用scene场景直接就在屏幕上写了,可以支持中文,但是大小和字体是不能定的。<br />第二种是用TVScreen2DText类在屏幕上写,大小,字体可定,但是好象不支持中文.<br />第一种在渲染循环中加:<br />scene1->DrawText("文字",x,y,颜色);<br />第二种:<br />//定义<br />ITVScreen2DText txt原创 2010-07-07 14:07:00 · 851 阅读 · 0 评论 -
2D图像、图形的显示
<br /> <br />----------------------------西昌.何雨锋 2D图像、图形的显示<br />immediate 直接<br />effect 效果<br />怎样使用一个2D的目录GUI呢?<br />首先就没必要再定义什么场景了,直接一个Screen2DImmediate就可以搞定了<br />关于Screen2DImmediate:<br />************<br />ITVScreen2DImmediate imt1; //定义一个直接2D对象<b原创 2010-07-06 19:02:00 · 562 阅读 · 0 评论 -
矩阵
<br />------------------我<br />矩阵在三维运算中十分常用<br />with tv<br />MatrixDeterminant(&m) 判定<br />MatrixIdentity(&m) 一致,相同<br />MatrixInverse(&结果,&float,&m) 反转<br />MatrixMultiply(&结果,&m1,&m2) 乘积<br />Ma原创 2010-07-06 19:23:00 · 263 阅读 · 0 评论 -
陆地与线的碰撞
<br />--------西昌.何雨锋 陆地与线的碰撞<br />//第一人称射击,鼠标点中,成功<br />#include "stdafx.h"<br />#include "tv3dcpp.h"<br />#include <math.h><br />#include "flag2.h"<br />ITVEngine engine1; //引擎<br />ITVInputEngine input1; //输入引擎<br />ITVScene scene1;原创 2010-07-07 13:53:00 · 377 阅读 · 0 评论 -
枪光
<br />------------------西昌.何雨锋 枪光<br />枪的火光一般是直接用billboard形成的,先建立出一个mesh的billbord<br />***************<br />ITVMesh flash1; <br />flash1=scene1->CreateBillboard(fac1->GetItem("flash"),-1,-1,-1,-1,-1,"falshx",tvtrue,D3DBLEND_ONE,D3DBLEND_ONE,tvtrue);<br />原创 2010-07-07 13:56:00 · 606 阅读 · 0 评论 -
水
<br />---------西昌.何雨锋 水<br />给我水,于是就有了水哈 <br />//来点水,水是从陆地上衍生出来的 <br />land1->SetWaterTexture(global1->GetTex("water1")); <br />land1->SetWaterEffect(tvtrue,0.5,tvfalse,(enum TrueVision3D::CONST_D3DBLEND) D3DBLEND_SRCALPHA,(enum TrueVision3D::CONST_D3DBLEN原创 2010-07-07 13:58:00 · 391 阅读 · 0 评论 -
天空盒陆地行动
<br />------------西昌.何雨锋 天空盒陆地行动<br />#include "stdafx.h" <br />#include "../tv3dcpp.h" <br />#include <br />//Setup TrueVision3D <br />ITVEngine engine1; //引擎 <br />ITVInputEngine input1; //输入引擎 <br />ITVScene scene1; /原创 2010-07-07 14:00:00 · 1175 阅读 · 0 评论 -
纹理灯光材质关系
<br />-------------------------------西昌.何雨锋 纹理灯光材质关系<br />材质(Material)是物体表面的粗糙程度、反光度、透明度等因素组合。<br />纹理(Texture)是物体表面的花纹、纹路等<br />灯光纹理(LightMaterial)是物体表面是否接受周围的灯光照射。<br />在mesh中有一个函数:LoadXFile("xfilename",bool loadtexture,bool lightmaterial)就说明了这个问题。<br /原创 2010-07-07 14:01:00 · 783 阅读 · 0 评论 -
雨雪天气
<br />-----------西昌.何雨锋 雨雪天气<br />在大气中往往有天气,实际上atmosphere就可以完成了,<br />atmos1->Rain_Init(100,global1->GetTex("rain1"),-4,0,0,2,30,16,100,5,0.08); //速度很快的落雪<br />atmos1->Rain_Enable(tvtrue);<br />//rain_init(粒子数量,粒子图案,下落速度[必须为负才行],X轴的风向[-2~2],Y轴的风向[-2~2],原创 2010-07-07 14:06:00 · 494 阅读 · 1 评论 -
RenderSurface
<br />-------------------西昌.何雨锋 RenderSurface<br />RenderSurface是什么?<br />是一个专门用于渲染的面,这种面在加工好了以后可以被附到mesh、immedeate等等上面去。<br />如果赋到immedeate上,那么这个面就成了一个画中画的效果。<br />如果被赋到mesh上,这个面就成了一个监视器一类的东西。<br />一般的建立很简单<br />**************************<br />ITVRenderSu原创 2010-07-06 19:13:00 · 1273 阅读 · 0 评论 -
灯光
<br />------------------------西昌.何雨锋 灯光<br />灯光是一种常见的东西,但是不知道物体的纹理是否有灯光纹理这一说还是在纹理中就程序形成的。<br />最简单的灯光可以直接用灯光引擎建立出来。<br />****************<br />ITVLightEngine lighten1;<br />lighten1=CreateTVLightEngine();<br />lighten1->CreateQuickPointLight(三维点,色红,色黄,色蓝,灯原创 2010-07-06 19:15:00 · 307 阅读 · 0 评论 -
各种碰撞
<br />-----------------西昌.何雨锋 各种碰撞<br />假设只能用TV_COLLISIONRESULT结构来检测碰撞,那么可以检测到如下的一些碰撞:<br />Mesh:<br />bool mesh->Collision(线的起点,线的终点,TV_TESTTYPE_ACCURATETESTING,0)<br />返回的bool值表示mesh是否碰到了线,无法访问任何碰到的数据。最后一个参数可以写0,也可以写一个变量地址,如果是变量,则该变量<br />将返回起点与碰撞点间的距离。<原创 2010-07-06 19:20:00 · 325 阅读 · 0 评论 -
类的使用
1-mesh类,mesh是由scene建立出来的,所以要单独建立出一个类就要牵涉到scene,一般甚至都可以不用自己包括scene,要求是先声明scene的实例,然后在class mesh中直接建立出来就可以了。但是这种办法不利于.h类的建立,因为事先不知道该在哪个scene中建立,所以class boat{ ITVMesh boat_model; ITVScene scenex;public: void set_scene(ITVScene &sceney){scenex=scen原创 2010-07-07 13:46:00 · 228 阅读 · 0 评论 -
模型的读取
<br />西昌.何雨锋 模型的读取<br />读取模型文件:(彝族年学习心得) <br />ITVActor man1[3]; <br /> man1[0]=CreateTVActor(); <br /> man1[1]=CreateTVActor(); <br /> man1[2]=CreateTVActor(); <br />//读取点.x .3ds文件成为物体 <br /> xobject1[0]=scene1->CreateMeshBuilder("x1"); //原创 2010-07-07 13:55:00 · 450 阅读 · 0 评论 -
鼠标抓取
<br />--------------------西昌.何雨锋 鼠标抓取<br />让鼠标抓住东西也就是鼠标直接碰撞检测,那是肯定不行的,至少用对象<br />TVCollisionResult是决对行不通的,因为那会出现实时错误,那么怎么判断一个鼠标已经对准了一个东西的什么位置呢?<br />只有从global上想办法了,因为VB下有而C++中没有的什么数学函数啦,什么其他类型啦都在里面找得到。<br />global1->MovePoint(&结果点,&源点,x角度,y角度,距离)<br />这个函原创 2010-07-07 13:58:00 · 381 阅读 · 0 评论 -
起雾
<br />-------------------西昌.何雨锋 起雾<br />雾、云、雨、雪都是从atmosphere对象中来的.<br />ITVAtmosphere atmos1;<br />atmos1=CreateTVAtmosphere();<br />雾:<br />**********<br />atmos1->Fog_SetParameters(0,300,0.001); //参数为:起始位置、终止位置、浓度<br />atmos1->Fog_SetColor(0,0,0,1);原创 2010-07-07 14:02:00 · 414 阅读 · 0 评论 -
路径 VECTOR常量
<br />--------------------西昌.何雨锋 路径 VECTOR常量<br />在很多函数中,都要求参数是d3dvector,难道这时候都得用定义好的vector变量才行吗?<br />其实在C++中也可以用常量的,正确的表达式为global1->vector(10,100,589)就代表了一个三维点常量了。<br />--------------------我 路径<br />有了点常量的表达方式,就可以研究路径了。<br />路径的好处就在于只用定义数个点,然后就可以根据时间来生成原创 2010-07-07 13:54:00 · 582 阅读 · 0 评论 -
常数列表
<br />西昌.何雨锋 常数列表<br />1、CONST_D3DBLEND 颜色混合<br />{<br /> D3DBLEND_ONE<br /> D3DBLEND_SRCALPHA <br /> D3DBLEND_INVSRCALPHA <br /> D3DBLEND_ZERO<br />}<br />2、CONST_TV_COLORKEY 颜色<br />{<br /> TV_COLORKEY_NO = 0 <br /> TV_COLORKEY_WHITE = &HFFFFFFFF <原创 2010-07-06 19:14:00 · 419 阅读 · 0 评论 -
基本数学函数
<br />------------------我 数学函数<br />itoa() int变char*<br />atoi() char*变int<br />atof() char*变float<br />gcvt(float,number,char *) 将float按number四舍五入转变为char *<br />% 取整模<br />fmodf(1,2) 取float模<br />原创 2010-07-06 19:21:00 · 240 阅读 · 0 评论 -
将x文件绑在mdl手上
<br />---------------------------西昌.何雨锋 将x文件绑在mdl手上<br />有一个函数是attach,但是实际上不用这个来绑定,因为这是骨骼之间做绑定的。<br />这里用的是矩阵绑定法,被绑定的物体的位置、动作、大小决定了绑定的东西的这些。<br />所以连大小设定都没必要了。<br />***************<br />首先在h文件中找到d3dvector定义的位置(实际这个结构在DX中是有的,但是由于这些结构都<br />比较简单,完全没必要再去包括d8d原创 2010-07-06 19:23:00 · 483 阅读 · 0 评论 -
陆地及喷图再讨论
<br />---------------------西昌.何雨锋 陆地及喷图再讨论<br />陆地的有关贴图的函数有下面一些:<br />ITVLandscape land1;<br />land1=CreateTVLandscape();<br />//实例化<br />//下面是根据图象建立凹凸的陆地heightmap<br />******************<br />land1->GenerateHugeTerrain("..//..//..//..//Media//height1.jpg"原创 2010-07-07 13:52:00 · 424 阅读 · 0 评论 -
摄象机及工厂
<br />----------------------------西昌.何雨锋 摄象机及工厂<br />一个屏幕或者显示控件只能显示一个摄像机。<br />怎样在一个场景中建立出多个摄像机呢?<br />就必须使用摄像机工厂了,否则将不能正常显示。<br />一个摄像机工厂可以建立出多个摄像头,每个摄像头都单独存在,可以赋予给显示面(rendersurface)<br />或者显示控件(如windows或picture)来进行显示。<br />下面的例子展示了如何建立出多个摄像头并在其间进行切换.<br原创 2010-07-07 13:57:00 · 243 阅读 · 0 评论 -
特效
<br />----------------------------西昌.何雨锋 特效<br />GraphicEffect特效有谈入、淡出、闪光等等的。<br /> ITVGraphicEffect effect1;<br />//main()中<br /> effect1=CreateTVGraphicEffect();<br />//最好在键盘事件里写上<br /> effect1->FadeIn(1000);<br /> effect1->FadeOut(1000);<br />原创 2010-07-07 13:59:00 · 366 阅读 · 0 评论 -
写文字
<br />-------西昌.何雨锋 写文字<br />在3维场景中写文字: <br />1、只能写英文,但是可以指定英文大小、字体: <br />//定义: <br />ITVScreen2DText str2d1; <br />str2d1=CreateTVScreen2DText(); <br />str2d1->TextureFont_Create("font1","宋体",16,tvfalse,tvfalse,tvfalse,tvtrue); <br />//循环中: <br />str2d1原创 2010-07-07 14:03:00 · 286 阅读 · 0 评论 -
修改MDL模型
<br />---------------------------西昌.何雨锋 修改MDL模型<br />MDL模型倒是有了,而且还很多,但是总不好意思一点不变的放到游戏里吧?<br />所以就要改变一点它,首先说说如何把MDL解压成多个文件。<br />用milkshap3d 中的Tool/half-life下的Decoplime Normal 就可以把MDL文件打散啦。<br />同样另一个命令compile QC File 又可以根据QC文件把散的东西变回MDL.<br />可以看到散的东西里面有很原创 2010-07-07 14:04:00 · 2541 阅读 · 0 评论 -
Actor2使用技巧
<br />--------------------西昌.何雨锋 Actor2使用技巧<br />ACTOR2经常被用为数组,如何判断某个ACTOR2被点中了呢?<br />ACTOR2[col1.entityid] 就可以判断了,如果是另一组ACTOR2,那么还要用id数减去第一组的总数<br />col1.boneId 表示被点中的骨骼的ID<br />以下是ACTOR2的函数:<br />AdvancedCollision(起点,终点,TV_COLLISIONRESULT co原创 2010-07-06 19:10:00 · 483 阅读 · 0 评论 -
AI智能
<br />------------------------西昌.何雨锋 AI智能 <br />这里只是temp,不是标准<br />一个人工智能的步骤大概是:<br />1、在AI中增加很多个节点(即可能到达的点),可能在实际工作中,只用给每个人物增加几个路径节点就可以了。<br />2、设置找路径参数ai1->SetFindPathParameters(i,j)注意前一个参数不要小于两个节点之间的最长距离,而后一个参数也是这样。<br />3、建立AI图<br />3、设置一个起点一个终点一根路径<br原创 2010-07-06 19:11:00 · 451 阅读 · 0 评论 -
第一人称射击公式
--------------------西昌.何雨锋 第一人称射击在第一人称射击中最重要也是最基础的东西就是如何让枪的MDL模型围绕摄像机,随着摄像机的转动角度而转动,在VC移动范例中,由于使用了两个表示角度的量:xangle和yangle,这里只需要把这两个量正确的赋予给weapon1->setrotation()就行了,但是可能由于采用幅度角度的差别,就要先转化一下才行。ITVActor2 weapon1; weapon1=CreateTVActor2(); weapon1->Load("..//..原创 2010-07-06 19:16:00 · 513 阅读 · 0 评论 -
读取3DS文件
<br />------西昌.何雨锋 读取3DS文件<br />以下是多次实验结果:<br />1、用conv3ds不带参数将box05.3ds转变成box05.x,用mesh1->LoadXFile("box05.x",tvtrue,tvfalse);读出<br />显示成功,UVM贴图完全正确,但是亮度很强,与周围环境不协调,不知道box05是怎样产生的。<br />2、同时用1中的box05.3ds来进行,<br />用mesh1->Load3DSMesh("box05.3ds",tvtrue,tvf原创 2010-07-06 19:18:00 · 1072 阅读 · 0 评论 -
读取MDL文件与骨骼控制
---------------------我 读取MDL文件不知怎么的,我还以为actor直接读取MDL文件会没问题,结果发现读取那个例子中有的青蛙确实没问题,但是一读取那些半条命啊、反恐啊什么的MDL文件就纹理紊乱,搞了半天得不出好的结果,最后没想到把actor改成actor2,呵呵,全部都搞定了,纹理一点问题没有。ITVActor2 man2;man2=CreateTVActor2();man2->Load("..//..//..//Media//asianb02.mdl"原创 2010-07-06 19:19:00 · 893 阅读 · 0 评论 -
国外代码
<br /><br />-------------<br />I fixed it by replacing (for me, line 174) <br />TestLight->Direction = pGlobals->Vector(-1.0f,0.0f,0.0f); <br />with a strict copy of the data members: <br />TestLight->Direction.x = -1.0f; <br />TestLight->Direction.y = 0.0原创 2010-07-06 19:21:00 · 489 阅读 · 0 评论 -
63粒子系统
<br />西昌.何雨锋 粒子系统<br />ravity(重力) bounce反弹 generator(创始人) blend(混合)<br />[setSetEmittorMoveMode(常量); CONST_TV_EMITTORMOVEMODE 常量为: TV_EMITTOR_LERP = 0 TV_EMITTOR_NOLERP = 1 <br />设置辐射移动模式:有/无]<br />[SetNewParticleData(发散x,发散y,发散z,颜色R,颜色B,颜色C,生原创 2010-07-07 13:49:00 · 535 阅读 · 0 评论 -
两个时间间隔
<br />-------------------西昌.何雨锋 两个时间间隔<br />在engine中有两种时间,一种是engine1->TimeElapsed(),是逝去时间,用于计算每两桢之间的时间差,常用于input控制之中.<br />而tickcount是累计时间,如果用一个常量来记录下某个事件的时间,然后再与不断增长的tickcount相比较,就可以得到<br />现在与那个事件发生的时间差,每一秒等于100.<br />所以,我们可以用以下方法制作定时器:<br />//先定义一个是否在时间原创 2010-07-07 13:51:00 · 574 阅读 · 0 评论 -
用shader制造火焰与爆炸
<br />-------------------------西昌.何雨锋 用shader制造火焰与爆炸<br />shader文件可以用记事本打开,然后发现其内容大概是这样的:<br />Animations/Flames/flame1.jpg > Flame1<br />Animations/Flames/flame2.jpg > Flame2<br />Animations/Flames/flame3.jpg > Flame3<br />Animations/Flames/flame4.jpg > F原创 2010-07-07 14:05:00 · 2328 阅读 · 0 评论