websocketサーバを使用して互いに通信する2つのhtmlクライアントを作成しました。あるクライアントがThree.jsを使用してキャンバスに3Dモデルを描画し、WebGlであるキャンバスコンテキストをバイナリデータとしてwebsocketサーバと考えられる他のクライアントに送信します。gl.readPixelsを使用せずにwebglコンテキストをバイナリデータとして送信する別の方法
問題は、readPixels()メソッドが遅すぎることです。私はこの流れを可能な限り流動的にする必要があります。
function animate() {
requestAnimationFrame(animate);
render();
var ctx = renderer.getContext();
var byteArray = new Uint8Array(1280 * 720 * 4);
ctx.readPixels(0,0,1280, 720, ctx.RGBA, ctx.UNSIGNED_BYTE, byteArray);
socket.send(byteArray.buffer);
}
レンダラはTHREE.WebGLRendererです。
提案がありますか?
編集:ここでは
は、その画像を得るための信頼できる方法私は3Dあなたは画像データをつかむためにcanvas.toDataURL("image/jpg");
(またはpng
)を使用して試みることができるlink
readPixelsは何に比べて遅すぎますか?データ転送ははるかに遅くなければならないのですか? –
context.getImageData()。dataを使用するのに比べて遅すぎますが、残念ながら2Dコンテキストでしか動作しません。 – Patricia
いくつかの有用な情報https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#General_performance_tips – rafaelcastrocouto