2

以下の行で初期化する 3D ボリューム テクスチャがあります。

glTexImage3D(GL_TEXTURE_3D, 0, GL_RED, numX, numY, numZ, 0, GL_RED, GL_UNSIGNED_BYTE, voldata);

フラグメントシェーダで、このテクスチャの値を読みたいのですが、関数で読み込めませんtexture3d()

以下の行は、フラグメント シェーダーでコンパイル エラーを返します: (texture3d に一致するオーバーロードはありません)

float value = texture3d(VolumeTexture,vec3(0.2f,0.2f,0.2f);

sampler3d からデータを取得するにはどうすればよいですか?

OpenGLPart :

unsigned int texture;   
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_3D, texture);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RED, numX, numY, numZ, 0, GL_RED, GL_UNSIGNED_BYTE, voldata);
free(voldata ); //free the texture
                ...
    display()
    {
                  ....
       glActiveTexture(GL_TEXTURE0);    
       int texture_location = glGetUniformLocation(shader.id(), "VolumeTexture");  
       glUniform1i(texture_location, 0);  
       glBindTexture(GL_TEXTURE_3D,volumetext);
                  ....
    }                

私のフラグメントシェーダー:

    uniform sampler3D VolumeTexture;
    void main()
    {
        float value = 0;
                ...
        value = texture3d(VolumeTexture,vec3(0.2f,0.2f,0.2f);
                ...
    gl_FragColor = IntersectRay(ray);
    }

注:私のOpenGLバージョンは3.3です

4

3 に答える 3

5

コメントを適切な回答に移動..

シェーダーをロード、コンパイル、およびリンクするときは、常に (例外なく) 適切なエラー チェックを実行します。長期的には、多くの時間を節約できます。これは、外部プログラムでシェーダーを検証する場合にも当てはまります。

  • を呼び出した後、 as パラメータを使用しglCompileShader(..)て呼び出してコンパイル ステータスを取得します。glGetShaderiv(..)GL_COMPILE_STATUS
  • 戻り値が 0 の場合、何か問題が発生しています
  • glGetShaderiv(..)parameterを使用して長さを照会して情報ログを取得しますGL_INFO_LOG_LENGTH
  • 次に、ログを取得しますglGetShaderInfoLog

これは、シェーダー タイプ (頂点、フラグメント、ジオなど) ごとに行う必要があります。

さらに、 andをパラメーターとしてglLinkProgram()使用した後、リンクの状態を確認する必要があります。glGetProgramiv()GL_LINK_STATUS

0(19) : error C1008: undefined variable "texture3d"問題を追跡するのに何時間も費やす必要がないなどのエラーがすぐに表示されます。

于 2013-06-14T00:47:12.610 に答える
4

関数で読めませんtexture3d()

試してみてくださいtexture3D()。首都に注意してくださいD

于 2013-06-13T17:13:44.953 に答える