Glsl 仅对某些三维对象应用后处理效果

Glsl 仅对某些三维对象应用后处理效果,glsl,webgl,three.js,Glsl,Webgl,Three.js,首先,我是glsl和Three.js的初学者:) 以下是shader1的顶点和片段着色器(非常简单): void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4( position,1.0); } void main() { gl_FragColor = vec4(1.0,0.0,0.0,1.0); } 在my init()函数中有: var geometry

首先,我是glsl和Three.js的初学者:)

以下是shader1的顶点和片段着色器(非常简单):

 void main() {

    gl_Position = projectionMatrix * modelViewMatrix * vec4( position,1.0);             
}       

void main() {
gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
在my init()函数中有:

var geometry = new THREE.CubeGeometry(2, 2, 2);
var material = new THREE.MeshLambertMaterial({color: 0xffaaff});
cube = new THREE.Mesh(geometry, material);
scene.add(cube);

var effect1 = new THREE.ShaderPass(THREE.ShaderExtras[ "shader1" ]);
effect1.renderToScreen=true;
composer = new THREE.EffectComposer( renderer);
composer.addPass(renderScene);
composer.addPass(effect1);
在我的函数render()中:

但在最后,我所有的屏幕都是红色的,不仅仅是我的立方体。怎么了


谢谢。

我不知道Three.js,但是您安装着色器的方式看起来像是用作全屏后处理效果,而不是应用于几何体-并且由于您无条件地将输出像素设为红色,因此整个屏幕都是红色的。您需要使用其他操作来告诉Three.js您希望使用着色器渲染立方体(或场景中的所有几何体)。

我不知道Three.js,但您安装着色器的方式看起来像是用作全屏后处理效果,不适用于您的几何体-并且由于您无条件地使输出像素为红色,因此整个屏幕为红色。您需要使用其他一些操作来告诉Three.js您希望着色器用于渲染立方体(或场景中的所有几何体)。

要将后处理着色器应用于某些屏幕区域或对象,您需要使用模具(OpenGL术语)

这是一个有点复杂的主题,所以我建议您要么在通用OpenGL教程中阅读关于它们的内容,要么研究现有的制作模具的Three.js示例

我认为这个例子做了一些相关的事情:


要将后处理着色器应用于某些屏幕区域或对象,需要使用模具(OpenGL术语)

这是一个有点复杂的主题,所以我建议您要么在通用OpenGL教程中阅读关于它们的内容,要么研究现有的制作模具的Three.js示例

我认为这个例子做了一些相关的事情:


我忘了打招呼:)我忘了打招呼:)那个例子不使用模具。它甚至没有指定渲染目标。该示例不使用模具。它甚至没有指定渲染目标。
Renderer.clear() ;
composer.render();