2014-10-11 3 views
2

바이너리 SocketIO 채널을 통해 스트리밍되는 카메라 이미지와 함께 브라우저 컨텍스트 내에서 작업하고 있습니다.WebGL 쉐이더에 데이터 스트리밍

아래와 같이 I은 단지 (매우 큰 바이트 배열로) bayer 형식의 데이터를 출력 지원을 처리하고 카메라 :

bayer format

내가 실시간으로 카메라 영상 스트림을 표시 할 시간은 브라우저의 캔버스에 있습니다.

지금까지 내 생각으로는 WebGL을 렌더러 (속도 용)로 사용하고 프레젠테이션 셰이더 내에서 바이어에서 RGBA로 conversion을 수행하는 것입니다.

나는 WebGL에 상당히 익숙하지 않기 때문에 변환되지 않은 카메라 이미지를 GPU로 보내고 액세스하여 변환을 수행하고 조각을 그늘지게 할 수있는 관례와 모범 사례에 대해 확신 할 수 없습니다.

texture2d와 같은 텍스처 샘플러를 통해 텍스처로 보내고 액세스하는 일반적인 기술이있는 것처럼 보입니까? 그러나 이것은 RGBA 형식을 가정 한 것으로 보입니다. 베이어 형식이 완전히 다른 구조이고 원시 바이트 배열에 액세스하는 것이 더 유용 할 것입니다.

올바른 방향으로 향하면 충분합니다. 진짜 질문은 '입니다. GPU에 임의의 데이터를 보내고 WebGL 컨텍스트에서 액세스하려면 어떻게해야합니까? '

편집 : ThreeJS와 같은 라이브러리를 사용하는 것보다 원시 WebGL 기술을 알고 싶습니다. ThreeJS에서 특히 쉽게 구현할 수 있지만 가능성이 있습니다.

답변

0

누군가에게 WebGL을 가르쳐달라고하는 것 같습니다. 그것은 큰 주제이고 StackOverflow 질문에는 너무 큽니다. 귀하의 질문이 너무 광범위하기 때문에 닫히지 않는다면 나는 놀라지 않을 것입니다.

http://webglfundamentals.org 또는 http://learningwebgl.org 또는 다른 많은 사이트 중 하나를 읽으십시오.

WebGL을 배운 다음 카메라 데이터를 WebGL에 가져 오는 방법은 gl.texImage2D 또는 gl.texSubImage2D을 호출하는 것입니다. 거의 모든 사람들이 카메라 데이터를 소켓에서 가져 오지 않고 브라우저에서 가져올지라도 WebGL에 카메라 데이터를 전달하는 웹의 예가 많이 있습니다. 그러나 기본적인 수준에서 그것은 다르지 않습니다. 데이터를 Uint8Array과 같은 TypedArray로 가져오고 gl.texImage2D을 호출하여 해당 데이터를 텍스처로 복사하십시오.

+0

안녕하세요, 저는이 자습서를 작성했으며 매우 편합니다. 네가 내 질문을 오해 한 것 같아. 텍스처를로드하는 것은 문제가 아니며 문제가되는 '임의적 인 성격'의 데이터를로드하는 것입니다. 이 경우의 '텍스처'는 rgba가 아니므로 표준 texture2D() 샘플러 메서드 (vec4를 반환)와는 잘 맞지 않습니다. WebGL을 처음 접해서 컨벤션을 알지 못하지만 자습서를 찾지 않습니다. –

+0

@BrendanAnnable 셰이더에서 변환해야합니다. 전환 기준으로 가장 편한 형식을 선택하십시오. 또한 픽셀 중심에서 샘플링하고 동적 배열 인덱스 액세스가 없습니다. https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml – Winchestro

+0

@Winchestro 지금까지 읽은 논문과 예제는 GL_LUMINANCE를 'kind of'처럼 사용합니다. 간단한 배열처럼 작동합니다. 당신은 texture2D()를 사용합니다 .r - 이것은 해킹처럼 보이지만 다른 방법이 없다면 그렇게해야합니다. –