renderização de volume (usando glsl) com algoritmo de conversão de raios

Estou aprendendo a renderização de volume usando o algoritmo de conversão de raios. Encontrei uma boa demonstração e orientação emaqu. mas o problema é que eu tenho uma placa gráfica ATI em vez da nVidia, o que me impede de usar o cg shader na demonstração, por isso quero mudar o cg shader para glsl shader. Passei pelo livro vermelho (edição 7) do OpenGL, mas não estou familiarizado com glsl e cg. alguém pode me ajudar a mudar o cg shader na demo para glsl? ou existe algum material para a demonstração mais simples da renderização de volume usando a projeção de raios (é claro no glsl).aqu é o sombreador cg da demonstração. e pode funcionar na placa gráfica nVidia do meu amigo. o que mais me confunde é que não sei traduzir a parte de entrada do cg para o glsl, por exemplo:

struct vertex_fragment
 {
   float4 Position    : POSITION; // For the rasterizer
   float4 TexCoord    : TEXCOORD0; 
   float4 Color       : TEXCOORD1;
   float4 Pos         : TEXCOORD2;
 };

além do mais, eu posso escrever um programa vincular 2 objetos de textura com 2 unidades de textura ao shader, desde que atribua dois texcoord ao desenhar a tela, por exemplo

glMultiTexCoord2f(GL_TEXTURE0, 1.0, 0.0);

glMultiTexCoord2f(GL_TEXTURE1, 1.0, 0.0);

Na demonstração, o programa será vinculado a duas texturas (uma 2D parabackface_buffer um 3D paravolume texture), mas com apenas uma unidade de textura comoglMultiTexCoord3f(GL_TEXTURE1, x, y, z); Eu acho que oGL_TEXTURE1 é para a textura do volume, mas qual (unidade de textura) é para obackface_buffer? Até onde eu sei, para vincular obj de textura em um shader, preciso obter uma unidade de textura para vincular, por exemplo:

glLinkProgram(p);   
texloc = glGetUniformLocation(p, "tex");
volume_texloc = glGetUniformLocation(p, "volume_tex");
stepsizeloc = glGetUniformLocation(p, "stepsize");
glUseProgram(p);
glUniform1i(texloc, 0); 
glUniform1i(volume_texloc, 1); 
glUniform1f(stepsizeloc, stepsize);
  //When rendering an object with this program.
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, backface_buffer);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_3D, volume_texture);

programa é compilado corretamente e está ok. mas só obtive -1 de todos os três locais (texloc, volume_texloc e stepsizeloc). Eu sei que pode ser otimizado. alguém pode me ajudar a traduzir o cg shader para glsl shader?

Editar Se você tem interesse na implementação moderna da API OpenGL (código fonte C ++) com glsl: Volume_Rendering_Using_GLSL

questionAnswers(2)

yourAnswerToTheQuestion