![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OpenGL грузится одна и та же текстура (?) [Delphi, Windows]
Кефир87 © (2005-05-05 21:11:00)У меня вот такая штука:
TTexture = class
point : GLuint;
procedure Load(const filename:string);
end;
Все в принципе нормально... Но вот только в итоге у всех объектов этого типа прои разных point'ах прицепляется одна и та же текстура, загруженная последней... Может я забыл что...
Вот так я примерно рисую текстурированный прямоугольник:
glBegin(GL_QUADS);
glBindTexture(GL_TEXTURE_2D, tex.point);
glTexCoord(0, 0); glVertex3f(-w, 0.0, -h);
glTexCoord(1000, 0); glVertex3f( w, 0.0, -h);
glTexCoord(1000, 1000); glVertex3f( w, 0.0, h);
glTexCoord(0, 1000); glVertex3f(-w, 0.0, h);
glEnd;
glDisable(GL_TEXTURE_2D);
Кефир87 (2005-05-05 22:52:00) [1]
> С КАКИХ ПОР glBindTexture пашет внутри блока glBegin/glEnd?
> а?
Спокойно! Спокойно! Кричать не надо...
А разве нет? Я думал что как бы эта текстура относится к этому объекту... Надеюсь в этом и есть моя лажа 8)
XProger (2005-05-05 22:33:00) [2]С КАКИХ ПОР glBindTexture пашет внутри блока glBegin/glEnd? а?
Кефир87 (2005-05-05 21:33:00) [3]tex в этом случае это TTexture. Там все нормально! Я имею в виду что point отличается от других в программе...
> Или это сверхбольшой объект?
Ну это я чисто для теста так землю нарисовал 8)
Pa5ha (2005-05-05 21:30:00) [4]Если не работает, значит не нормально :)
Текстурные координаты - не многовато ли 1000? Этож у Тебя симанама каждый раз рисуется при любой текстуре. Или это сверхбольшой объект?
Что такое tex? Если Ты постоянно одну и ту же текстуру биндишь, то она одна и та же рисуется :)
Кефир87 (2005-05-05 21:22:00) [5]Наверно надо еще показать как я текстуру создаю...
Функция которая возвращяет Gluint...
function LoadBMPTexture(const FileName : String): GLuint;
const
szh = SizeOf(TBitmapFileHeader);
szi = SizeOf(TBitmapInfoHeader);
type
TRGB = record
r, g, b : GLbyte;
end;
TWrap = Array [0..0] of TRGB;
var
BmpFile : File;
bfh : TBitmapFileHeader;
bmi : TBitmapInfoHeader;
x, size: GLint;
temp: GLbyte;
sWidth, tHeight: GLsizei;
pData : pointer;
begin
AssignFile (BmpFile, FileName);
Reset (BmpFile, 1);
Size := FileSize (BmpFile) - szh - szi;
Blockread(BmpFile, bfh, szh);
BlockRead (BmpFile, bmi, szi);
If Bfh.bfType <> $4D42 then
begin
Exit;
end;
sWidth := bmi.biWidth;
tHeight := bmi.biHeight;
GetMem (pData, Size);
BlockRead(BmpFile, pData^, Size);
For x := 0 to sWidth*tHeight-1 do
With TWrap(pData^)[x] do begin
temp := r;
r := b;
b := temp;
end;
glGenTextures(1, Result);
glBindTexture(GL_TEXTURE_2D, Result);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, sWidth, tHeight, GL_RGB, GL_UNSIGNED_BYTE, pData);
FreeMem(pData);
end;
Вот... Не очень быстро... Но я к этому пока не стремлюсь...