Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

glBindTexture [D5, WinXP]


Страницы:   1 2 3

grouzd[E]v ©   (2005-07-10 18:46:00) 

Goodevening again my friends!
У меня опять проблемы с OGLой (а может с головой =)
Не получается подключать текстуры через glBindTexture
Раньше я делал как в одной статье:

procedure TTexture.Enable;
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
 glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,Width,Height,0,GL_RGB,GL_UNSIGNED_BYTE,data);
 glEnable(GL_TEXTURE_2D);
end;

т.е. при перерисовке объекта текстура создается заново
Теперь пробую так:

type
 TTexture = class
   width, height : integer;
   data : pByteArray;
   t : GLuint;
   procedure LoadFromFile(file_name : string);
   procedure Enable;
 end;

implementation

procedure glGenTextures(n: GLsizei; var textures: GLuint); stdcall; external opengl32;
procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;

procedure TTexture.LoadFromFile(file_name : String);
begin
//загрузка из файла
glGenTextures(1, t);
glBindTexture(GL_TEXTURE_2D, t);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,Width,Height,0,GL_RGB,GL_UNSIGNED_BYTE,data);
end;

procedure TTexture.Enable;
begin
glBindTexture(GL_TEXTURE_2D, t);  
glEnable(GL_TEXTURE_2D);
end;

...и ничего не просходит, текстура не накладывается. скажите pls что не так


Tonich   (2005-07-13 16:32:00) [21]

интересно, а что есть ручным , пример кода если можно:)


XProger   (2005-07-13 15:47:00) [22]

Tonich, ScanLine или ручным...


Tonich   (2005-07-13 11:26:00) [23]


> XProger ©   (11.07.05 15:00) [15]

ты говоришь

> Один из самых тормознутых методов загрузки текстуры (если
> не самый тормознутый)

каким методом пользуешься ты?


grouzd[E]v   (2005-07-12 00:06:00) [24]

Гм... Стал переделывать в новом проекте и эта гадость заработала =) Полтергейст... Значит проблемы с головой. Всем спасибо!


grouzd[E]v   (2005-07-11 23:34:00) [25]

Ага. Целиком. Все 16 модулей. Там даже комментов нет =) Позже попробую отдельный пример сделать


XProger   (2005-07-11 23:29:00) [26]

выкладывай где-нить весь пример на скачку


grouzd[E]v   (2005-07-11 23:18:00) [27]

[19] Леон: Да. Я же говорю, что в если при подключении вызывать glTexImage2D, то все работает. Самое обидное, что у меня компилируются другие примеры с биндом, хотя отличий вроде нет. Мистика =)


Леон   (2005-07-11 21:24:00) [28]

Текстурные координаты указываются?
( я их у себя забывал частенько :)  )


grouzd[E]v   (2005-07-11 19:06:00) [29]

Да


XProger   (2005-07-11 19:03:00) [30]

glEnable(GL_COLOR_MATERIAL); надеюсь есть вместе со светом?


grouzd[E]v   (2005-07-11 17:27:00) [31]

Не, не работает. Свет есть


XProger   (2005-07-11 15:00:00) [32]

destructor TTexture.Destroy; - фтопку

procedure TTexture.LoadFromFile(const file_name : String);
...
glBindTexture(GL_TEXTURE_2D, Result);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
...
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,Width,Height,0,GL_RGB,GL_UNSIGNED_BYTE,data);
FreeMem(data);

Один из самых тормознутых методов загрузки текстуры (если не самый тормознутый)
Вообще, если и это работать не будет - ошибок в коде загрузки и включения текстур нет.
Свет на сцене есть?


grouzd[E]v   (2005-07-11 10:03:00) [33]

unit textures;

interface

Uses
 windows, SysUtils, Graphics, OpenGL;

type
 TTexture = class
   id, width, height : integer;
   data : pByteArray;
   t : GLuint;
   destructor Destroy; override;
   procedure LoadFromFile(file_name : string);
   procedure Enable;
 end;

implementation

procedure glGenTextures(n: GLsizei; var textures: GLuint); stdcall; external opengl32;
procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;

destructor TTexture.Destroy;
begin
 if Assigned(data) then FreeMem(data);
 Inherited Destroy;
end;

procedure TTexture.LoadFromFile(file_name : String);
var
B : TBitmap;
i,j : Integer;
begin
if not fileexists(file_name) then exit;
total_textures := total_textures + 1;
id := total_textures;
B := TBitmap.Create;
B.LoadFromFile(file_name);
Width := B.Width;
Height := B.Height;

GetMem(data,Width*Height*3);

for j := 0 to Height - 1 do begin
 for i := 0 to Width - 1 do begin
   data[(j*Width + i)*3] := Byte(B.Canvas.Pixels[i,j]);
   data[(j*Width + i)*3+1] := Byte(B.Canvas.Pixels[i,j] shr 8);
   data[(j*Width + i)*3+2] := Byte(B.Canvas.Pixels[i,j] shr 16);
 end;
end;

B.Free;

glEnable(GL_TEXTURE_2D);

glGenTextures(1, t);
glBindTexture(GL_TEXTURE_2D, t);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,Width,Height,0,GL_RGB,GL_UNSIGNED_BYTE,data);

   
end;

procedure TTexture.Enable;
begin
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, t);
end;

end.


MeF Dei Corvi   (2005-07-11 05:59:00) [34]

Можешь где-нить выложить полный код модуля, где у тебя описывается TTexture? Это на случай, если у тебя не "проблемы с OGLой", а именно "с головой =)"... :)


Zak3D[@Tm]   (2005-07-11 01:42:00) [35]

XProger
Ой... это же GL_MODULATE =). Ты прав.


grouzd[E]v   (2005-07-11 00:48:00) [36]

[10] Неа, не пашет


XProger   (2005-07-10 23:57:00) [37]

Zak3D[@Tm], как раз таки наоборот "учитывать цвет примитива"
grouzd[E]v,
procedure glGenTextures     (n: GLsizei; textures: PGLuint); stdcall; external opengl32;
И передавай указатель... Сомневаюсь что отличается, но мало ли...


grouzd[E]v   (2005-07-10 23:49:00) [38]

да


Zak3D[@Tm]   (2005-07-10 23:48:00) [39]

А... вижу, делаешь ; )
сори


Zak3D[@Tm]   (2005-07-10 23:29:00) [40]

При создании текстуры, после бинда
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //не учитывать цвет примитива
делаешь?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо