Главная страница
    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.034 c
14-1102387578
Думкин
2004-12-07 05:46
2005.01.02
С днем рождения! 7 декабря


3-1102142124
lexales
2004-12-04 09:35
2005.01.02
Проблемы с базой данных


1-1103143375
Shnabs
2004-12-15 23:42
2005.01.02
Графика


14-1102729271
avk02
2004-12-11 04:41
2005.01.02
Несколько цитат из Дугласа Адамса


14-1102509436
Alexander Panov
2004-12-08 15:37
2005.01.02
Победа Януковича. Противостояние. (продолжение. Часть 3)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский