Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
three.js水面跟随对象_Three.js_Webgl_Shader - Fatal编程技术网

three.js水面跟随对象

three.js水面跟随对象,three.js,webgl,shader,Three.js,Webgl,Shader,我正在使用并希望在曲面上放置一个对象,该对象跟随该曲面,这意味着与对象所在点上的顶点位移同步 我不知道如何得到水面坐标x,y的当前高度。我猜图像是在着色器中计算的,无法访问变形水面的中间值。有人能帮忙吗?水的高度值存储在作为渲染目标一部分的纹理中,因此您可以使用renderer.readRenderTargetPixels(renderTarget,x,y,width,height,buffer)提取特定点的水高度 不幸的是,该纹理是浮点纹理,无法将WebGL中的浮点纹理直接读取到JavaScr

我正在使用并希望在曲面上放置一个对象,该对象跟随该曲面,这意味着与对象所在点上的顶点位移同步


我不知道如何得到水面坐标x,y的当前高度。我猜图像是在着色器中计算的,无法访问变形水面的中间值。有人能帮忙吗?

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

不幸的是,该纹理是浮点纹理,无法将WebGL中的浮点纹理直接读取到JavaScript中

您需要做的是将浮点纹理渲染为非浮点RGBA 8位纹理/渲染目标,同时使用与此相关的代码将其量化为其他表示形式

伪码

// 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.

谢谢你。很高兴能与大家分享这方面的专业知识。我会朝这个方向努力。非常感谢。我按照你的建议设法实施了,效果很好。然而,我正在与包装浮动/v4斗争,因为纹理包括高度浮动,可以是1,webgl包装浮动到v4适用于rgb数据(介于0-1之间)。/因此,我对高度进行了一些量化,以获得0-1浮动,但我认为应该可以按原样包装浮动。。。做完后我会回来的。