2016-09-09 2 views
2

저는 "threejs-examples-webgl-gpgpu_water"을 사용하고 있습니다.이 물체의 표면에 물체를 놓고 싶습니다. 물체가있는 점의 꼭지점 변위와 동기화되는 것을 의미합니다.three.js 물체 따라가는 물체

현재 수면에서 좌표 x, y의 현재 높이를 얻는 방법을 찾을 수 없습니다. 나는 이미지가 쉐이더에서 계산되고 변형 된 수면의 중간 값에 접근 할 수 없다고 생각한다. 누군가 도울 수 있습니까?

답변

1

물의 높이 값은 렌더 타겟의 일부인 텍스처에 저장되므로 renderer.readRenderTargetPixels (renderTarget, x, y, width, height, buffer)을 사용하여 특정 지점에서 물 높이를 빼낼 수 있습니다.

불행히도이 텍스처는 부동 소수점 텍스처이므로 WebGL의 부동 소수점 텍스처를 JavaScript로 직접 읽을 수있는 방법이 없습니다.

부동 소수점 텍스처를 비 부동 소수점 RGBA 8 비트 텍스처/렌더링 타겟으로 렌더링하고 this과 관련된 코드를 사용하여 다른 표현으로 양자화해야합니다. 의사 코드

// at init time 

.. make rendertarget with RGBA,UNSIGNED_BYTE texture 

// at render time 

.. render `gpuCompute.getCurrentRenderTarget(heightmapVariable).texture;` 
.. into your render target using a shader that converts the 
.. floating point height values in RGBA like the example above 

// read out a pixel from your render target 
var heightData = new Uint8Array(4); 
var x = ... // compute which pixel you need to read 
var y = ... // to get the height you want 
var width = 1 
var height = 1; 
renderer.readRenderTargetPixels (renderTarget, x, y, width, height, heightData); 

.. convert heightData back into a height value. 
+0

메르의 하셔에서

. 이 숙련 된 전문 지식을 공유하는 것은 매우 친절합니다. 나는이 방향으로 일할 것이다. 고마워. – user2758635

+0

나는 당신의 recommand로 구현할 수 있었고 잘 작동했다. 그러나 텍스처가 0,0 1 사이의 rgb 데이터에 대한 <0 and > 1 및 webgl 패킹 플로트 일 수있는 높이 수레가 포함되어 있기 때문에 포장 float/v4 고군분투 해요 ./ 그래서 몇 가지 quantizing을 높이 적용 0-1 float을 얻지 만 플로트를 그대로 포장 할 수 있어야한다고 생각합니다. 끝나면 돌아올 것입니다. – user2758635