Значения высоты воды хранятся в текстуре, которая является частью цели рендеринга, поэтому вы можете использовать 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.
Мерси Beaucoup. Очень любезно поделиться этим квалифицированным опытом. Я буду работать в этом направлении. Большое спасибо. – user2758635
Мне удалось реализовать как рекомендацию, и она работает хорошо. Тем не менее, я борюсь с упаковкой float/v4, потому что текстура включает в себя поплавки высоты, которые могут быть <0 and > 1, а float упаковки webgl для v4 работают для данных rgb (между 0 - 1) ./ Поэтому я применяю некоторое квантование к высоте до получить 0-1 float, но я думаю, что должно быть возможно упаковать поплавок, как есть ... Я вернусь, когда закончится. – user2758635