У меня проблема с 3D-текстурой в OpenGL.
Я установил текстуру через
glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, 640, 480, 8, 0, GL_RED, GL_UNSIGNED_BYTE, tex3Ddata);
с tex3Ddata всего 8 срезов 640x480 битовых карт. Теперь, когда я пытаюсь получить доступ к различным фрагментам с координатами текстуры, изображения почему-то смешиваются друг с другом, поэтому я не могу правильно установить координаты, но я не знаю, почему. Сами фрагменты текстуры 8-битные монохромные.
Код для отображения:
for(unsigned int i = 0; i < g_numCameras; i++) {
float tx = ((float)i) / ((float)g_numCameras - 1);
//tx = 0.5f; //this is for testing only
float fI = ((float)i) / ((float)g_numCameras);
if( i < (g_numCameras >> 1)) {
glTexCoord3f(0.0f, 1.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, 0.0f, 0.5f);
glTexCoord3f(1.0f, 1.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, 0.0f, 0.5f);
glTexCoord3f(1.0f, 0.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, 1.0f, 0.5f);
glTexCoord3f(0.0f, 0.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, 1.0f, 0.5f);
}
else {
fI -= 0.5f;
glTexCoord3f(0.0f, 1.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, -1.0f, 0.5f);
glTexCoord3f(1.0f, 1.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, -1.0f, 0.5f);
glTexCoord3f(1.0f, 0.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, 0.0f, 0.5f);
glTexCoord3f(0.0f, 0.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, 0.0f, 0.5f);
}
}
g_numCameras равно 8, поэтому я ожидаю, что срезы будут доступны через Z-координаты 0.0f, 1/7, 2/7, ..., 1.0f. Все же это всегда интерполируется. Я тестировал с tx = 0.5f; также, но это также смесь изображений. Координаты x / y работают должным образом, и 8 квадов расположены так, как и ожидалось, просто разрезание куба не работает так, как я ожидал.
Есть идеи, что я здесь делаю не так? (Я не смог найти эквивалентный ответ / пример по 3D текстурам).
Я также проверил правильность данных, загрузив 8 раз одно и то же изображение, и это работало просто отлично (поскольку интерполяция приведет к исходному изображению, я получил исходное изображение там).