風場視覺化 隨機重置

2022-10-09 01:18:11 字數 1801 閱讀 6303

在繪製軌跡的效果中,過一段時間就會發現,最後只剩下固定的幾條軌跡,原文中也提到了這種現象,也提供了解決思路,個人還是想結合原始碼再看看。

隨著時間推移,有些粒子產生的偏移超過了範圍就會消失,所以需要隨機重置消失的風粒子。

需要考慮的問題有:

在繪製軌跡中,我們知道了產生的偏移是在最後更新粒子紋理資訊階段,這個時機判斷保留新的粒子狀態還是重置比較合適。

const updatefrag = `

uniform float u_rand_seed;

uniform float u_drop_rate;

uniform float u_drop_rate_bump;

// pseudo-random generator

const vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453);

float rand(const vec2 co)

void main()

`this.droprate = 0.003; // how often the particles move to a random place

this.dropratebump = 0.01; // drop rate increase relative to individual particle speed

// **省略

gl.uniform1f(program.u_rand_seed, math.random());

gl.uniform1f(program.u_drop_rate, this.droprate);

gl.uniform1f(program.u_drop_rate_bump, this.dropratebump);

先介紹一下內建函式:

vec2 seed = (pos + v_tex_pos) * u_rand_seed;
得到的偏移後的位置pos加上頂點位置v_tex_pos,乘以隨機 [0, 1) 之間的隨機數u_rand_seed,得到乙個隨機粒子位置seed

float drop_rate = u_drop_rate + speed_t * u_drop_rate_bump;
粒子插值百分比speed_t乘以自定義單個粒子流失率u_drop_rate_bump,再加上自定義整體流失率,得到綜合流失率drop_rate

float drop = step(1.0 - drop_rate, rand(seed));
如果rand(seed)小於綜合非流失率1.0 - drop_rate,那麼 drop = 0 ,表示不會重置粒子,否則就會重置粒子。

重置的方式就是上面的這部分:

const vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453);

float rand(const vec2 co)

vec2 seed = (pos + v_tex_pos) * u_rand_seed;

vec2 random_pos = vec2(

rand(seed + 1.3),

rand(seed + 2.1));

這個主要就是原文中所說生成偽隨機數。至於為什麼用這樣的計算方式,需要在數學方面下功夫。

風場視覺化 風場資料

了解 webgl 基礎之後,接著去看獲取解析風場資料的邏輯,又遇到問題。在文章示例源庫的說明中,首先要安裝 eccodes 嘗試使用 homebrew 但不行。於是就按照 eccodes 源庫的介紹本地進行編譯安裝。在進行第 4 步的時候,碰到了問題 no cmake fortran compile...

arcgis js 4 風場視覺化

當我們做洋流或者風場 視覺化時候 echart 雖然也能用 但是資料量過大會很卡 資料呼叫是這個樣子 我們需要兩個類 import esriloader from esri loader export const animatedenvironmentlayer animatedenvironmen...

隨機森林視覺化

環境 windows 10,python 3.7 首先需要安裝graphviz,這裡我們使用的是graphviz 2.38.msi,安裝在d program files x86 graphviz2.38。import os from sklearn.datasets import load iris...