Войти
ПрограммированиеФорумГрафика

OpenGL и *.dds

Страницы: 1 2 Следующая »
#0
19:38, 5 июля 2006

Bсем привет!
Я вывожу *.dds в ОpenGL, но из-за того что OpenGL начинает отсчет от левого нижнего угла, а DirectX от верхнего левого угла(а dds это ж директовская фишка) у меня изображения перевернутые получаются. Подскажите пожалуйста как их вернуть в нормальный вид. Там кажется надо как-то хитро текстурные координаты переприсвоить или как?

#1
20:33, 5 июля 2006

учше перевернуть саму текстуру во время загрузки, меняй строки в обратном порядке

#2
21:38, 5 июля 2006

В смысле "меняй строки в обратном порядке" ?

#3
23:03, 5 июля 2006

оно compressed, там не особо то поменяешь...
варианта два - инвертировать t-координату (т.е. вместо t будет 1 - t) (можно при экспорте моделек), либо выставлять соответствующую текстурную матрицу (смотреть доки к glMatrixMode(GL_TEXTURE))

#4
13:29, 6 июля 2006

beetle2001
Загрузил картинку в системную память, повернул её как надо, после этого зафигачил в видеопамять... В чём проблема та?

keltar
>оно compressed, там не особо то поменяешь...

То есть? А каким макаром сжатая текстура опенглу скармливается?

#5
15:05, 6 июля 2006

glCompressedTexImage2D

у dds в том и прикол, что загружать быстро - не надо тратить время на распаковку

#6
20:51, 6 июля 2006

keltar
>glCompressedTexImage2D

Не знал, я всегда думал, что даётся не сжатая текстура, а Видюха уже в видеопамять её сжатую записывает... А чтобы можно было указатель на уже сжатое давать, это новость для меня...

#7
21:13, 6 июля 2006

-- удалил, в прошлом мессадже правка успешной получилась

#8
21:22, 6 июля 2006

А что за t-координата? Просто я взял уже готовый лоадер и не раздуплился в принципе его работы

#9
21:49, 6 июля 2006

>>А что за t-координата?
ну это вроде y, тока для текстур

#10
21:54, 6 июля 2006

beetle2001
Напиши софтину, которая будет автоматически все текстуры пережимать в DDS, переворачивая координату.

Или текстурной матрицей:
glMatrixMode(GL_TEXTURE));
glScalef(1,-1,1);

#11
22:23, 6 июля 2006

beetle2001
для пространственных координат юзаются обозначения (x, y, z, w), для текстурных - (s, t, r, q)

#12
18:52, 7 июля 2006

Я уже просто в фотошопе все флипнул, но все равно охота раздуплиться как это программно сделать. Я не совсем понимаю где искать эту t координату (смысл ее то я понял конечно), но вот в коде не пойму как её выцепить.  Вот  мой загрузчик:  http://www.gamedev.ru/download/?id=3846

  Может подскажете мне на примере кода, плиз ....

#13
19:29, 7 июля 2006

iPriS же написал как можно для этого юзать текстурную матрицу. Либо флипать t-координату у моделек - т.е. чтобы когда текстурные координаты задаёшь - было не t а 1 - t

#14
20:38, 8 июля 2006

>Я не совсем понимаю где искать эту t координату (смысл ее то я понял конечно), но вот в коде не пойму как её выцепить.
glTexCoord2f(...) принимает два параметра, где 2-й - как раз и есть эта t координата, или же координата y, что пофиг.
Соотв если ты в программе юзаешь что-то типа glTexCoord2f(a,b), то надо это заменить на glTexCoord2f(a,1-b) и т.д.
Если ты юзаешь glDrawArray, VBO и иже с ними, то при подготовке массива вершин тебе надо сделать примерно следущее:

Vertex->texcoord.y = 1 - Vertex->texcoord.y.
Или
Vertex->texcoord.t = 1 - Vertex->texcoord.t.
Или
Vertex->texcoord[1] = 1 - Vertex->texcoord[1], это смотря как ты текстуры хранишь.

Если делать это текстурной матрицей, то будет так:

(при применении текстуры)
glActiveTexture(GL_TEXTURE_0+___UNIT___);
glBindTexture(GL_TEXTURE_2D,___Твоя_текстура___);
glMatrixMode(GL_TEXTURE));
glLoadIdentity;
//Устанавливаешь свою матрицу
//типа glScalef(scale.x,scale.y,scale.z);
//glTranslatef(offset.x,offset.y,offset.z);
//или glLoadMatrix(&MyMatrix);
glScalef(1,-1,1);
glMatrixMode(GL_MODELVIEW));
//Отрисовка
glActiveTexture(GL_TEXTURE_0+___UNIT___);
glBindTexture(GL_TEXTURE_2D,0);

Лучше, конечно, glMatrixMode десять раз не вызывать, и перед тем как ты начал смену текстур один раз сделать glMatrixMode(GL_TEXTURE)), а после glMatrixMode(GL_MODELVIEW));
Обрати внимание, что матрица - она общая для TEXTURE UNIT'a, а не для текстуры, т.е. каждый раз надо по новой все выставлять.

>Я уже просто в фотошопе все флипнул
В смысле, переделал все исходные, несжатые текстуры в DDS по-новому? А не проще это делать специальной софтиной автоматически? Прикинь, если у тебя будет 10000 текстур? Это на месяц работы!

В загрузчике вроде у тебя все ОК, но со сжатой текстурой конечно ничо не перевернеш.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.