2013-03-26 5 views
1

THREE.js의 소재에서 FBO를 사용하려고합니다. 프레임 버퍼 객체에 최종 시각화를 출력하는 GPU 기반 유체 시뮬레이션이 있습니다.이 객체는 메쉬를 텍스처 처리하는 데 사용하고자합니다. 그때 간단한 THREE.ShaderMaterial를 사용하는 것을 시도하고있다THREE.js에있는 Shader Materials 및 GL 프레임 버퍼

varying vec2 vUv; 
uniform sampler2D tDiffuse; 

void main() { 

    gl_FragColor = texture2D(tDiffuse, vUv); 

} 

: 여기 내 간단한 조각 쉐이더의

var material = new THREE.ShaderMaterial({ 

    uniforms: { tDiffuse: { type: "t", value: outputFBO } }, 
    //other stuff... which shaders to use etc 
}); 

하지만 내 메쉬 그냥 콘솔에 오류없이이기는하지만, 블랙 나타납니다. 동일한 셰이더 및 셰이더 재질을 사용하지만 THREE.ImageUtils.loadTexture ("someImageOrOther")의 결과를 셰이더의 유니폼으로 제공하면 올바르게 렌더링되므로 문제는 내 FBO에 있다고 가정합니다. WebGL에서 FBO를 Texture2D로 변환하는 편리한 방법이 있습니까?

편집 :

좀 더 실험 후 문제가 아니라고 나타납니다. FBO를 다른 셰이더에 전달하면 텍스처를 화면에 출력 한 다음 잘 출력합니다. 조명/법선처럼 내 재료가 검은 색으로 나타날 수 있습니까?

편집 2 :

의 UV 및 법선 세에서 바로오고있다, 그래서 그것을 그렇게 될 수 있다고 생각하지 않습니다. 문제의 일부는 대부분의 쉐이더 오류가보고되지 않기 때문에 나는 그 점에서 어려움을 겪고 있다는 것입니다. 난 그냥 WebGLTexture를 매핑 할 수 있다면 어떻게 든 그 아마도이

var newMaterial = new THREE.MeshLambertMaterial({ map : outputFBO.texture }); 

처럼하지만 작동하지 않습니다 물론, 모든 것을 쉽게 만들 것입니다. WebGLTextures에서 직접 읽을 수있는 3 개의 문서를 찾을 수 없었습니다.

+1

. http://mrdoob.github.com/three.js/examples/webgl_rtt.html – WestLangley

+0

죄송합니다. 저를 오해 하셨다고 생각합니다. 나는 이미 텍스처 (사실상 텍스처를 포함하고있는 FBO)를 그리는 중이다. 나는 그것에 문제가 없다. 내가 지금하고있는 일은이 WebGLTexture를 사용하여 THREE.js의 메쉬를 텍스처링하는 것이다. – cdnza

+0

내가 언급 한 예제는 정확히 그렇게하고있다. WebGLRenderTarget에 렌더링하고 WebGLRenderTarget을 메쉬의 재질에 대한 텍스처로 사용합니다. – WestLangley

답변

0

것은 당신이 괜찮다면 (다음 __webglTexture_gl.createTexture();의 호출에 의해 덮어 쓰기 때문에) 그 초기화 코드가 실행되지 않도록

또한, true에 텍스처 개체의 __webglInit 데이터 멤버를 설정해야 할 수도 있습니다 Three.js를 데이터 구조를 사용하여, 여기 당신이 그것을 할 방법은 다음과 같습니다 "텍스처로 렌더링"라고

Three.js use framebuffer as texture