Настраиваемое наложение текстур для OpenGl через Glut - PullRequest
0 голосов
/ 31 мая 2011

Я пытаюсь создать пользовательские файлы моделей и текстур, которые легко загружать и использовать.В основном файлы представляют собой списки с плавающей точкой, представляющие значения XYZ и RGB.Например: 0,5 0,234 0,1 ... ...

Проблема в том, что я не могу заставить мой массив с плавающей точкой работать на текстуру.Вот как я определяю свой массив:

float* textureMap;

Вот как я его инициализирую:

const int SIZE = (128*128*3);

textureMap = (float*)malloc(sizeof(textureMap)*SIZE);

for (int i =0; i<SIZE; i++) { textureMap[i] = 0.0f; }

Теперь, используя Glut, я создал окно, которое позволяет мне рисовать и заполнять массив данными, и, как вы можете видеть, все значения RGB были инициализированы в 0.0fтак что я бы по крайней мере ожидал увидеть мой объект черным, но он просто остается серым цветом по умолчанию и никогда не станет таким же, как в моем массиве текстур.

Вот мой вызов для создания текстуры:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 130, 130, 0, GL_RGB, GL_FLOAT, textureMap);

Я установил ширину и высоту 2 ^ n + 2 согласно рекомендациям на официальной веб-странице OpenGl, хотя я не уверен, что это правильно, учитывая то, как я пытаюсь построить своймассив с плавающей точкой.

Я также попытался вызвать glGetError () безуспешно (то есть, никаких ошибок не было, и я гарантировал, что могу генерировать ошибки, установив ширину и высоту в -1).

Я убедился, что привязываю текстуру перед моим вызовом.o glBegin () и даже проверил эти вызовы на наличие ошибок, но безрезультатно.

Есть предложения / указатели?Кто-нибудь еще пытался определить свои собственные форматы текстур раньше?

Кстати, я сейчас использую квадраты вместо треугольников, это нормально, верно?

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Во-первых, убедитесь, что вы включили отображение текстур, вызвав glEnable(GL_TEXTURE_2D) перед рендерингом (я полагаю, что вы не используете шейдеры в данный момент, в противном случае ищите там ошибки).

Во-вторых, создание текстуры размером 130x130 и заполнение ее данными размером 128x128, безусловно, неправильно. Похоже, вы неправильно поняли эти рекомендации (возможно, они что-то говорили о границе текстуры, но в вашем примере у вас нет границы, поэтому с разрешением 128x128 все должно быть в порядке).

0 голосов
/ 11 июня 2011

РЕШИТЬ! Проблема была в том, что мне нужно было вызвать glTexImage2D(...) в той же функции, которая рисует полигоны (дох!). То, что я делал, было, когда моя текстура редактировалась в окне рисования, я вызывал glTexImage2D(...) в той же функции, а затем велел обновлять 3D окно, используя glutPostWindowRedisplay(...).

Как ни странно, вызов glTexImage2D(...) в функции init также работает, но только в первый раз по понятным причинам.

Спасибо всем!

...