欢迎光临散文网 会员登陆 & 注册

godot 随机地图4 读取shader处理后的信息

2023-05-23 19:32 作者:damedown  | 我要投稿

一、opengl中数据的处理方式

1、简洁

VBO就是一块10*10的木板

VAO就是 我要分割1*4的木板10个,1*6的木板10个。

切割的时候可以

4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6;

4,6,4,6,4,6,4,6,4,6,4,6,4,6,4,6,4,6,4,6;

如果不分割,是没法用来制作家居的。

EBO就是这些分割后的木板的组装图纸。

2、viewport和vertex的关系

    这只是我们上传的顶点坐标,因为OpenGL的坐标是在0~1内,(x,y)小于0.0或者大于1.0就判定超过范围了,不给渲染了。如果要把x=2.5的拿进来渲染,要么把它放深点,要么把它缩小点,要么平移摄像机到x=2.5。



    在处理vertex的时候,他会把所有的顶点拿去位移,和旋转,所以管线数量=vertex的数量。

到了fragment的时候,管线此时此刻变成了uv,也就是rasterization后分配的管线。但是没有屏幕大小和需要渲染得窗口大小没法分配。所以我们会在gpu渲染之前第一步就是告诉他我的viewport的大小为(1024*512),你的x(0~1)要映射到0~1023,y(0~1)要映射到0~511

    明确告诉他我要有多大的RenderTarget ViewPort,他才好去把计算出来的数据blending。

    blending可以平铺,可以拉伸(x,y,全拉伸),可以只铺设一个。

    所以我们如果要渲染一个512*1的texture,我只需要传入(0,0)(1,0)(0,0)(1,1)四个顶点,把他的viewport设置为512*1 。


二、godot的中的实现

    1、创建viewport

    2、上传vertex的信息

    3、运用shader

    4、把viewport的数据导出来

三、我已经被godot整得神经质了,稽查源码

    发现noisetexture的标志源码

    也就是说,noisetexture会生成一个viewport,然而使用普通image就没有。

    那么问题又来了,为啥godot.svg就可以呢!!!!

    鬼晓得了。

    当然也发现godot的有点

    你要给我说这是c++,我已经感动得落泪了。

    不搞大量枚举,不乱用struct,

    不搞多重继承,也不瞎吉尔命名,不用一堆指针函数,

    该空行空行,结构清晰明了,命名直观。

    基本是就是github里面某个功能的最简代码直接搬过来的。


四、使用viewport

    在godot中有,所以我3天就是被tm误导了。

    https://docs.godotengine.org/en/stable/tutorials/shaders/using_viewport_as_texture.html

    

    然后godot4.0告诉我要创建viewport

    godot说我已经删了,只有subviewport,好吧。


    然后给subviewport添加一个colorrect

理想操作
实际操作

然后添加material

因为colorect本质类似一个mesh,而且subviewport是一个fbo。


五、从subviewport中导出数据

    稽查源码得到:

    viewport要这样得到数据

    然后在处理成image

当然还是不行,我已经习惯了

放在onready之后,而且改为jpg也不行。

    真没法了,只能合理怀疑他重载了后,但是没有写这个功能上去。

六、只是使用screen shot来实现了

    1、创建一个buttom

    2、给他连接信号

    3、截取图片

    4、结果


godot 随机地图4 读取shader处理后的信息的评论 (共 条)

分享到微博请遵守国家法律