我正在嘗試為我正在開發的開源游戲生成逼真的星星。我正在使用
多星有一個嚴重的問題:

我的代碼如下:
頂點著色器
attribute vec3 glow;
varying vec3 vGlow;
void main() {
vGlow = glow;
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
gl_PointSize = 100.0;
gl_Position = projectionMatrix * mvPosition;
}
片段著色器
varying vec3 vGlow;
void main() {
float starLuminosity = 250.0;
float invRadius = 60.0;
float invGlowRadius = 2.5;
// Get position relative to center.
vec2 position = gl_PointCoord;
position.x -= 0.5;
position.y -= 0.5;
// Airy disk calculation.
float diskScale = length(position) * invRadius;
vec3 glow = vGlow / pow(diskScale, invGlowRadius);
glow *= starLuminosity;
gl_FragColor = vec4(glow, 1.0);
}
我試過丟棄較暗的像素,但這并不能解決問題,它只是將其隱藏了一點:
if (gl_FragColor.r < 0.1 && gl_FragColor.g < 0.1 && gl_FragColor.b < 0.1) {
discard;
}

我所追求的實際效果如下,

但我不知道如何實作這一目標。
任何建議將被認真考慮。
uj5u.com熱心網友回復:
您無法在片段著色器中實作此效果,因為您要渲染多個網格或圖元。您必須在渲染幾何體之前啟用混合:
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
還要確保禁用深度測驗。
此外,您必須設定 alpha 通道。例如:
gl_FragColor = vec4(glow, 1.0);
vec4(glow, (glow.r glow.g. glow.b)/3.0 * 1.1 - 0.1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312892.html
標籤:数学 三.js opengl-es GLSL 网页链接
