Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Что у меня с текстурами опять.. ёлы палы?!   Найти похожие ветки 

 
Кефир87   (2005-05-30 14:33) [0]

Вот я спустя примерно месяц с начала освоения ОГЛ решил объединить свои скудные знания в этой области и написать что-то вроде движка, что-бы потом что-нибудь с этим сделать. И вот я опять наткнулся на проблдем с текстурами. Самая основа. Кажется тогда месяц назад я тоже долго бился... Вот код:

Я что-бы разобрать в чем проблема все упростил до минимума... Никаких проверок.



 TextureRec = record
   id:GLuint;
   pxWidth,pxHeight:GLuint;
   BPP : byte;
 end;

<..>

procedure keLoad24BMP(const FileName:PChar; var Texture : TextureRec);
var
 bfh:TBMPFileHed;
 bih:TBMPINFO;
 f:file;
 pData:Pointer;
 size:Cardinal;
begin

 AssignFile(f, FileName);
 Reset(f, 1);

 BlockRead(f, bfh, sizeof(bfh));
 BlockRead(f, bih, sizeof(bih));

 Texture.pxWidth := bih.biWidth;
 Texture.pxHeight := bih.biHeight;
 Texture.BPP := bih.biBitCount;

 size := bih.biWidth*bih.biHeight*3;
 GetMem(pData, size);
 BlockRead(f, pData^, size);
 glGenTextures(1, Texture.id);
 glBindTexture(GL_TEXTURE_2D, Texture.id);
 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, bih.biWidth, bih.biHeight, GL_UNSIGNED_BYTE, GL_RGB, pData);
 FreeMem(pData);

 CloseFile(f);

end;

<...>

procedure keQubeTextured(texture : TextureRec);
begin

 glEnable(GL_TEXTURE_2D);
 glBindTexture(GL_TEXTURE_2D, texture.id);

 glBegin(GL_QUADS);
   glNormal3f(0, -1, 0);
   glTexCoord(0, 0);glVertex3f(-1, -1, -1);
   glTexCoord(1, 0);glVertex3f( 1, -1, -1);
   glTexCoord(1, 1);glVertex3f( 1, -1,  1);
   glTexCoord(0, 1);glVertex3f(-1, -1,  1);

   glNormal3f(0, 1, 0);
   glTexCoord(0, 0);glVertex3f(-1, 1, -1);
   glTexCoord(1, 0);glVertex3f( 1, 1, -1);
   glTexCoord(1, 0);glVertex3f( 1, 1,  1);
   glTexCoord(0, 1);glVertex3f(-1, 1,  1);

   glNormal3f(0, 0, -1);
   glTexCoord(0, 0);glVertex3f(-1, -1, -1);
   glTexCoord(1, 0);glVertex3f( 1, -1, -1);
   glTexCoord(1, 1);glVertex3f( 1,  1, -1);
   glTexCoord(0, 1);glVertex3f(-1,  1, -1);

   glNormal3f(0, 0, 1);
   glTexCoord(0, 0);glVertex3f(-1, -1, 1);
   glTexCoord(1 ,0);glVertex3f( 1, -1, 1);
   glTexCoord(1, 1);glVertex3f( 1,  1, 1);
   glTexCoord(0, 1);glVertex3f(-1,  1, 1);

   glNormal3f(-1, 0, 0);
   glTexCoord(0, 0);glVertex3f(-1, -1, -1);
   glTexCoord(1, 0);glVertex3f(-1, -1,  1);
   glTexCoord(1, 1);glVertex3f(-1,  1,  1);
   glTexCoord(0, 1);glVertex3f(-1,  1, -1);

   glNormal3f(1, 0, 0);
   glTexCoord(0, 0);glVertex3f(1, -1, -1);
   glTexCoord(1, 0);glVertex3f(1, -1,  1);
   glTexCoord(1, 1);glVertex3f(1,  1,  1);
   glTexCoord(0, 1);glVertex3f(1,  1, -1);
 glEnd;

 glDisable(GL_TEXTURE_2D);
end;



В результате этого на экране виден куб. Освещенный красивый. Но без текстуры. Ну что же я забыл?! Смотрел свои старые исходники. Вроде ничего не забыл. Файл есть. Все нормально генерируется...
Может надо оговориться что представленные процедуры находятся в dll и вызываются из программы. Но ведь все нормально. И освещение и все остальное. А вот текстуры нет... В чем блин дело? Я уже несколько часов бьюсь...

Пытался разрешать текстуры в программе. Ничего не меняется...


 
keal   (2005-05-30 14:40) [1]

Не уверен, но если ты включил свет, то надо еще что-то включить, чтоб текстура под светом отображалась.


 
XProger ©   (2005-05-30 15:15) [2]

После инициализации OpenGL:
glEnable(GL_COLOR_MATERIAL);
Перед gluBuild2DMipmaps:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);


 
Кефир87   (2005-05-30 15:49) [3]

Ничего не изменилось. Ничего не понимаю... Свет выключаю а текстуры всеравно нет... мистика...


 
XProger ©   (2005-05-30 16:30) [4]

glTexCoord2f юзай и glColor4f(1, 1, 1, 1) не забывай перед отрисовкой...


 
Кефир87   (2005-05-31 18:13) [5]

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


 
XProger ©   (2005-05-31 20:36) [6]

Просто не вдумываешься в то что пишешь ;)


 
Indyuk   (2005-06-01 10:48) [7]

-> glGenTextures(1, Texture.id);
Может из за этого, там вроде надо передавать адрес на Integer, а ты просто Integer( может и не из за этого, так как паскаль я плохо знаю и программирую на C++ )


 
XProger ©   (2005-06-01 14:32) [8]

Indyuk, это Delphi объявление, там второй параметр идёт в качестве var параметра, следовательно дельфя шлёт указатель :)


 
Кефир87   (2005-06-01 17:38) [9]

И потом там glUint = Cardinal...
Хотя моя старая функция (которую я взял) это делала как glGenTextures(1, Result)... А вот в glDeleteTextures почему-то требуется именно адрес...


 
XProger ©   (2005-06-01 17:59) [10]

Кефир87, разницы никакой...


 
Indyuk   (2005-06-01 19:48) [11]

XProger ну я так и думал :)



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

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
3-1124543918
Dysan
2005-08-20 17:18
2005.10.02
не мог ли бы подсказать почему запрос не работает?


1-1126250393
sea123
2005-09-09 11:19
2005.10.02
Как написать верхний индекс (в Caption)?


9-1117449211
Кефир87
2005-05-30 14:33
2005.10.02
Что у меня с текстурами опять.. ёлы палы?!


8-1116052480
dubdaze
2005-05-14 10:34
2005.10.02
вопрос по wave-файлу


14-1126347466
OSokin
2005-09-10 14:17
2005.10.02
Всех с наступающим праздником - днем программиста!