2D图像、图形的显示

来源:互联网 发布:位图变为矢量图软件 编辑:程序博客网 时间:2024/05/16 15:14

 

----------------------------西昌.何雨锋 2D图像、图形的显示
immediate 直接
effect    效果

怎样使用一个2D的目录GUI呢?
首先就没必要再定义什么场景了,直接一个Screen2DImmediate就可以搞定了

关于Screen2DImmediate:
************
ITVScreen2DImmediate imt1;  //定义一个直接2D对象
//main中
imt1=CreateTVScreen2DImmediate();  
//这里可以用SETTINGS_EnableAutoBackgroundRendering(是否)来设置是否可以让背景自动刷新
imt1->LOAD_Background("..//..//..//Media//mp1.bmp",tvfalse);   就可以读取一个文件作为背景了,后一个参数如果是tvtrue就意味着是否平铺这副画。
 
//循环渲染部分用:
imt1->ACTION_Begin2D(); 
imt1->DRAW_Background();
imt1->ACTION_End2D();
//就可以把这副画当背景了,当然也可以在不用背景时来个imt1->deletebackground删除背景。
*************
一、当然了imt1还可以用DRAW_Texture(fac1->GetItem("mp1"),位置x1,位置y1,位置x2,位置y2,-1,-2,-2,-2,0,0,1,1);来画一
个矩形,那几个RBGA的最后一个参数从0.1-0.9决定了四个角的透明程度,而那几个数字表明了矩形的位置,注意这里最后四个参数必须是0,0,1,1,否则可能会被拉长得看不见
1、要注意一点,就是如果你在long color那几个参数处填了-1等,那是不能决定透明度的,而你如果填为RGBA(1,1,1,0.5)那个0.5就可以决定了,这个RGBA只用一处,其余地方都保持负整数就可以了。
2、至于第一个参数,可以用fac纹理工厂,也可以直接用global->gettex(..).
二、imt1->DRAW_Circle(x,y,半径,边数,色彩),DRAW_BOX() 可以画出矩形与圆形,但要注意边数不要太少,至少要有10。
三、scene1场景还有一个函数setbackground(R,G,B)可以直接改变背景的颜色,但不能设置成图形。
四、imt1->DRAW_FilledBox(200,200,300,300,-1,-1,-2,-2)与
五、DRAW_TextureText是用来写彩色图形字的,未研究。
六、DRAW_ROLLOVER非常有用,是专门用来设置一个2D按钮的,用法为
    imt1->DRAW_RollOver(fac1->GetItem("b1"),fac1->GetItem("b2"),300,300,500,400);
    第一个图是鼠标临空时的,第二个图是鼠标不在上面时用的。
    注意在读这两个图时,必须是BMP文件,如果是jpg文件,则无法使用镂空效果。
*************
关于目录:
在TV3D中,目录不是用对象来表达的,而是自己得定义一个是否函数Onbutton(x,y,x1,y1)来确认鼠标的位置是否在这个区域内(并按下)。
bool onbutton(long mousex,long mousey,long x1,long y1,long x2,long y2)
{
  if(mousex>x1&&mousey>y1&&mousex<x2&&mousey<y2)
     return true;
  else
     return false;
}
这样当在input循环中鼠标按下时就很容易判断是否点中矩形区域了。

 

--------------------我 画3D线
无论画immediate中的什么,都一定要记得放在渲染循环而不是输入模块中,否则将渲染不出来。
imt1->DRAW_Line3D(0,100,0,2000,3000,2000,RGBA(0,1,0,1),RGBA(0,2,1,1));
可以在3D场景中画出线来。

--------------------我 如何计算3D中位置应该在2D屏幕上什么位置
imt1->MATH_3DPointTo2D(&vecnow,&cx,&cy,tvfalse);
第一个参数是vector,第2、3参数是2D位置的float.

原创粉丝点击