Vai al contenuto
berardi

Opengl Routaione Oggetti Tramite Mouse

Recommended Posts

Salve, mi scuso ma sono nuovo, anzi nuovissimo del forum. Allora vi spiego subito il mio problema ho un rpgoramma scritto in c++ e openGL per la grafica, con la parte in c++ ho sviluppato l'algoritmo e va tutto ok, ma ho problemi con le manipolaizone dell'oggetto creato con le openGL. Praticamente creo un paesaggio e vorrei tramite mouse spostare a destra e sinistra proprio l'intero paesaggio creato. Premetto che il paesaggio è grande tipo 1000x1000 pixel giusto per fare una prova. Per ora riesco solo ad muovermi con la tastiera, ma per il mouse non ho trovato nussun tutorial. sapete darmi una mano?

aspetto fiducioso i vostri consigli

Scusatemi se sono stato poco chiaro

Andrea

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

#include <glut.h>

#include <stdlib.h>

#include <stdio.h>


//Cambio delle dimensioni della fiestra

void reshape(int w, int h)

{

   glViewport(0,0,(GLsizei) w, (GLsizei) h); 

   glMatrixMode(GL_PROJECTION);

   glLoadIdentity();

   gluPerspective(45.0,(GLfloat) w/ (GLfloat) h,1.0,100.0);

   glMatrixMode(GL_MODELVIEW);

   glLoadIdentity();

}


//Visualizzazione 

void display(void)

{

   glClear(GL_COLOR_BUFFER_BIT);

   glFlush();

}


//Reazione al mouse 

void mouse(int button,int state,int x, int y)

{

   GLint viewport[4];

   GLdouble mvmatrix[16], projmatrix[16];


   //coordinata Y nel OpenGL

   GLint realy;


   //Coordinate dell'oggetto (X, Y, Z)

   GLdouble wx,wy,wz;


   switch(button)

   {

	  case GLUT_LEFT_BUTTON:

		 if (state==GLUT_DOWN)

		 {

			glGetIntegerv(GL_VIEWPORT,viewport);

			glGetDoublev(GL_MODELVIEW_MATRIX,mvmatrix);

			glGetDoublev(GL_PROJECTION_MATRIX,projmatrix);


			//viewport[3] - altezza della finestra (in pixel) 

			realy=viewport[3]-(GLint)y-1;

			printf("Coordinate del puntatore del mouse (%4d,%4d)\n",x,realy); 

			gluUnProject((GLdouble)x,(GLdouble)realy,0.0,mvmatrix,projmatrix,viewport,&wx,&wy,&wz);

			printf("Coordinate dell'oggetto quando z=0 (%f,%f,%f)\n",wx,wy,wz); 

			gluUnProject((GLdouble)x,(GLdouble)realy,1.0,mvmatrix,projmatrix,viewport,&wx,&wy,&wz);

			printf("Coordinate dell'oggetto quando z=1 (%f,%f,%f)\n",wx,wy,wz); 

		 }

	  break;

	  case GLUT_RIGHT_BUTTON:

		 if (state==GLUT_DOWN)

			exit(0);

	  break;

   }

}


int main(int argc, char **argv)

{

   glutInit(&argc,argv); 

   glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 

   glutInitWindowSize(500,500);

   glutInitWindowPosition(100,100);

   glutCreateWindow("Uso del mouse in una scena 3D");

   glutDisplayFunc(display);

   glutReshapeFunc(reshape);

   glutMouseFunc(mouse);

   glutMainLoop();

   return 0;

}

Studia questo codice e le funzioni gluUnProject() e gluUnProject4()

Ciao

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Grazie ragazzi!

Sono riuscito a risolvere il problema, adesso c'è raffinare un pò il tutto! Di sicuro verranno fuori altri problemi e quindi tornerò nel forum a scrivere, grazie ancora!

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

ok! era solo per sapere, perchè tempo fa avevo fatto una specie di motorino 3D con caricamento geometria e navigazione 3D nella scena, però tramite API di Windows, senza nessun framework di mezzo..volevo sistemare un pò il codice e metterlo nel blog in download, ma chissà quando troverò il tempo :-)

ciao!!!

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora


  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×