mod制作

头像
Lv.1
分类:泰拉技术协会

如果你是很想做什么花里胡哨的刀光之类的拖尾,那么这是必须的

 

1.顶点绘制介绍

在我们开始解释顶点绘制的内容之前,我们需要从零开始了解:什么是顶点绘制。更准确的说:什么是XNA(monogame)的顶点绘制。

 

首先强烈推荐这个网址:LearnOpenGL CN (learnopengl-cn.github.io)

 

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

 

 

 

虽然不是XNA的顶点绘制,但计算机图形学中的许多内容也可以通用。

 

接下来,下图是GPU渲染图像的流程,其中,蓝色部分是大部分着色器语言(例如opengl)可以操作的。

 

mod制作

 

 

 

 

可惜,受限于XNA 的性能,这个着色器我们无法编写:

mod制作

 

XNA,你妈的你竟然不支持,我杀了你

 

那么,顶点着色器,就肯定是要有“点”的存在。

 

没有顶点,绘制个空气锤锤(

 

(说到这里,顺便提一嘴,SpriteBatch的实现其本质也是顶点绘制,不过只是方便你绘制封装的东西而已)

 

以及,片段着色器,也就是我们所说的像素着色器,同顶点着色器一样,是可以被我们所编写的。

 

不过接下来,我们并不会从顶点绘制的着色器开始,而是把它丢在后面去,因为我们需要先了解:“什么是顶点?怎么使用顶点绘制?”

 

2.如何使用顶点绘制

2.1.顶点与顶点定义

不得不说,这确实是一个最基础的东西,顶点绘制需要点。

 

那么接下来,我会从代码上一步步分析,顶点的定义方法,与顶点是什么。

 

首先,如果我们想定义顶点,就需要整一个东西,继承IVertexType。

 

就像下图所示:

mod制作

IVertexType是顶点数据的接口IVertexType是顶点数据的接口

 

继承了此接口,我们之后才能用这个顶点,生成顶点,调用顶点绘制。

 

但这个接口要求实现的属性,我们总得让它返回个东西。

 

于是我们建立一个静态字段,解决这个问题:

mod制作

我是不是把过程给的太详细了

我这里不会详细去讲VertexDeclaration这个东西,你只管往里面丢入需要的VertexElement(顶点元素)即可。

 

new VertexElement需要的参数:

 

第一个参数 int offset:顶点取值偏移。

 

首先顶点信息均以二进制传入到GPU之类,但我总不能扔一串00100110010之类的东西给你,所以它肯定要分。

 

我们知道,计算机的最小单位是1bit,但通常我们是用1byte(8bit)做单位,这个玩意同上,所以它的单位是byte。

 

那么GPU不知道怎么给它切割byte,所以就需要我们动手告诉GPU如何处理传入的二进制。

 

这个东西传入的值,就是分割处。0就在传入二进制开始切(相当于不切),1就是有一个1byte长度后切割,以此类推。

 

接下来,我们就是去计算大小就可以了。

 

举例,如上图所示,第一个元素从头开始,所以为0。

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

以此类推。

 

 

 

下一个:VertexElementFormat-顶点元素格式

 

它就是顶点的元素格式,让你可以使用一个顶点拥有对应的顶点元素。mod制作

它有以上格式,我们根据我们需要的顶点信息,三个元素分别选择Vector2和Color和Vector2(或者Vector3)就行了。

再下一个:VertexElementUsage-顶点元素用法

它是每个顶点元素的使用方法,可以用的如同下图所示:

我不会去讲解其它的东西,我们在tr一般是要不着的,我们目前只需要:
mod制作

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

 

Color(绘制颜色,但其实还看你的shader有没有用,一般时候是会用的)

 

TextureCoordinate(图片纹理坐标,这对绘制尤为重要)

 

最后一个参数:usageIndex-顶点元素用法索引

 

它的功能是:让你指定每个语义的多个版本。

 

举例:你有两个Position需要传入,那么你就需要用usageIndex区分Position0与Position1。

mod制作

假设这是一个顶点信息拥有的元素(shader内部)

 

 

至于多个版本是什么?

 

这两个就是POSITIONT(位置)的不同版本。

mod制作

2.2.顶点的连接种类

 

XNA里面的顶点绘制连线方法如下:
mod制作

接下来,我懒得复制字了,就直接从上往下按顺序说

第一个:线的列表

 

它会将线连接起来,以两个点的形式。

 

如果你要画一个本来应该只用三个点就能画出来的折线,现在你需要定义四个点,你才可以画出折线,这就是它的不方便之处。

 

但这个玩意也是会有它的用武之地的,我们等下将下一个的区别就会知道。

 

连线数量:顶点数/2

 

 

 

第二个:线的条带

 

它会自动按顺序连接所有的顶点,十分方便。

 

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

 

假如有四个点,你要画两条没有顶点不重合的线段,那么这个玩意就用不了,因为它会按照顺序连接线段,也就是:

 

1-2-3-4

 

而不是你想要的

 

1-2/3-4

 

连线数量:顶点数-1

 

 

 

第三个:(不清楚)点的列表。

 

绘制点,对,就一个点。

 

点数量=顶点数

 

第四个:三角形列表。

 

同第一个线的列表一样,不过它是通过3个点形成一个三角形,同样按顺序去连接,没什么可以讲的,不过我们绘制图形的时候都是需要使用三角形的,并且一个完整图形需要两个三角形

 

连线数量:顶点数/3

 

第五个:三角形条带。

 

这个与线的条带不大一样。

 

不过同样的地方在于,你不用重复定义顶点。

mod制作

每次会从编号为i的位置以此取三个顶点,i/i+1/i+2为一组。

 

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

 

连线数量:顶点数-2

 

2.3.顶点绘制的调用

(关于调用shader,这些东西请转入:fs49.org,或者等之后有人找时间把shader篇写了)

 

首先,调用顶点绘制,我们得找到:GraphicsDevice。

 

那么的tr的GraphicsDevice在哪里呢?

 

我们有几种办法:

 

Main.graphics.GraphicsDevice

 

Main.instance.GraphicsDevice

 

Main.spriteBatch.GraphicsDevice(不确定是不是会有什么区别,理论来说,SpriteBatch是得通过GraphicsDevice创建的,所以返回的应该也是和graphics.GraphicsDevice 与instance.GraphicsDevice同一个东西)

 

 

 

然后接下来,GraphicsDevice我们一律缩写为:gd

然后gd里面有几种绘制的方法:

mod制作

前三种需要对顶点绘制与计算机图形学有更深入的了解,下一期会讲

我们最常用:

mod制作

其中,上面那个会更麻烦一点,下面那个是我们最经常用的

我们这期也就仅仅介绍最下面那个东西,上面那个东西讲起来比较麻烦就不想讲了(bushi)

这是DrawUserPrimitives的参数(不要理另一个重载,这玩意我也不理解)mod制作

第一个参数是啥上面讲过了,你还不知道就往上看。

 

第二个参数是T(泛型,这里要求继承了IVertexType)的实例。

 

第三个是顶点的偏移,这个玩意很奇怪,最好不动(你正常是要不着的)

 

第四个是绘制的数量,绘制什么与第一个参数相关联,就按连线数量的来填。

【泰拉瑞亚mod制作技术:顶点绘制教程①(不算太专业)-哔哩哔哩】 https://b23.tv/FOYUhb7如有侵权立即删除)我这个人会听建议https://tlryjg.jiaohusheji.net/wp-content/uploads/emoticon/20221119140033.jpg

下载app分享☆收藏2+
  • https://tlryjg.jiaohusheji.net/wp-content/uploads/emoticon/20221118075958.jpg

    2年前

    Warning: count(): Parameter must be an array or an object that implements Countable in /www/wwwroot/tlryjg.com/wp-content/plugins/qapress/templates/comment.php on line 57
  • https://tlryjg.jiaohusheji.net/wp-content/uploads/emoticon/20221119140042.jpg

    2年前

    Warning: count(): Parameter must be an array or an object that implements Countable in /www/wwwroot/tlryjg.com/wp-content/plugins/qapress/templates/comment.php on line 57

亲爱的馆友,老酒馆已暂停评论~

您可以前往新酒馆参与讨论!(๑•̀ㅂ•́)و✧

→ 点击查看酒馆重大版本更新公告

信息x
你确定要删除回复吗?
禁止发布

首页

视频

社区

福利

我的
文章页
文章页