2012-07-06 53 views
1

首先,我是glsl和Three.js的初學者:)。僅對某些3D對象應用後期處理效果

這裏是我的頂點和shader1的片段着色器(很簡單):

void main() { 

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

void main() { 
gl_FragColor = vec4(1.0,0.0,0.0,1.0); 
} 

在我的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); 

在我的功能渲染():

Renderer.clear() ; 
composer.render(); 

但最後我所有的屏幕都不是紅色的,而是我的立方體。怎麼了 ?

謝謝。

+0

我忘了打招呼:) – user1482030 2012-07-06 10:22:27

回答

1

我不知道Three.js,但是您安裝着色器的方式看起來像是用作全屏幕後處理效果,而不是應用於您的幾何體 - 並且由於您無條件地將輸出像素紅色,整個屏幕是紅色的。您需要使用其他一些操作來告訴Three.js您希望將着色器用於渲染立方體(或場景中的所有幾何體)。

0

要將後處理着色器應用於特定的屏幕區域或對象,您需要使用模具(OpenGL術語)。

這是一個有點複雜的話題,所以我建議你在通用的OpenGL教程中閱讀它們或者研究現有的Three.js模板。

我覺得這個例子做了相關的東西:

http://mrdoob.github.com/three.js/examples/webgl_postprocessing.html

+0

這個例子不使用模具。它甚至沒有指定renderTarget。 – zakdances 2014-01-05 00:31:10