五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

泰拉瑞亞mod制作技術:頂點繪制教程①(不算太專業(yè))

2023-04-29 19:55 作者:泰拉瑞亞mod制作  | 我要投稿

如果你是很想做什么花里胡哨的刀光之類的拖尾,那么這是必須的

1.頂點繪制介紹

在我們開始解釋頂點繪制的內容之前,我們需要從零開始了解:什么是頂點繪制。更準確的說:什么是XNA(monogame)的頂點繪制。

首先強烈推薦這個網址:LearnOpenGL CN (learnopengl-cn.github.io)

https://learnopengl-cn.github.io/


雖然不是XNA的頂點繪制,但計算機圖形學中的許多內容也可以通用。

接下來,下圖是GPU渲染圖像的流程,其中,藍色部分是大部分著色器語言(例如opengl)可以操作的。



可惜,受限于XNA傻逼的性能,這個著色器我們無法編寫:


XNA,你媽的你竟然不支持,我殺了你

那么,頂點著色器,就肯定是要有“點”的存在。

沒有頂點,繪制個空氣錘錘(

(說到這里,順便提一嘴,SpriteBatch的實現(xiàn)其本質也是頂點繪制,不過只是方便你繪制封裝的東西而已)

以及,片段著色器,也就是我們所說的像素著色器,同頂點著色器一樣,是可以被我們所編寫的。

不過接下來,我們并不會從頂點繪制的著色器開始,而是把它丟在后面去,因為我們需要先了解:“什么是頂點?怎么使用頂點繪制?”

2.如何使用頂點繪制

????2.1.頂點與頂點定義

不得不說,這確實是一個最基礎的東西,頂點繪制需要點。

那么接下來,我會從代碼上一步步分析,頂點的定義方法,與頂點是什么。

首先,如果我們想定義頂點,就需要整一個東西,繼承IVertexType。

就像下圖所示:


IVertexType是頂點數(shù)據(jù)的接口
IVertexType是頂點數(shù)據(jù)的接口

繼承了此接口,我們之后才能用這個頂點,生成頂點,調用頂點繪制。

但這個接口要求實現(xiàn)的屬性,我們總得讓它返回個東西。

于是我們建立一個靜態(tài)字段,解決這個問題:

我是不是把過程給的太詳細了

我這里不會詳細去講VertexDeclaration這個東西,你只管往里面丟入需要的VertexElement(頂點元素)即可。

new VertexElement需要的參數(shù):

第一個參數(shù) int offset:頂點取值偏移。

首先頂點信息均以二進制傳入到GPU之類,但我總不能扔一串00100110010之類的東西給你,所以它肯定要分。

我們知道,計算機的最小單位是1bit,但通常我們是用1byte(8bit)做單位,這個玩意同上,所以它的單位是byte。

那么GPU不知道怎么給它切割byte,所以就需要我們動手告訴GPU如何處理傳入的二進制。

這個東西傳入的值,就是分割處。0就在傳入二進制開始切(相當于不切),1就是有一個1byte長度后切割,以此類推。

接下來,我們就是去計算大小就可以了。

舉例,如上圖所示,第一個元素從頭開始,所以為0。

第二個元素受到前面一個Vector2的影響,所以需要偏移兩個float大小,也就是8(byte)

以此類推。


下一個:VertexElementFormat-頂點元素格式

它就是頂點的元素格式,讓你可以使用一個頂點擁有對應的頂點元素。

它有以上格式,我們根據(jù)我們需要的頂點信息,三個元素分別選擇Vector2和Color和Vector2(或者Vector3)就行了。


再下一個:VertexElementUsage-頂點元素用法

它是每個頂點元素的使用方法,可以用的如同下圖所示:

我不會去講解其它的東西,我們在tr一般是要不著的,我們目前只需要:

Position(繪制在屏幕上的位置)

Color(繪制顏色,但其實還看你的shader有沒有用,一般時候是會用的)

TextureCoordinate(圖片紋理坐標,這對繪制尤為重要)


最后一個參數(shù):usageIndex-頂點元素用法索引

它的功能是:讓你指定每個語義的多個版本。

舉例:你有兩個Position需要傳入,那么你就需要用usageIndex區(qū)分Position0與Position1。

假設這是一個頂點信息擁有的元素(shader內部)


至于多個版本是什么?

這兩個就是POSITIONT(位置)的不同版本。


? ??2.2.頂點的連接種類

XNA里面的頂點繪制連線方法如下:

接下來,我懶得復制字了,就直接從上往下按順序說

第一個:線的列表

它會將線連接起來,以兩個點的形式。

如果你要畫一個本來應該只用三個點就能畫出來的折線,現(xiàn)在你需要定義四個點,你才可以畫出折線,這就是它的不方便之處。

但這個玩意也是會有它的用武之地的,我們等下將下一個的區(qū)別就會知道。

連線數(shù)量:頂點數(shù)/2

?

第二個:線的條帶

它會自動按順序連接所有的頂點,十分方便。

但不好的地方也在此,你不能自由控制連接。

假如有四個點,你要畫兩條沒有頂點不重合的線段,那么這個玩意就用不了,因為它會按照順序連接線段,也就是:

1-2-3-4

而不是你想要的

1-2/3-4

連線數(shù)量:頂點數(shù)-1


第三個:(不清楚)點的列表。

繪制點,對,就一個點。

點數(shù)量=頂點數(shù)

?

第四個:三角形列表。

同第一個線的列表一樣,不過它是通過3個點形成一個三角形,同樣按順序去連接,沒什么可以講的,不過我們繪制圖形的時候都是需要使用三角形的,并且一個完整圖形需要兩個三角形

連線數(shù)量:頂點數(shù)/3

?

第五個:三角形條帶。

這個與線的條帶不大一樣。

不過同樣的地方在于,你不用重復定義頂點。

每次會從編號為i的位置以此取三個頂點,i/i+1/i+2為一組。

例如第一個三角形是V1V2V3,第二個就是V2V3V4,第三個就是V3V4V5,以此類推。

連線數(shù)量:頂點數(shù)-2

????2.3.頂點繪制的調用

(關于調用shader,這些東西請轉入:fs49.org,或者等之后有人找時間把shader篇寫了)

首先,調用頂點繪制,我們得找到:GraphicsDevice。

那么的tr的GraphicsDevice在哪里呢?

我們有幾種辦法:

Main.graphics.GraphicsDevice????

Main.instance.GraphicsDevice

Main.spriteBatch.GraphicsDevice(不確定是不是會有什么區(qū)別,理論來說,SpriteBatch是得通過GraphicsDevice創(chuàng)建的,所以返回的應該也是和graphics.GraphicsDevice? 與instance.GraphicsDevice同一個東西)


然后接下來,GraphicsDevice我們一律縮寫為:gd

然后gd里面有幾種繪制的方法:

前三種需要對頂點繪制與計算機圖形學有更深入的了解,下一期會講

我們最常用:

其中,上面那個會更麻煩一點,下面那個是我們最經常用的

我們這期也就僅僅介紹最下面那個東西,上面那個東西講起來比較麻煩就不想講了(bushi)

這是DrawUserPrimitives的參數(shù)(不要理另一個重載,這玩意我也不理解)

第一個參數(shù)是啥上面講過了,你還不知道就往上看。

第二個參數(shù)是T(泛型,這里要求繼承了IVertexType)的實例。

第三個是頂點的偏移,這個玩意很奇怪,最好不動(你正常是要不著的)

第四個是繪制的數(shù)量,繪制什么與第一個參數(shù)相關聯(lián),就按連線數(shù)量的來填。

泰拉瑞亞mod制作技術:頂點繪制教程①(不算太專業(yè))的評論 (共 條)

分享到微博請遵守國家法律
汉沽区| 麻栗坡县| 阿巴嘎旗| 大埔县| 遵义市| 息烽县| 松阳县| 吴江市| 黄梅县| 明水县| 崇仁县| 长宁县| 璧山县| 四子王旗| 岳池县| 怀柔区| 洞口县| 商河县| 拉萨市| 凤冈县| 南川市| 开平市| 榆中县| 怀集县| 长治市| 合川市| 玛沁县| 民乐县| 沂南县| 都兰县| 延津县| 青河县| 修武县| 灵武市| 星子县| 多伦县| 来宾市| 阿瓦提县| 商河县| 利辛县| 宝坻区|