Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Вниз

Перевод массива в текстуру   Найти похожие ветки 

 
Just3r   (2004-09-06 22:48) [0]

Пишу игрушку на конкурс по scorched earth, а пишу ее я на OpenGL. Соответственно весь массив игрового поля необходимо переводить в текстуру. Делается это так:
1) есть массив arr : array[1..width, 1..height, 0..2] of byte;
  есть текстура tex : gluInt;
2) создаем пока пустую текстуру
var
 ptr : pointer;
begin
 glGenTextures (1, @tex);
 glBindTexture (GL_TEXTURE_2D, tex);
 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

 GetMem(arr, width *  * 3);
 glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, ptr);
 FreeMem(arr, width * height * 3);
 ...

3) теперь каждый кадр обновляем массив arr и переводим его в текстуру tex:
 glBindTexture(GL_TEXTURE_2D, tex);
 glTexImage2D (GL_TEXTURE_2D, 0, 3, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, @arr);

4) рендерим прямоугольник с текстурой
   glBegin (GL_QUADS);
     glTexCoord2f (0, 0); glVertex2i (0, 0);
     glTexCoord2f (1, 0); glVertex2i (0, Height);
     glTexCoord2f (1, 1); glVertex2i (Width, Height);
     glTexCoord2f (0, 1); glVertex2i (Width, 0);
   glEnd();

Теперь текстура выводится с большой странностью, она сжимается в два раза по вертикали. То есть она занимает именно тот размер, который надо (Width, Height), но в этом размере она укладывается два раза, как будто я удвоил текстурные координаты по вертикали. Кто нибудь знает в чем дело? Это дело я могу полечить, написав так:
     glTexCoord2f (0, 0);   glVertex2i (0, 0);
     glTexCoord2f (0.5, 0); glVertex2i (0, Height);
     glTexCoord2f (0.5, 1); glVertex2i (Width, Height);
     glTexCoord2f (0, 1);   glVertex2i (Width, 0);
Но мне все это не дает покоя. В чем же дело?


 
Zer0 ©   (2004-09-07 01:21) [1]

нельзя:
a) сделать текстуру с размерами не кратными степеням двойки
б) на некоторых старых видяхах - не квадатную

---


 
Just3r   (2004-09-07 17:07) [2]

все кратно двойке, видяха не старая


 
XProger ©   (2004-09-08 18:42) [3]


GetMem(arr, width * * 3);
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, ptr);
FreeMem(arr, width * height * 3);

Дык, ты ж не ptr память выделил!
Попробуй так:

GetMem(ptr, width * height * 3);
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, ptr);
FreeMem(ptr, width * height * 3);


 
Just3r   (2004-09-08 19:52) [4]

ты внимателен, это хорошо, а вот я не внимателен. у меня и было сделано так, как ты написал, это я здесь ошибся


 
XProger ©   (2004-09-08 20:42) [5]

Хм.
У тебя нет подобного кода:

glMatrixMode(GL_TEXTURE);
glScalef(1, 2, 1);
glMatrixMode(GL_MODEL_VIEW);

:)
или попробуй это:

const
GL_CLAMP_TO_EDGE = $812F;
...
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

P.S.
Я сомневаюсь в верности своих предложений... ИМХО причина не в этом :)



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
14-1103004910
calm
2004-12-14 09:15
2005.01.02
Оцифровка видео. Что нужно?


14-1102704932
Hypercube
2004-12-10 21:55
2005.01.02
Лицензионные соглашения


4-1100614746
mishabik
2004-11-16 17:19
2005.01.02
Запуск приложения


14-1102580856
Чеширский_Кот
2004-12-09 11:27
2005.01.02
"Что делать?" (с) Чернышевский


1-1103179481
markers
2004-12-16 09:44
2005.01.02
Отчёты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский