国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

3D編程指南第三部分:粒子系統(tǒng)和立即模式渲染(1)

2019-11-18 14:55:16
字體:
供稿:網(wǎng)友

介紹
    歡迎來到M3G指南的第三部分!今天我將介紹如何控制整個(gè)渲染過程(立即渲染),以及如何創(chuàng)建一個(gè)精密的粒子系統(tǒng)。此外,這里有一些鏈接,萬一你感到迷惑就可以參考:
    首先,或許也是最重要的,就是在索尼愛立信開發(fā)者世界上專業(yè)的移動(dòng)java 3D網(wǎng)絡(luò)區(qū)。其次,假如你碰到困難,就去索尼愛立信移動(dòng)Java 3D論壇。對(duì)于其他的任何情況,使用索尼愛立信開發(fā)者世界網(wǎng)絡(luò)門戶,在那里你可以找到你的問題的答案,并且可以了解到更多。
    這篇文章的目的是向你展示,如何根據(jù)不同的變換在不同的時(shí)間內(nèi)渲染同一個(gè)對(duì)象。這被稱作立即模式。你將會(huì)看到這種模式對(duì)很多事情是多么的強(qiáng)大。另外,這篇文章將是深入更高級(jí)的指南的基礎(chǔ),因?yàn)閺默F(xiàn)在開始,我們幾乎只使用立即模式進(jìn)行渲染。
    因?yàn)槲闹械拇a是用來演示使用的,所以它不是最優(yōu)化的,并且它也沒有包括所有可能發(fā)生的錯(cuò)誤。稍后將會(huì)有更高級(jí)的話題。
你應(yīng)該了解的
    在你開始閱讀這篇指南以前,你應(yīng)該已經(jīng)閱讀過先前的兩篇,并且已經(jīng)對(duì)基本的M3G功能有一個(gè)稍微扎實(shí)的領(lǐng)會(huì)。
 第一部分:快速進(jìn)入移動(dòng)JAVA 3D編程世界
 第二部分:光的3D理論與定位
保留模式和立即模式渲染
    保留模式是當(dāng)你使用一個(gè)世界它含有的全部信息——包括照相機(jī)和燈光渲染整個(gè)世界時(shí)使用的模式。這是一種相當(dāng)受限制的模式,因?yàn)槲覀儙缀蹩偸窍M鶕?jù)不同的變換多次繪制一個(gè)模型,而不是調(diào)用整個(gè)場(chǎng)景圖像。所以,我們?cè)贛3G中渲染一個(gè)組、節(jié)點(diǎn)或者是一個(gè)子網(wǎng)面就被稱為立即模式。這些是立即模式的方法:
render ( Node  node, Transform  transform)
render ( VertexBuffer  vertices, IndexBuffer  triangles, Appearance  appearance, Transform  transform)
render ( VertexBuffer  vertices, IndexBuffer  triangles, Appearance  appearance, Transform  transform, int scope)
    像你看到的一樣,三個(gè)方法都需要某種頂點(diǎn)數(shù)據(jù):Node和VertexBuffer/IndexBuffer。一個(gè)Node可能主要是一個(gè)場(chǎng)景圖像的任意部分,甚至一個(gè)世界也可以被認(rèn)為是一個(gè)Node。通常你會(huì)給第一個(gè)渲染的方法傳遞一個(gè)Mesh或者一個(gè)Group。VertexBuffer,我們?cè)诘诙改现幸呀?jīng)談?wù)撨^,它是描述3D空間中一個(gè)模型的網(wǎng)面數(shù)據(jù)的集合。最后的兩個(gè)方法也需要Appearance類,以明白如何顯示網(wǎng)面數(shù)據(jù)。在這篇指南中我們只使用第一個(gè)方法,向你展示立即模式是如何工作的。
    所有方法還有另外一個(gè)共同點(diǎn),就是它們都需要一個(gè)Transform類,這個(gè)類描述了模型從本地到3D世界空間的轉(zhuǎn)換信息。請(qǐng)記住,我們?cè)谧詈笠黄改现杏懻撍A硗庑枰涀〉囊患聲r(shí),你希望的渲染的大多數(shù)模型都是可變化的。這就意味著它們擁有自己的內(nèi)部變換矩陣。然而,立即模式渲染忽略所有的這種轉(zhuǎn)換信息,只使用為這個(gè)方法提供的Transform矩陣。這是非常便利的,因?yàn)槟憧梢栽趦?nèi)存中保存一個(gè)太空船的Mesh,但是可以使用不同的Transform矩陣多次渲染它,這樣就可以獲得很多不同的太空船。當(dāng)我們開始設(shè)計(jì)粒子引擎時(shí),你將會(huì)看到實(shí)際使用的這種方法。
那是全部嗎?
    立即模式渲染的問題是在渲染之前你必須治理更多的對(duì)象,因?yàn)槟銢]有一個(gè)便利的World類,它存儲(chǔ)了所有照相機(jī)、背景和照明信息。因此現(xiàn)在你需要手動(dòng)控制的是,使用一個(gè)Background對(duì)象的視口緩沖器、場(chǎng)景照明信息和照相機(jī)。
