1

ジオメトリ シェーダー内の 3D テクスチャから読み取ろうとしています。

#version 150

layout(points) in; // origo of cell
layout(points, max_vertices = 1) out;

uniform sampler3D text;

void main (void) 
{   
    for(int i = 0; i < gl_in.length(); ++i)
    {
        // texture coordinates:
        float u, v, w;

        // set u, v, and w somehow
        ...

        float value = texture(text, vec3(u, v, w)).r;

        bool show;

        // set show based on value somehow:
        ...

        if(show) {      
            gl_Position = gl_in[i].gl_Position;
            EmitVertex();
            EndPrimitive();  
        }  
    }
}

これは、初期化 GL コード内でテクスチャを設定する方法です。

int nx = 101;
int ny = 101;
int nz = 101;
float *data = new float[nx*ny*nz];
// set data[] somehow:
...
glEnable(GL_TEXTURE_3D);
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 );
glTexImage3D( GL_TEXTURE_3D, 
                  0,      // level-of-detail number. 0 is the base image level.
             GL_RED, // internal format
         nx, ny, nz,
                  0,      // border
             GL_RED, // pixel format 
           GL_FLOAT,  // data type of the pixel data 
               data);

しかし、ジオメトリ シェーダー内のサンプラーの「テキスト」をテクスチャに関連付けるにはどうすればよいでしょうか?

これまでのところ、「テキスト」という名前のサンプラーがあり、テクスチャをサンプリングすることを OpenGL に伝えていません。

編集:私は次のことを試しました:

GLint textLoc = glGetUniformLocation(program, "text");
glUniform1i(textLoc, 0); // sends 0 to "text" in shader
// why do I not just hardcode 0 inside the geometry shader instead ? 
glBindTexture(GL_TEXTURE_3D , texture); 
glActiveTexture(GL_TEXTURE0); // same as 0 ?
GLuint sampler_state = 0;
glGenSamplers(1, &sampler_state);
glBindSampler(0, sampler_state); // what does this do?

ここで何が問題なのですか?

4

0 に答える 0