最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

泰拉瑞亞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è))的評論 (共 條)

分享到微博請遵守國家法律
三门峡市| 东丽区| 车致| 旬邑县| 富民县| 桑日县| 长武县| 衡阳县| 西林县| 抚远县| 郓城县| 宁化县| 蒙阴县| 双鸭山市| 长汀县| 吴江市| 海口市| 平原县| 泰兴市| 新泰市| 慈利县| 尉氏县| 承德市| 东乌珠穆沁旗| 玉树县| 榆中县| 双流县| 黑龙江省| 金平| 吴旗县| 雷波县| 和顺县| 桃园县| 南漳县| 沂源县| 高青县| 广汉市| 石阡县| 柞水县| 德江县| 巴彦县|