其他分享
首页 > 其他分享> > 使用GLSL进行纹理处理(在PyOpenGL和Pygame中)

使用GLSL进行纹理处理(在PyOpenGL和Pygame中)

作者:互联网

在对Python中的固定功能管道感到沮丧之后,我开始研究着色器来绘制我的游戏的视差背景.但是,我找不到任何简单的方法来纹理绘制哪些顶点.

我目前有一个PyOpenGL顶点缓冲对象,顶点数组如下:[x,y,z,texX,texY,texID]

我用getAttribLocation / glEnableVertexAttribArray将它们传递给着色器.我不确定它是否有效,因为着色器当前没有编译,但在我添加可能很糟糕的纹理代码之前,事情已经正常用彩色顶点.

我想要的是使用着色器绘制纹理模型,具有多个纹理,但模型是平坦的背景.它是一个大的(1600×800左右)图像,分为256×256纹理和四边形多边形. (旁边的问题:拥有更多的小多边形是否更好,因此多边形的多边形在屏幕外或大多边形,以便减少纹理绑定?)

因为它是多个相关的纹理,我想在着色器中完成所有这一切,而不必为CPU上的每个块绑定纹理,所以我认为发送带有顶点数据的纹理数据是最好的,但我无法得到它工作.

有人可以给我一个简单的例子,顶点和片段着色器相互作用,使多个多边形与不同的纹理?

编辑:着色器,vbo和这里的东西:http://pastebin.com/3LaYiyvh着色器现在编译,但三角形是不可见的.

EDITEDIT:到了!不确定最终破解了什么,但这是程序:http://pastebin.com/k87sfiEf
我认为它就像是,只要你在开始时绑定所有纹理,着色器就可以在它们之间进行交换.但我不确定.
另外值得注意的是,由于在绘制时交换纹理,将大背景分割成较小的块是一个坏主意.浪费空间的大纹理很好,地图集更好!

解决方法:

After getting frustrated with the fixed-function pipeline being slow in Python, I started looking into shaders to draw my game’s parallax backgrounds.

如果固定功能很慢,使用着色器不会使它更快.

可能你只是做了一些根本错误的事情,比如使用立即模式,或者根本没有硬件加速(由于缺少正确安装的驱动程序或类似的).

标签:python,opengl,pygame,glsl,pyopengl
来源: https://codeday.me/bug/20190902/1790705.html