» »

eno vprašanje o glTranslate

eno vprašanje o glTranslate

Phil ::

Kdo ve kaj je tukaj narobe?
Najprej se v funkciji drawglscene izrise vsa okolica potem
pa se izrise(jo) 3ds modeli npr.

.../izris okolice
glScalef(0.004,0.004,0.004); //mal pomanjsam k so modeli preveliki
glPushMatrix();
glTranslated(4,1,-5);
izrisimodel(0); //0 je stevilka modela
glPopMatrix();
glTranslated(1,1,1);
izrisimodel(1);

Prvi Translate mi prvi model premakne tja kamor hocem drugi pa se noče premakniti, ampak ga izrise zraven prvega.
Takale je pa funkcija izrisimodel:

int izrisimodel(int stmodela){
glBindTexture(GL_TEXTURE_2D, texture[sector1.triangle[modeli[stmodela].sttex].rotx]);
for (int k=0;k glBegin(GL_TRIANGLES);
glTexCoord2f(modeli[stmodela].jabk[modeli[stmodela].indeks[k]].u,modeli[stmodela].jabk[modeli[stmodela].indeks[k]].v);
glVertex3f(modeli[stmodela].jabk[modeli[stmodela].indeks[k]].x,modeli[stmodela].jabk[modeli[stmodela].indeks[k]].y,modeli[stmodela].jabk[modeli[stmodela].indeks[k]].z);
glTexCoord2f(modeli[stmodela].jabk[modeli[stmodela].indeks[k+1]].u,modeli[stmodela].jabk[modeli[stmodela].indeks[k+1]].v);
glVertex3f(modeli[stmodela].jabk[modeli[stmodela].indeks[k+1]].x,modeli[stmodela].jabk[modeli[stmodela].indeks[k+1]].y,modeli[stmodela].jabk[modeli[stmodela].indeks[k+1]].z);
glTexCoord2f(modeli[stmodela].jabk[modeli[stmodela].indeks[k+2]].u,modeli[stmodela].jabk[modeli[stmodela].indeks[k+2]].v);
glVertex3f(modeli[stmodela].jabk[modeli[stmodela].indeks[k+2]].x,modeli[stmodela].jabk[modeli[stmodela].indeks[k+2]].y,modeli[stmodela].jabk[modeli[stmodela].indeks[k+2]].z);
glEnd();
}

return 0;
}
Mal sem pomanjšal k so vrstice predolge.
Kdo ve kaj je tukaj narobe? Jzt sm ze vse mogoče probal pa mi se kr ni ratal :(. Tut ce uporabim PushMatrix in pol PopMatrix mi se vseeno translacija ne dela.
LP
  • spremenil: Phil ()

Senitel ::

Eko kaj ti delaš:
-skaliraš matriko za vektor (0.004,0.004,0.004)
-premakneš matriko za vektor (4,1,-5)
-izrišeš model
-premakneš (!!!) matriko ŠE ENKRAT za vektor (1,1,1)
-še enkrat izrišeš model
Upam da razumeš v čem je problem...
Če ti to prevedem nakako v bolj matematično obliko:

World*=ScaleMatrix(0.004f,0.004f,0.004f);
World*=TranslateMatrix(4,1,-5);
izrisimodel(0); // Z matriko World
World*=TranslateMatrix(1,1,1);
izrisimodel(1); // Zopet z matriko World

Lahko se rešiš ali z glPushMatrix in glPopMatrix, ki se obnašata tako kot stack. Torej:
glScalef(0.004f,0.004f,0.004f);
glPushMatrix();
glTranslate(4,1,-5);
izrisimodel(0);
glPopMatrix();
glTranslate(1,1,1);
izrisimodel(1);

Ali pa če za vsak model zgradiš matriko od glLoadIdentity...

Phil ::

Sej to rešitev ki si mi jo dal sem že prej gor napisal.
Sam je bilo vmes, ko sem spremenil post kakšne pol ure razlike si ti mogel videti
še taprvo verzijo posta. Zdej sem tudi vsaj pomoje pogruntal kaj je bilo narobe.
Pomoje da če skaliraš x,y in z recimo za 0.004 (pomanjsas 250krat?) moraš pol pri translaciji vnesti 250krat vecje vrednosti npr.
recimo da hočem oba modela postaviti na isto mesto

glPushMatrix();
glTranslatef(3.0f,3.0f,0.0f);
izrisimodel(0); //ta prvega modela ne skaliram ker je že primerne velikosti
glPopMatrix();
glScalef(0.001,0.001,0.001); //pomanjšan za 1000krat
glTranslatef(3000.0f,3000.0f,0.0f);
izrisimodel(1);

A je tole pravilno a sem čist mim usekal ?
Thx za pomoč.
LP

Senitel ::

Eee... Nope...
Scale ti samo zmanjša poveča trenutno matriko (spremeni elemente [0,0],[1,1],[2,2],[3,3])...

Phil ::

Sam sem probal pa dela. Čudno :|.
LP

Senitel ::

Imaš matriko in jo množiš z vektorjem (transformacija)
[ 1, 0, 0, x ] * x' = 1*x' + 0*x' + 0*x' + x*x'
[ 0, 1, 0, y ] * y' = 0*y' + 1*y' + 0*y' + y*y'
[ 0, 0, 1, z ] * z' = 0*z' + 0*z' + 1*z' + z*z'
[ 0, 0, 0, 1 ] * w = 1

Imaš scale in translate matriko in ju zmnožiš:
[ 0.001, 0, 0, 0 ] * [ 1, 0, 0, 3000 ] = [ 0.001, 0, 0, 3000 ]
[ 0, 0.001, 0, 0 ] * [ 0, 1, 0, 3000 ] = [ 0, 0.001, 0, 3000 ]
[ 0, 0, 0.001, 0 ] * [ 0, 0, 1, 3000 ] = [ 0, 0, 0.001, 3000 ]
[ 0, 0, 0, 1 ] * [ 0, 0, 0, 0001 ] = [ 0, 0, 0, 1 ]

Zdej pejd pa s tem v zgornjo enačbo, pa boš videl kaj se zgodi...

A mi pošlješ source, da vidim, kaj v bistvu počneš?? Klik...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo

Aliexpress

Oddelek: Loža
191509 (1105) zee
»

zunanji priklop za SATA disk

Oddelek: Strojna oprema
7924 (821) solatko
»

[C && OpenGL] "speed tape"

Oddelek: Programiranje
71208 (1059) Monster
»

Tezave z ATI RADEON 9200 v FEDORA CORE 3

Oddelek: Pomoč in nasveti
201204 (1100) CCfly
»

Naloga z elektro področja, ne znam rešit

Oddelek: Šola
111344 (1071) bili_39

Več podobnih tem