Загрузить массив float с 3D-текстурой? - PullRequest
1 голос
/ 28 марта 2019

У меня есть массив float со значением интенсивности, мне нужно загрузить этот массив как 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 Ответ

2 голосов
/ 28 марта 2019

Для загрузки такой текстуры вы можете использовать формат ввода GL_RED и набрать GL_FLOAT.Внутренний формат правильного размера для 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].

...