#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].