Map 使用纹理贴图的粒子系统深度贴图
我试图为粒子系统生成深度贴图,但如果我使用MeshDepthMaterial渲染粒子系统,则每个粒子仅渲染为每个顶点的单个点,而不覆盖纹理贴图粒子显示的整个区域Map 使用纹理贴图的粒子系统深度贴图,map,system,three.js,depth,particles,Map,System,Three.js,Depth,Particles,我试图为粒子系统生成深度贴图,但如果我使用MeshDepthMaterial渲染粒子系统,则每个粒子仅渲染为每个顶点的单个点,而不覆盖纹理贴图粒子显示的整个区域 我是否需要使用MeshDepthMaterial生成深度贴图,或者是否有其他选项?目前无法获取MeshDepthMaterial以反映粒子系统的大小或纹理。但是,实现一个自定义着色器材质并不是太难。首先,需要顶点着色器和片段着色器 <script type="x-shader/x-vertex" id="vertexShader"
我是否需要使用MeshDepthMaterial生成深度贴图,或者是否有其他选项?目前无法获取MeshDepthMaterial以反映粒子系统的大小或纹理。但是,实现一个自定义着色器材质并不是太难。首先,需要顶点着色器和片段着色器
<script type="x-shader/x-vertex" id="vertexShader">
uniform float size;
void main() {
gl_PointSize = size;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position , 1.0 );
}
</script>
<script type = "x-shader/x-fragment" id="fragmentShader">
uniform sampler2D map;
uniform float near;
uniform float far;
void main() {
float depth = gl_FragCoord.z / gl_FragCoord.w;
float depthColor = 1.0 - smoothstep( near, far, depth );
vec4 texColor = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );
gl_FragColor = vec4( vec3(depthColor), texColor.a);
}
</script>
在这里,您已经为着色器提供了它所需的所有信息:摄影机的近/远范围、粒子的大小以及它需要映射的纹理
您可以看到一个。现在无法获得网格深度材质来考虑粒子系统的大小或纹理。但是,实现一个自定义着色器材质并不是太难。首先,需要顶点着色器和片段着色器
<script type="x-shader/x-vertex" id="vertexShader">
uniform float size;
void main() {
gl_PointSize = size;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position , 1.0 );
}
</script>
<script type = "x-shader/x-fragment" id="fragmentShader">
uniform sampler2D map;
uniform float near;
uniform float far;
void main() {
float depth = gl_FragCoord.z / gl_FragCoord.w;
float depthColor = 1.0 - smoothstep( near, far, depth );
vec4 texColor = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );
gl_FragColor = vec4( vec3(depthColor), texColor.a);
}
</script>
在这里,您已经为着色器提供了它所需的所有信息:摄影机的近/远范围、粒子的大小以及它需要映射的纹理
你可以看到一个。谢谢你,保罗。反应很好。事实上,我甚至不需要生成深度贴图,一旦我发现着色器中使用的深度信息在片段着色器gl_FragCoord.z/gl_FragCoord.w中可用,我就可以在一个过程中完成整个效果。谢谢,Paul。反应很好。实际上,我甚至不需要生成深度贴图,一旦我发现着色器中使用的深度信息在片段着色器gl_FragCoord.z/gl_FragCoord.w中可用,我就可以在一个过程中完成整个效果。