Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa teksturama u FPC-u (OpenGL)

[es] :: 3D programiranje :: Problem sa teksturama u FPC-u (OpenGL)

[ Pregleda: 2807 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pera89
Petar Dobrota
Zajechar

Član broj: 51904
Poruke: 64
77.46.224.*



Profil

icon Problem sa teksturama u FPC-u (OpenGL)05.07.2007. u 06:21 - pre 203 meseci
Pokusavam da ucitam BMP teksturu sa FreePascal-om. Prvo sam na BMP fajlu odstranio prvih 54 bajta jer su to informacije o dimenzijama slike itd.(koliko ja znam, ispravite me ako gresim). I onda sam zamenio mesta nekim bajtovima da bi format bio RGB a ne BGR kao u bmp formatu(Naravno napisao sam program koji ce to da uradi, nisam rucno menjao mesta). Ovaj izmenjen fajl sam nazvao 'test.tex'. Rezolucija teksture je 64x64.
Napisao sam prost program koji koristi OpenGL i treba da ucita ovu teksturu i da je mapira na jednom kvadratu, medjutim umesto teksture na kvadratu vidim samo belu boju. Evo koda i molim vas kazite mi u cemu sam pogresio:

{$mode objfpc}
program ogltest;
uses GL, GLU, GLUT;
var f:file;
data:pointer;
textureID:GLuint;
procedure DrawIt;
begin

glBegin(Gl_Quads);
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(5,0);
glTexCoord2f(1,1);
glVertex2f(5,5);
glTexCoord2f(0,1);
glVertex2f(0,5);
glEnd;

end;

procedure DisplayWindow; cdecl;
begin
glClearColor(0, 0, 0.2, 1);
glClear(GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT);
DrawIt;
glutSwapBuffers;
end;

procedure OnTimer(value: Integer); cdecl;
begin
glutPostRedisplay;
glutTimerFunc(20, @OnTimer, 0);
end;

procedure keyb(xx1:byte;xx2,xx3:longint); cdecl;
begin
if xx1=27 then halt(0);
end;

begin
GetMem(data,12288); //64*64*3
assign(f,'test.tex');
reset(f,1);
BlockRead(f,data^,12288);
close(f);
glEnable(GL_TEXTURE_2D);
glGenTextures(1,@textureID);
glBindTexture(GL_Texture_2D, TextureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D,0,3,64,64,1,GL_RGB,GL_UNSIGNED_BYTE,data);
glBindTexture(GL_Texture_2D, TextureID);

glutInit(@argc, argv);
glutInitDisplayMode(GLUT_RGB or GLUT_DOUBLE or GLUT_DEPTH);
glutInitWindowSize(640,480);
glutCreateWindow('!!!');
glutDisplayFunc(@DisplayWindow);
glutKeyboardFunc(@keyb);
glutTimerFunc(20, @OnTimer, 0);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CCW);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(90, 1.25, 5, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0, 0, -10);
glShadeModel(GL_SMOOTH);
glutMainLoop;
end.

P.S. Pocetnik sam u OpenGL programiranju, tako da ovaj kod mozda sadrzi pocetnicke greske.
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
*.socal.res.rr.com.

Sajt: https://github.com/bkarad..


+11 Profil

icon Re: Problem sa teksturama u FPC-u (OpenGL)05.07.2007. u 06:37 - pre 203 meseci
Moguće je da je stanje texture promenjeno u GLUT inicijalizaciji. Zato probaj da staviš:
Code:
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, TextureID);

u DrawIt proceduru.

 
Odgovor na temu

pera89
Petar Dobrota
Zajechar

Član broj: 51904
Poruke: 64
77.46.224.*



Profil

icon Re: Problem sa teksturama u FPC-u (OpenGL)05.07.2007. u 10:01 - pre 203 meseci
Probao. Opet beli kvadrat. Hvala na pokusaju u svakom sucaju. Ako je nekom lakse da napise kod od pocetka nego da trazi gresku u mom, moze i tako, a ja cu da vidim gde sam zaj**ao stvar.
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
212.200.249.*



+1 Profil

icon Re: Problem sa teksturama u FPC-u (OpenGL)05.07.2007. u 14:21 - pre 203 meseci
Nasumice pogledao ...

Mozda je problem u sledecem:

Ucitavas teksuru u memoriju gde si alocirao mesto - data ...

Gde tacno kazes openGL-u da treba da koristi te podatke?

Ah, sad sam video ...

Pogledaj da li ti glTexImage2D vraca gresku i ako vraca, koja je greska u pitanju ...

Jos jedna stvar koju bih preporucio:

Code:

glEnable(GL_TEXTURE_2D);
glGenTextures(1,@textureID);
glBindTexture(GL_Texture_2D, TextureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D,0,3,64,64,1,GL_RGB,GL_UNSIGNED_BYTE,data);
glBindTexture(GL_Texture_2D, TextureID);


stavi pre ulaska u main loop ... (posle inicijalizacije glut-a...)

Pokusaj svakako jos jednu stvar ... vidi da li su podaci u fajlu ispravni (mozda si zeznuo stvar sa programom za rgb -> bgr)

ako nije nista od toga onda mozda ovde lezi zec (mislim u ovom grmu ... :) )

Citat:

GL_RGB
Each element is an RGB triple. The GL converts it
to floating point and assembles it into an RGBA
element by attaching 1 for alpha. Each component
is then multiplied by the signed scale factor
GL_c_SCALE, added to the signed bias GL_c_BIAS,
and clamped to the range [0,1] (see
glPixelTransfer).



probaj da postavis GL_c_SCALE na recimo 1 ili mozda 0.9 i GL_c_BIAS na 0 ...
 
Odgovor na temu

pera89
Petar Dobrota
Zajechar

Član broj: 51904
Poruke: 64
77.46.224.*



Profil

icon Re: Problem sa teksturama u FPC-u (OpenGL)05.07.2007. u 18:21 - pre 203 meseci
Hvala Vlado, resio si mi problem. Ovaj deo koda je trebao da ide posle inicijalizacije glut-a, kao sto si rekao.
 
Odgovor na temu

[es] :: 3D programiranje :: Problem sa teksturama u FPC-u (OpenGL)

[ Pregleda: 2807 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.