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 개의 문서를 찾을 수 없었습니다.
. http://mrdoob.github.com/three.js/examples/webgl_rtt.html – WestLangley
죄송합니다. 저를 오해 하셨다고 생각합니다. 나는 이미 텍스처 (사실상 텍스처를 포함하고있는 FBO)를 그리는 중이다. 나는 그것에 문제가 없다. 내가 지금하고있는 일은이 WebGLTexture를 사용하여 THREE.js의 메쉬를 텍스처링하는 것이다. – cdnza
내가 언급 한 예제는 정확히 그렇게하고있다. WebGLRenderTarget에 렌더링하고 WebGLRenderTarget을 메쉬의 재질에 대한 텍스처로 사용합니다. – WestLangley