WebGL2에서 부동 소수점 텍스처를 가져 오려고합니다. 나는이 같은 텍스처를 초기화 :WebGL2의 부동 소수점 텍스처 선형 필터링
파이어 폭스 55.0.2 (64 비트)는 나에게 다음과 같은 오류를 제공에function textureFromFloat32Array(gl, arr, w, h){
//https://developer.mozilla.org/en-US/docs/Web/API/OES_texture_float_linear
gl.getExtension('OES_texture_float'); // just in case
gl.getExtension('OES_texture_float_linear'); // do I need this with WebGL2
const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
// see https://www.khronos.org/registry/webgl/specs/latest/2.0/#TEXTURE_TYPES_FORMATS_FROM_DOM_ELEMENTS_TABLE
gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, w, h, 0, gl.RED, gl.FLOAT, arr);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
//gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); // this works
//gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
return texture;
}
:
Error: WebGL warning: drawElements: Active texture 0 for target 0x0de1 is 'incomplete', and will be rendered as RGBA(0,0,0,1), as per the GLES 2.0.24 $3.8.2: Because minification or magnification filtering is not NEAREST or NEAREST_MIPMAP_NEAREST, and the texture's format must be "texture-filterable".
gl.NEAREST
와 그것을 작동하지만 난 선형 보간이 필요합니다.
Chorme 60.0.3112.101에서는 gl.getExtension('OES_texture_float_linear');
과 작동하지만 WebGL2
을 사용하면 그럴 필요가 없습니다.
감사합니다. 하지만 실제로 "렌더링 할 수 없다"는 것은 ... 그 텍스쳐로 무엇을 할 수 있습니까? PixelHader가 아닌 버텍스 쉐이더에서만 사용할 수 있다는 뜻입니까? 실제로 3 가지 용도로 사용하고 싶습니까? 1) 지형 높이지도 2) 3D 텍스처의 범위 지정 3) calcualtions 용 버퍼 (변환 피드백 또는 계산 쉐이더 사용). –
렌더링 할 수 없다는 것은 렌더링 할 수 없음을 의미합니다. 즉, 프레임 버퍼를 부착 할 수 없습니다. 필터링 할 수 없다는 것은 샘플러를 통해 간접적으로 필터링 할 수 없다는 것을 의미합니다. 샘플러가 NEAREST로 설정되어야 함을 의미합니다. 플로트 텍스처를 갖는 것은 필터링 할 수없는 경우에도 여전히 유용합니다. 좋은 예가 스키닝입니다. 매트릭스는 종종 유니폼에 적합 할 것보다 더 많이 필요하기 때문에 텍스처에 저장됩니다. 그들은 필터링 할 필요가 없습니다. 셰이더에서 수동으로 필터링 할 수도 있습니다 (텍스처를 여러 번 읽음, 합계 및 평균 결과). 물론 천천히 진행될 것입니다. – gman
그래서, 이것을 하이트 맵으로 사용할 수 있습니다. 가장 가까운 값으로 설정하면됩니다. 하이트 맵에서는 일반적으로 문제가되지 않습니다. 그것은 당신이 자신의 필터링을하지 않는 한 그것이 거칠 수있는 과정을 제외하고 당신이 raymarch에 그것을 사용할 수있는 것 같습니다. 기본적으로 필터링 할 수 있으므로 16 비트 부동 형식을 고려해야합니다. 계산 용 버퍼는'EXT_color_buffer_float'를 지원하지 않는 한 출력으로 사용하지 않고 입력으로 사용할 수 있습니다. 대부분의 데스크톱이 그렇습니다. 대부분의 휴대 전화/태블릿에서는 그렇지 않습니다. – gman