-NaNo-
20-04-2012, 18:00
Innanzitutto buongiorno, sono un nuovo utente, appena registratomi su questo meraviglioso forum.
Ora veniamo al problema in oggetto al topic:
Sto facendo un progetto di OpenGl, in linguaggio C, brevemente il progetto chiede di ricevere in input una mappa (immagine in formato .tga), dove a pixel colorati corrispondono vari elementi (semafori, lampioni, palazzi).
Il programma genera quindi una mappa tridimensionale, navigabile con tastiera e mouse.
Fino a qui tutto ok, la mappa viene creata correttamente e riesco a muovermi dentro ad essa senza problemi.
Il mio problema però è che la telecamera non è dove voglio che sia all'inizio della navigazione.
In dettaglio, sulla mappa è presente un pixel verde, che identifica l posizione di partenza, in cui posizionare la telecamera ad inizio esecuzione. Sulla mappa 3d disegno senza problemi il pixel nella posizione corretta, ma ho un problema nel posizionarci sopra la mia telecamera. In pratica, se uso gli stessi valori di x e z che ho usato per posizionare il pixel in una glTranslate, la telecamera viene messa molto distante dalla mappa. Sembra quasi che le coordinate che uso per creare/disegnare la mappa non siano le stesse che uso per spostarmi...
Questo è il codice che uso per posizionare la mia telecamera:
for(long i=0; i!=n_pixel*3; i+=3) {
rosso=*(puntatore+i);
verde=*(puntatore+i+1);
blu=*(puntatore+i+2);
if((rosso==0)&&(verde==255)&&(blu==0)){ //Se leggo un pixel verde imposto la telecamera
xpos=(float)righe;
zpos=(float)colonne;
}
colonne++;
if(colonne==base){
colonne=0;
righe++;
}
}
...
...
glTranslated(-xpos, 0,-zpos);
...
Il pezzo di codice che mi disegna il pixel verde è:
for(long i=0; i!=n_pixel*3; i+=3) {
		
rosso=*(puntatore+i);
verde=*(puntatore+i+1);
blu=*(puntatore+i+2);
		
if((rosso==0)&&(verde==255)&&(blu==0)) { //Se leggo un pixel verde imposto la telecamera
glColor3f(0,1,0);
glBegin(GL_POLYGON);
glVertex3f (righe-0.5, 0, colonne-0.5);
glVertex3f (righe+0.5, 0, colonne-0.5);
glVertex3f (righe+0.5, 0, colonne+0.5);
glVertex3f (righe-0.5, 0, colonne+0.5);
glEnd();
glColor3f(1,1,1);
}
colonne++;
if(colonne==base){
colonne=0;
righe++;
}
}
La funzione glTranslate che uso per impostare la posizione è la stessa che uso per gestire il movimento della camera con la tastiera.
Qualcuno mi può spiegare quale sia il mio problema?
Grazie in anticipo a tutti!
Ora veniamo al problema in oggetto al topic:
Sto facendo un progetto di OpenGl, in linguaggio C, brevemente il progetto chiede di ricevere in input una mappa (immagine in formato .tga), dove a pixel colorati corrispondono vari elementi (semafori, lampioni, palazzi).
Il programma genera quindi una mappa tridimensionale, navigabile con tastiera e mouse.
Fino a qui tutto ok, la mappa viene creata correttamente e riesco a muovermi dentro ad essa senza problemi.
Il mio problema però è che la telecamera non è dove voglio che sia all'inizio della navigazione.
In dettaglio, sulla mappa è presente un pixel verde, che identifica l posizione di partenza, in cui posizionare la telecamera ad inizio esecuzione. Sulla mappa 3d disegno senza problemi il pixel nella posizione corretta, ma ho un problema nel posizionarci sopra la mia telecamera. In pratica, se uso gli stessi valori di x e z che ho usato per posizionare il pixel in una glTranslate, la telecamera viene messa molto distante dalla mappa. Sembra quasi che le coordinate che uso per creare/disegnare la mappa non siano le stesse che uso per spostarmi...
Questo è il codice che uso per posizionare la mia telecamera:
for(long i=0; i!=n_pixel*3; i+=3) {
rosso=*(puntatore+i);
verde=*(puntatore+i+1);
blu=*(puntatore+i+2);
if((rosso==0)&&(verde==255)&&(blu==0)){ //Se leggo un pixel verde imposto la telecamera
xpos=(float)righe;
zpos=(float)colonne;
}
colonne++;
if(colonne==base){
colonne=0;
righe++;
}
}
...
...
glTranslated(-xpos, 0,-zpos);
...
Il pezzo di codice che mi disegna il pixel verde è:
for(long i=0; i!=n_pixel*3; i+=3) {
rosso=*(puntatore+i);
verde=*(puntatore+i+1);
blu=*(puntatore+i+2);
if((rosso==0)&&(verde==255)&&(blu==0)) { //Se leggo un pixel verde imposto la telecamera
glColor3f(0,1,0);
glBegin(GL_POLYGON);
glVertex3f (righe-0.5, 0, colonne-0.5);
glVertex3f (righe+0.5, 0, colonne-0.5);
glVertex3f (righe+0.5, 0, colonne+0.5);
glVertex3f (righe-0.5, 0, colonne+0.5);
glEnd();
glColor3f(1,1,1);
}
colonne++;
if(colonne==base){
colonne=0;
righe++;
}
}
La funzione glTranslate che uso per impostare la posizione è la stessa che uso per gestire il movimento della camera con la tastiera.
Qualcuno mi può spiegare quale sia il mio problema?
Grazie in anticipo a tutti!