5

WebGL 2.0 を使用してブラウザで 3D 医療データをレンダリングしようとしています。

AFAIK 3D テクスチャが WebGL 2.0 でサポートされるようになりました。

texImage3D() は認識された関数呼び出しです。

フラグメント シェーダーを作成し、均一なサンプラーを宣言しています。

uniform sampler3D samp;

Firefox で実行すると、エラーが発生します。

キャッチされない例外: シェーダー コンパイル エラー: エラー: 0:19: 'sampler3D': 予約語の不正な使用 エラー: 0:19: 'sampler3D': 構文エラー

sampler2D を使用すると問題なく動作します (ただし、目的は解決しません)。

ここで何が間違っているのか、誰か教えてください。

sampler3D はまだサポートされていませんか? しかし、その場合、texImage3D() を使用してロードされたテクスチャはどのようにアクセスされるのでしょうか?

4

1 に答える 1

10

のような WebGL 2.0 機能を使用するために変更する必要があるすべてのものを変更しましたsampler3Dか?

使用sampler3Dするには、追加する必要があります

#version 300 es

シェーダーのトップへ。前に空白がない最初の行でなければなりません

GLSL 1.0 から GLSL 3.00 には他にも多くの変更があることに注意してください。

ここでテスト

"use strict";

const vs = `#version 300 es

in vec4 position;

void main() {
  gl_Position = position;
}
`;

const fs = `#version 300 es
precision mediump float;
precision lowp sampler3D;

uniform sampler3D u_someTexture;

out vec4 theColor;

void main() {
  theColor = texture(u_someTexture, vec3(0,0,0));
}
`;

function main() {
  var m4 = twgl.m4;
  var gl = twgl.getContext(document.createElement("canvas"));
  log("using: " + gl.getParameter(gl.VERSION));  
  if (!twgl.isWebGL2(gl)) {
    log("Sorry, this example requires WebGL 2.0");  
    return;
  }

  var programInfo = twgl.createProgramInfo(gl, [vs, fs], (err) => {
    log("could not compile shader: " + err);
  });
  if (programInfo) {
    log("compiled shader with sampler3D");
  }

}
main();

function log() {
  var elem = document.createElement("pre");
  elem.appendChild(document.createTextNode(Array.prototype.join.call(arguments, " ")));
  document.body.appendChild(elem);
}
<script src="https://twgljs.org/dist/twgl-full.min.js"></script>

于 2016-05-31T14:44:15.547 に答える