godot 随机地图4 读取shader处理后的信息
一、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、结果
