Forum » Programiranje » 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
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
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...
-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
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])...
Scale ti samo zmanjša poveča trenutno matriko (spremeni elemente [0,0],[1,1],[2,2],[3,3])...
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...
[ 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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
⊘ | AliexpressOddelek: Loža | 1638 (1234) | zee |
» | zunanji priklop za SATA diskOddelek: Strojna oprema | 1027 (924) | solatko |
» | [C && OpenGL] "speed tape"Oddelek: Programiranje | 1265 (1116) | Monster |
» | Tezave z ATI RADEON 9200 v FEDORA CORE 3Oddelek: Pomoč in nasveti | 1275 (1171) | CCfly |
» | Naloga z elektro področja, ne znam rešitOddelek: Šola | 1409 (1136) | bili_39 |