Загрузить плавающий массив с 3D текстурой?

#opengl #glsl #textures

#opengl #glsl #Текстуры

Вопрос:

у меня есть массив с плавающей точкой со значением интенсивности, мне нужно загрузить этот массив как 3d текстуру в opengl, а в шейдере фрагмента прочитать это как красный цвет ( float sample= texture(cord,volumeText).r ). размер массива равен 256*256*256 , а значение интенсивности находится в диапазоне от 0,0 до 256,0.

это пример значений интенсивности:

    75.839354473071637,     
   64.083049468866022,    
   65.253933716444365,     
   79.992431196592577,     
   84.411485976957096,     
   0.0000000000000000,     
   82.020319431382831,     
   76.808403454586994,     
   79.974774618246158,     
   0.0000000000000000,     
   91.127273013466336,     
   84.009956557448433,     
   90.221356094672814,     
   87.567422484025627,     
   71.940263118478072,     
   0.0000000000000000,     
   0.0000000000000000,     
   74.487058398181944,
   ..................,
   ..................
  

Комментарии:

1. Не совсем ясно, какие у вас требования к точности.

Ответ №1:

Для загрузки подобной текстуры вы можете использовать формат ввода GL_RED и тип GL_FLOAT . Внутренний формат надлежащего размера для is GL_R16F . Смотрите glTexImage3D :

 glTexImage3D(GL_TEXTURE_3D, 0, GL_R16F, 256, 256, 256, 0, GL_RED, GL_FLOAT, dataPtr)
  

Внутренний формат GL_R16F — это формат с плавающей запятой. Это означает, что когда вы считываете канал красного цвета ( .r ) из текстуры во фрагментном шейдере, значения все еще находятся в диапазоне [0.0, 256.0].