2016-09-09 79 views

回答

1

水的高度值存储在作为渲染目标的一部分的纹理中,因此您可以使用renderer.readRenderTargetPixels (renderTarget, x, y, width, height, buffer)来拉出特定点处的水的高度。

不幸的是,纹理是一个浮点纹理,没有办法直接读取WebGL中的浮点纹理到JavaScript中。

您需要做的是将该浮点纹理渲染为非浮点RGBA 8位纹理/ rendertarget,同时使用与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

的Merci beaucoup。分享这种熟练的专业知识是非常善良的。我会朝这个方向努力。非常感谢。 – user2758635

+0

我设法按照您的建议实施,并且效果良好。然而,我正在用包装浮动/ v4挣扎,因为纹理包括高度漂浮可以是<0 and > 1和webgl包装浮动到v4适用于rgb数据(在0 - 1之间)./因此,我将一些量化到高度得到一个0-1浮球,但我认为应该有可能将浮球打包好......我会在完成后回来。 – user2758635