Текущий архив: 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