我试图让阴影在Three.js中的自定义着色器中工作.我试图将这些添加到我的代码中:
制服:
THREE.UniformsLib["shadowmap"]
Run Code Online (Sandbox Code Playgroud)
在片段着色器中:
THREE.ShaderChunk["shadowmap_pars_fragment"]
THREE.ShaderChunk["shadowmap_fragment"]
Run Code Online (Sandbox Code Playgroud)
在顶点着色器中:
THREE.ShaderChunk["shadowmap_pars_vertex"]
THREE.ShaderChunk["shadowmap_vertex"]
Run Code Online (Sandbox Code Playgroud)
哪个有效.对象可以接收阴影.
但是,它无法投射阴影.有谁知道还需要其他代码?
我有一个 GLSL 着色器,它从输入纹理的通道之一(例如 R)读取数据,然后写入输出纹理中的同一通道。该通道必须由用户选择。
我现在能想到的是只使用 int 制服和大量的 if 语句:
uniform sampler2D uTexture;
uniform int uChannelId;
varying vec2 vUv;
void main() {
//read in data from texture
vec4 t = texture2D(uTexture, vUv);
float data;
if (uChannelId == 0) {
data = t.r;
} else if (uChannelId == 1) {
data = t.g;
} else if (uChannelId == 2) {
data = t.b;
} else {
data = t.a;
}
//process the data...
float result = data * 2; //for example
//write …Run Code Online (Sandbox Code Playgroud)