2016-09-09 22 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に関連するコードを使用して他の表現に量子化する必要があります。

擬似コードで

+0

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

+0

私はあなたのおすすめとして実装することができ、それはうまく動作します。しかし、テクスチャには<0 and >とすることが可能で、テクスチャにはrgbデータ(0〜1の間)のためのv4が動作するwebglパッキング浮動小数点が含まれているので、私はパッキングfloat/v4で苦労しています。 0-1浮動小数点数を取得しますが、私はそれがフロートをパックすることが可能でなければならないと思います...完了したら私は戻ってきます。 – user2758635

関連する問題