作者NDark (溺於黑暗)
看板GameDesign
标题[心得] 沙漠商旅C的游戏设计(3)
时间Thu Mar 11 17:14:58 2010
作者:NDark
时间﹔201001
沙漠商旅C的游戏设计(3) - GLSelect / GLWinFont / GLCamera / GLBillboard
http://wp.me/pBAPd-b0
这几个元件是利用OpenGL机制所开发出来的工具。
Camera与Billboard是一款3D游戏基本必备的元件,我想各游戏引擎应该都有。
在沙漠商旅C中Billboard是用来在城市头上显示城市的名称。
原本是为了要研究两种不同的Billboard才撰写的。但是後来只完成简易的那一版。
Camera物件值得提到的一点是Camera Shift,此功能常受到很多人的忽略。
简单来讲,在控制Camera的时候程式设计师应该秉持着一个原则
"让他动,不要叫他动"
( let it move , not set it move )
才不会因为场景的快速变化导致过度设定摄影机使得场景不协调的状况出现。
显示字体的Font物件是沿用口古月游戏引擎的做法,加以整理。
之前也在版上有提过了,
简单来讲是动态的利用windows的CreateFont与wglUseFontOutlines来制造文字的3D外型。
将3D外型传送给显示卡制作Display List。然後绘图时再呼叫该Display List辨识标签。
特色有
不用在开始的时候读入什麽字型档。
也不用一开始宣告一堆记忆体。
可以使用windows内的字型。
绘图前可以指定不同大小,颜色。
可在3D空间中呈现。
可以搭配Billboard。
使用上是呼叫,并指定位置,字串内容,及大小。
winFont.PrintWFont( _x , _y , _z , _str , _scale ) ;
最後是说明GLSelect这个物件。
算是一个OpenGL的内建点选机制,我只是把它包成一个类别使用。
原理是命令OpenGL切换一个叫做select buffer来画东西,当画在这个buffer上的时候。
会取代颜色而把一个像辨识标签的东西画上去。其他部分与绘图相同。
因此我们可以对萤幕上的像素取得该像素的识别标签,
[注]
http://www.pling.org.uk/cs/cgvimg/zbuffer.png
於是可以知道滑鼠所在位置的是什麽物件。
更甚者,因为与绘图无异,所以不只传回最靠近的物件,
在该位置被盖住一串的物件也通通可以纪录下来。
使用上就是在要检查点选的时候(通常是滑鼠click事件的时候)去开启功能
SelectSystem.OpenGLPickStart( _mouseX , _mouseY ) ;
然後在指定各物件标签的状况下绘出要被点选的物件。
SelectSystem.OpenGLPickSetName( id ) ;
最後是关闭并取回资讯
SelectSystem.OpenGLPickEnd() ;
譬如说有无点选到,以及第几顺位被点选到的标签是什麽。
SelectSystem2D.GetHitID()
另外一个OpenGL Select物件的特色是提供了一个遮罩器(filter),
可以让取得点选的纪录暂时无视/只看某些物件标签。
譬如当要某些按钮没反应的时候可以使用。
--
"May the Balance be with U"(愿平衡与你同在)
视窗介面游戏设计教学(
http://0rz.tw/V28It ),讨论,分享。欢迎来信。
视窗程式设计(Windows CLR Form)游戏架构设计(Game Application Framework)
游戏工具设计(Game App. Tool Design )
电脑图学架构及研究(Computer Graphics)论文代读(含投影片制作)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.96.77.176
※ 编辑: NDark 来自: 140.96.77.176 (03/11 17:23)