glslシェーダーに奇妙な問題があります。何もレンダリングせず(たとえば、黒い画面)、glDrawElementsにGL_INVALID_OPERATIONをキャストさせます。使用中のシェーダーを以下に示します。v = texture3D(texVol、pos).rで行をコメントアウトすると、そしてそれをv=0.4に置き換えます。期待されるもの(オレンジのような色)を出力し、glエラーは生成されません。
uniform sampler2D texBack;
uniform sampler3D texVol;
uniform vec3 texSize;
uniform vec2 winSize;
uniform float iso;
varying vec3 inCoords;
vec4 raytrace(in vec3 entryPoint,in vec3 exitPoint){
vec3 dir = exitPoint - entryPoint;
vec3 pos = entryPoint;
vec4 color = vec4(0.0,0.0,0.0,0.0);
int steps = int(2.0*length(texSize));
dir = dir * (1.0/steps);
vec3 n;
float v,m=0.0,avg=0.0,avg2=0.0;
for(int i = 0;i<steps || i < 2500;i++){
v = texture3D(texVol,pos).r;
m = max(v,m);
avg += v;
pos += dir;
}
return vec4(avg/steps,m,0,1);
}
void main()
{
vec2 texCoord = gl_FragCoord.xy/winSize;
vec3 exitPoint = texture2D(texBack,texCoord).xyz;
gl_FragColor = raytrace(inCoords,exitPoint);
}
光線のエントリおよび存在ポイントとしてカラーキューブをレンダリングするためにVBOを使用しています。それらはFBOに保存されており、画面に直接レンダリングすると問題ないように見えます。glBegin / glEndに変更して、四角形で立方体を描画しようとしましたが、同じエラーが発生します。私は自分が間違っていることを見つけることができません、そして今私はあなたの助けが必要です。texture3DがGL_INVALID_OPERATIONを生成するのはなぜですか?
注:2Dテクスチャと3Dテクスチャの両方を有効にしました。
編集:
- プロジェクト全体をgithubにアップロードしました。その他のコードについては、https://github.com/r-englund/rGraphicsLibraryを参照してください
- これは、IntelHD3000とNvidiaGT550mの両方でテストされています