最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過Python OpenGL的point sprite技術(shù)繪制雪花

 更新時間:2022年02月07日 09:52:56   作者:天元浪子  
通常,點精靈(point sprite)技術(shù)被用于描述大量粒子在屏幕上的運動,自然也可以用于繪制雪花。本文將通過Python OpenGL繪制雪花,感興趣的可以動手試一試

看冬奧才知道,阿勒泰不但是中國的“雪都”,還是“人類滑雪起源地”。這個說法是否成立,姑且不論,阿勒泰的雪的確很漂亮。冬奧會有一個宣傳片,就是借用一朵阿勒泰雪花的視角來講述冬奧會的故事,既有歷史的厚重,又有藝術(shù)的浪漫,極具視覺沖擊感。

那么問題來了:如何用OpenGL繪制雪花呢?通常,點精靈(point sprite)技術(shù)被用于描述大量粒子在屏幕上的運動,自然也可以用于繪制雪花。點精靈可以理解為貼了紋理圖片的點——僅用一個vertex就可以把一個2D紋理圖片繪制到屏幕的任何位置。

在OpenGL中開啟和使用點精靈有一點點復雜,好在WxGL對此做了封裝,用起來非常簡單。在給出演示代碼前,先貼兩張雪花的紋理圖片。

snow_1.png

snow_2.png

熟悉GLSL語言的同學,很容易讀懂著色器源碼。將著色器源碼、紋理圖片裝進模型之后,只需要show一下,雪花就顯示出來了。如果想實現(xiàn)雪花飄飄的效果,請參考我的另一篇博文《用OpenGL導演一場煙花盛會,迎接即將到來的新年》。

import numpy as np
import wxgl
from wxgl import wxplot as plt

vshader_src = """
? ? #version 330 core
? ? in vec4 a_Position;
? ? uniform mat4 u_MVPMatrix;
? ? void main() {?
? ? ? ? gl_Position = u_MVPMatrix * a_Position;?
? ? ? ? gl_PointSize = (a_Position.z + 1) * 30;
? ? }
"""

fshader_src = """
? ? #version 330 core
? ? uniform sampler2D u_Snow_1;
? ? in float idx;
? ? void main() {?
? ? ? ? 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') # 設(shè)置模型矩陣、視點矩陣和投影矩陣

plt.model(m)
plt.show()

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

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

不過,這樣的雪花略顯單調(diào),畢竟,世界上沒有兩片完全相同的雪花。怎樣讓雪花看起來更逼真一點呢?下面的代碼嘗試在片元著色器中混用兩種紋理。

import numpy as np
import wxgl
from wxgl import wxplot as plt

vshader_src = """
? ? #version 330 core
? ? in vec4 a_Position;
? ? uniform mat4 u_MVPMatrix;
? ? void main() {?
? ? ? ? gl_Position = u_MVPMatrix * a_Position;?
? ? ? ? gl_PointSize = (a_Position.z + 1) * 30;
? ? }
"""

fshader_src = """
? ? #version 330 core
? ? uniform sampler2D u_Snow_1;
? ? uniform sampler2D u_Snow_2;
? ? in float idx;
? ? void main() {?
? ? ? ? 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) # 添加雪花紋理1
m.add_texture('u_Snow_2', 'res/image/snow_2.png', wxgl.TEXTURE_2D) # 添加雪花紋理2
m.set_mvp_matrix('u_MVPMatrix') # 設(shè)置模型矩陣、視點矩陣和投影矩陣

plt.model(m)
plt.show()

這個雪花有點獨特吧?

到此這篇關(guān)于通過Python OpenGL的point sprite技術(shù)繪制雪花的文章就介紹到這了,更多相關(guān)Python OpenGL雪花內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python多線程http壓力測試腳本

    python多線程http壓力測試腳本

    這篇文章主要為大家詳細介紹了python多線程http壓力測試腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python使用asyncio標準庫對異步IO的支持

    Python使用asyncio標準庫對異步IO的支持

    Python中,所有程序的執(zhí)行都是單線程的,但可同時執(zhí)行多個任務,不同的任務被時間循環(huán)(Event Loop)控制及調(diào)度,Asyncio是Python并發(fā)編程的一種實現(xiàn)方式;是Python 3.4版本引入的標準庫,直接內(nèi)置了對異步IO的支持
    2023-11-11
  • Python中random模塊常用方法的使用教程

    Python中random模塊常用方法的使用教程

    這篇文章主要給大家介紹了關(guān)于Python中random模塊常用方法的使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 便捷提取python導入包的屬性方法

    便捷提取python導入包的屬性方法

    今天小編就為大家分享一篇便捷提取python導入包的屬性方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python?flask?sqlalchemy的簡單使用及常用操作

    Python?flask?sqlalchemy的簡單使用及常用操作

    這篇文章主要介紹了Python?flask?sqlalchemy的簡單使用及常用操作,在python中,常用的ORM工具就是sqlalchemy了。下面就以一個簡單的flask例子來說明吧,需要的小伙伴可以參考一下
    2022-08-08
  • pandas dataframe添加表格框線輸出的方法

    pandas dataframe添加表格框線輸出的方法

    今天小編就為大家分享一篇pandas dataframe添加表格框線輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python中將dataframe轉(zhuǎn)換為字典的實例

    Python中將dataframe轉(zhuǎn)換為字典的實例

    下面小編就為大家分享一篇Python中將dataframe轉(zhuǎn)換為字典的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python分類測試代碼實例匯總

    Python分類測試代碼實例匯總

    這篇文章主要介紹了Python分類測試代碼實例匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • python銀行卡號碼校驗Luhn模10算法

    python銀行卡號碼校驗Luhn模10算法

    這篇文章主要為大家介紹了python銀行卡號碼校驗Luhn模10算法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Django文件存儲 默認存儲系統(tǒng)解析

    Django文件存儲 默認存儲系統(tǒng)解析

    這篇文章主要介紹了Django文件存儲 默認存儲系統(tǒng)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論

安义县| 威信县| 册亨县| 咸丰县| 噶尔县| 天津市| 贵溪市| 吉林市| 年辖:市辖区| 革吉县| 扶风县| 波密县| 惠安县| 巫山县| 遂平县| 宁陕县| 台湾省| 遵义县| 红原县| 邵东县| 兴化市| 收藏| 富源县| 丰都县| 萍乡市| 沙坪坝区| 文水县| 雷波县| 壶关县| 舟曲县| 乐安县| 巍山| 宣恩县| 平乡县| 永昌县| 马尔康县| 宣武区| 永定县| 武山县| 香港 | 米易县|