怎么用Python OpenGL的point sprite技术绘制雪花(opengl,python,开发技术)

时间:2024-05-02 07:28:07 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

在OpenGL中开启和使用点精灵有一点点复杂,好在WxGL对此做了封装,用起来非常简单。在给出演示代码前,先贴两张雪花的纹理图片。

snow_1.png

怎么用Python OpenGL的point sprite技术绘制雪花

snow_2.png

怎么用Python OpenGL的point sprite技术绘制雪花

熟悉GLSL语言的同学,很容易读懂着色器源码。将着色器源码、纹理图片装进模型之后,只需要show一下,雪花就显示出来了。如果想实现雪花飘飘的效果,请参考我的另一篇博文《用OpenGL导演一场烟花盛会,迎接即将到来的新年》。

importnumpyasnpimportwxglfromwxglimportwxplotaspltvshader_src="""#version330coreinvec4a_Position;uniformmat4u_MVPMatrix;voidmain(){gl_Position=u_MVPMatrix*a_Position;gl_PointSize=(a_Position.z+1)*30;}"""fshader_src="""#version330coreuniformsampler2Du_Snow_1;infloatidx;voidmain(){gl_FragColor=texture2D(u_Snow_1,gl_PointCoord);}"""m=wxgl.Model(wxgl.POINTS,vshader_src,fshader_src,sprite=True)#通过sprite=Treue开启点精灵m.set_vertex('a_Position',np.random.random((300,3))*2-1)#随机生成300个点m.add_texture('u_Snow_1','res/image/snow_1.png',wxgl.TEXTURE_2D)#添加雪花纹理m.set_mvp_matrix('u_MVPMatrix')#设置模型矩阵、视点矩阵和投影矩阵plt.model(m)plt.show()

下面是使用snow_1.png做纹理的效果。

怎么用Python OpenGL的point sprite技术绘制雪花

下面是使用snow_2.png做纹理的效果。

怎么用Python OpenGL的point sprite技术绘制雪花

不过,这样的雪花略显单调,毕竟,世界上没有两片完全相同的雪花。怎样让雪花看起来更逼真一点呢?下面的代码尝试在片元着色器中混用两种纹理。

importnumpyasnpimportwxglfromwxglimportwxplotaspltvshader_src="""#version330coreinvec4a_Position;uniformmat4u_MVPMatrix;voidmain(){gl_Position=u_MVPMatrix*a_Position;gl_PointSize=(a_Position.z+1)*30;}"""fshader_src="""#version330coreuniformsampler2Du_Snow_1;uniformsampler2Du_Snow_2;infloatidx;voidmain(){if(fract(sin(dot(gl_PointCoord,vec2(12.9898,78.233)))*43758.5453)<0.5){gl_FragColor=texture2D(u_Snow_1,gl_PointCoord);}else{gl_FragColor=texture2D(u_Snow_2,gl_PointCoord);}}"""m=wxgl.Model(wxgl.POINTS,vshader_src,fshader_src,sprite=True)#通过sprite=Treue开启点精灵m.set_vertex('a_Position',np.random.random((300,3))*2-1)#随机生成300个点m.add_texture('u_Snow_1','res/image/snow_1.png',wxgl.TEXTURE_2D)#添加雪花纹理1m.add_texture('u_Snow_2','res/image/snow_2.png',wxgl.TEXTURE_2D)#添加雪花纹理2m.set_mvp_matrix('u_MVPMatrix')#设置模型矩阵、视点矩阵和投影矩阵plt.model(m)plt.show()

这个雪花有点独特吧?

怎么用Python OpenGL的point sprite技术绘制雪花

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:怎么用Python OpenGL的point sprite技术绘制雪花的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么用python实现简易聊天对话框下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18