Broadband
24-06-2008, 14:13
Ragazzi mi sembro scemo ma non riesco a venirne fuori. Sto studiando sul redbook e sto cercando di capire bene la differenza (se c'è) tra le 2 trasformazioni.
Il redbook dice: "non cè differenza nel piazzare un oggetto al centro e guardarlo per esempio da z=-5 oppure guardare dall' aorigine e spostare l' oggetto in z=5". Bhe si è ovvio.
Quello che non capisco è come distinguere queste 2 trasformazioni all' interno del codice dato che poi agiscono anche sulla stessa matrice (MODELVIEW)
Esempio:
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity();
glBegin(GL_LINES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(2.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 2.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 2.0);
glEnd();
glTranslatef(0.0, 0.0, -5.0);
glutWireCube (1.0);
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode (GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
In questo esempio la view non viene toccata ma viene fatta solo modellazione (traslazione so z in questo caso).
Se io volessi ottenere lo stesso risultato con la viewing farei tipo (rimetto solo la display):
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //oppure traslo di -5 lungo z
glBegin(GL_LINES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(2.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 2.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 2.0);
glEnd();
glutWireCube (1.0);
glFlush ();
}
In effetti cosi funziona. In questo caso ho usato solo view ma se le volessi usare entrambe dive è che finiscono quelle di view e cominciano quelle di modelling?
Bho raga sto ingrippato, se qualcuno gentilmente mi spiegasse qualcosa mi farebbe un bel favorone!
baci
Il redbook dice: "non cè differenza nel piazzare un oggetto al centro e guardarlo per esempio da z=-5 oppure guardare dall' aorigine e spostare l' oggetto in z=5". Bhe si è ovvio.
Quello che non capisco è come distinguere queste 2 trasformazioni all' interno del codice dato che poi agiscono anche sulla stessa matrice (MODELVIEW)
Esempio:
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity();
glBegin(GL_LINES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(2.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 2.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 2.0);
glEnd();
glTranslatef(0.0, 0.0, -5.0);
glutWireCube (1.0);
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode (GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
In questo esempio la view non viene toccata ma viene fatta solo modellazione (traslazione so z in questo caso).
Se io volessi ottenere lo stesso risultato con la viewing farei tipo (rimetto solo la display):
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //oppure traslo di -5 lungo z
glBegin(GL_LINES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(2.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 2.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 2.0);
glEnd();
glutWireCube (1.0);
glFlush ();
}
In effetti cosi funziona. In questo caso ho usato solo view ma se le volessi usare entrambe dive è che finiscono quelle di view e cominciano quelle di modelling?
Bho raga sto ingrippato, se qualcuno gentilmente mi spiegasse qualcosa mi farebbe un bel favorone!
baci