背景(Background)
    為了使用立即模式渲染,我們必須手動(dòng)清除視口,這樣為下一次繪制周期做預(yù)備。這個(gè)操作既可以在一個(gè)渲染循環(huán)之前也可以在它之后完成,但是它必須在你綁定Graphics3D對(duì)象之后和釋放Graphics3D之前完成。M3G使用一個(gè)Background類來幫助你完成這個(gè)操作。這個(gè)Background類保存了很多極好的信息,例如用來清除屏幕的背景顏色和繪制背景的圖片。它是很有用的,因?yàn)槟憧梢允褂靡粋€(gè)很大的圖片作為背景,但是可以只顯示它的一些小塊和部分就似乎你走來走去。例如,你可以在你的視野之內(nèi)擁有一個(gè)大PNG,然后當(dāng)玩家在游戲世界中移動(dòng)時(shí),你就可以移動(dòng)背景的修剪區(qū)域來顯示視野的其它部分。然而你必須明白,使用大的PNG不僅僅十分慢,而且內(nèi)存效率很低。下面是Background類的最重要的方法:
setColor (int ARGB)
setCrop (int cropX, int cropY, int width, int height)
setImageMode (int modeX, int modeY)
setImage ( Image2D  image)
    讓我們一個(gè)一個(gè)考慮它們。第一個(gè)方法是最簡(jiǎn)單和最常用的。它以0xAARRGGBB形式設(shè)置背景的顏色——這個(gè)顏色是在屏幕被清除時(shí)使用的。那么例如一個(gè)鮮紅的顏色就是0xFFFF0000。很多人設(shè)置這個(gè)顏色為黑色或者天空的顏色。然而,默認(rèn)顏色是白色。
    setCrop方法是非常有用的,假如你正在使用一個(gè)背景圖片作為一個(gè)背景顯示。利用這個(gè)方法,你可以決定整個(gè)背景圖片的哪個(gè)部分被渲染。這里有一些非凡的情況需要考慮,像修剪區(qū)域跨出背景圖片的邊界之外。這是就要用到第三個(gè)方法。它決定了對(duì)在源圖片之外的像素將會(huì)發(fā)生什么。有兩種可用的模式:REPEAT和BORDER。REPEAT意味著這個(gè)圖片無限的重復(fù)自己,就像是一個(gè)平鋪的紋理;而BORDER意味著在源圖片以外的像素將使用setColor方法提供的背景顏色進(jìn)行著色。一個(gè)很好的事情就是你可以分開決定x軸和y軸的圖像模式動(dòng)作。這就意味著,你可以在x軸(水平方向)環(huán)繞一個(gè)背景圖片,而在y軸(垂直方向)保持靜止。
    最后一個(gè)方法,setImage是用來決定哪一個(gè)圖片將會(huì)被用作背景。你可以為這個(gè)方法提供一個(gè)null參數(shù)關(guān)閉背景圖像渲染,只使用背景顏色填充屏幕。這是默認(rèn)的模式。不過請(qǐng)注重,圖片是Image2D必須的,并且不是標(biāo)準(zhǔn)的Java ME平臺(tái)圖片。可是從一個(gè)Image創(chuàng)建一個(gè)Image2D并不是很難,你既可以使用十分有用的Loader類直接將它指向一個(gè).PNG圖像,也可以僅僅使用Image2D的構(gòu)造方法,如下所示:
Image2D (int format, java.lang.Object image)
    它是一個(gè)十分簡(jiǎn)單的構(gòu)造方法,首先它獲得圖片的格式(在99% 的情況下,它是Image2D.RGBA或者Image2D.RGB,這依靠于你是否使用透明度),然后就是獲得圖片自身。第二個(gè)參數(shù)應(yīng)該是你的Image類。所以,你將轉(zhuǎn)換一個(gè)正常的Java ME平臺(tái)圖片為一個(gè)Image2D對(duì)象:
Image img = Image.createImage("/myimage.png");
Image2D img2d = new Image2D(Image2D.RGBA, img);
    極其輕易!因此Image2D沒有任何威脅,它僅僅是M3G系統(tǒng)使用的一個(gè)Image封裝。
    現(xiàn)在,你可能迫不及待了,想知道在你渲染任何對(duì)象之前,如何使用Background類清除背景。它是非常輕易的,這是第一個(gè)向你展示方法的代碼片斷:
// 背景
Background back = null;



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 唐河县| 扶余县| 鄂托克前旗| 尼勒克县| 德令哈市| 杭锦旗| 岱山县| 遵义县| 苏尼特左旗| 五寨县| 中江县| 梁河县| 若羌县| 耒阳市| 鹤山市| 定南县| 灵璧县| 阿勒泰市| 齐齐哈尔市| 古交市| 山西省| 伊川县| 忻州市| 威海市| 郁南县| 芦山县| 延长县| 大兴区| 普陀区| 临夏县| 西乌| 嘉义市| 日喀则市| 申扎县| 慈利县| 宁晋县| 桂林市| 靖西县| 新兴县| 台山市| 商丘市|