OPENGL как использовать функцию glTexImage3D

следующий код используется для рисования океана, я пытался преобразовать его в код С#, но мне это не удалось, потому что я не понимал, что делают 3D-функции, поэтому мне нужно некоторое объяснение этих функций (имею в виду 3D-текстуру)...

int res = 64;
int nr = res / 2;
int nv = res * 2;
int nb = res / 2;
int na = 8;
f = fopen("E:\\New folder\\ConsoleApplication1\\Debug\\data\\inscatter.raw", "rb");
data = new float[nr*nv*nb*na*4];
fread(data, 1, nr*nv*nb*na*4*sizeof(float), f);
fclose(f);
glActiveTexture(GL_TEXTURE0 + INSCATTER_UNIT);
glGenTextures(1, &inscatterTex);
glBindTexture(GL_TEXTURE_3D, inscatterTex);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA16F_ARB, na*nb, nv, nr, 0, GL_RGBA, GL_FLOAT, data);
delete[] data;

person Tarek    schedule 14.05.2013    source источник


Ответы (1)


3D-текстуры — это объемные изображения, т. е. своего рода прямоугольные параллелепипеды, заполненные вокселами цвета. Итак, вместо изображения width × height · color_channels у вас есть изображение width × height × depth · color_channels.

Это анимация, показывающая объемное изображение (предоставлено исследовательской рабочей группой, членом которой я являюсь): http://www.bmo.physik.uni-muenchen.de/~z19/OCTanimation.gif (к сожалению, StackOverflow не позволяет связывать анимированные GIF-файлы).

Я видел это сб. else был о рендеринге океана в другом посте. Имейте в виду, что это чрезвычайно нетривиальная тема, требующая очень сложных алгоритмов. Использование 3D-текстуры, называемой «inscatter», предполагает, что любой код, который вы искали, реализует одну из тех сложных моделей, где 3D-текстура используется в качестве таблицы поиска терминов рассеяния.

Обратите внимание, что без глубокого понимания OpenGL и численных методов реализация средства визуализации океана практически невозможна. Я бы начал с понимания основ.

person datenwolf    schedule 14.05.2013