|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
[c] opengl problemi nel disegno di un cubo
Ciao a tutti,
sto provando a disegnare un cubo ma purtroppo ho un problema, alcuni lati anche se vengono disegnati risultano invisibili sapreste aiutarmi? eccovi la funzione che dovrebbe disegnare il cubo: Codice:
GLvoid drawCubo(GLvoid){
GLfloat lato=.2,zinf=-.2,zsup=.2;
GLfloat x[]={-lato,-lato,lato,lato},y[]={-lato,lato,lato,-lato};
GLint i;
//lati del cubo
glBegin(GL_QUAD_STRIP);
glColor3ub(255,255,0);
for(i=0;i<4;i++){
glVertex3f(x[i],y[i],zinf);
glVertex3f(x[i],y[i],zsup);
}
glVertex3f(x[0],y[0],zinf);glVertex3f(x[0],y[0],zsup);
glEnd();
//base superiore e inferiore del cubo
glBegin(GL_QUADS);
glColor3ub(0,255,255);
for(i=0;i<4;i++)
glVertex3f(x[i],y[i],zinf);//base superiore azzurra
glColor3ub(0,0,255);
for(i=0;i<4;i++)
glVertex3f(x[i],y[i],zsup);//base superiore blu
glEnd();
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
manca il resto del programma ed uno screen di quello che ti renderizza.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
ecco il programma:
Codice:
#include<stdio.h>
#include<GL/glut.h>
GLvoid ControlloErrori(char *label){
GLenum errore;
while((errore=glGetError())!=GL_NO_ERROR){
printf("%s %s\n",label,gluErrorString(errore));
}
}
GLvoid drawAssi(GLvoid){
GLfloat x[]={1,0,0};
GLfloat y[]={0,1,0};
GLfloat z[]={0,0,1};
GLfloat center[]={0,0,0};
glBegin(GL_LINES);
glColor3ub(255,0,0);
glVertex3fv(center);
glVertex3fv(x);
glColor3ub(0,255,0);
glVertex3fv(center);
glVertex3fv(y);
glColor3ub(0,0,255);
glVertex3fv(center);
glVertex3fv(z);
glEnd();
}
GLvoid drawCubo(GLvoid){
GLfloat lato=.2,zinf=-.2,zsup=.2;
GLfloat x[]={-lato,-lato,lato,lato},y[]={-lato,lato,lato,-lato};
GLint i;
glBegin(GL_QUAD_STRIP);
glColor3ub(255,255,0);
for(i=0;i<4;i++){
glVertex3f(x[i],y[i],zinf);
glVertex3f(x[i],y[i],zsup);
}
glVertex3f(x[0],y[0],zinf);glVertex3f(x[0],y[0],zsup);
glEnd();
glBegin(GL_QUADS);
glColor3ub(0,255,255);
for(i=0;i<4;i++)
glVertex3f(x[i],y[i],zinf);//base superiore azzurra
glColor3ub(0,0,255);
for(i=0;i<4;i++)
glVertex3f(x[i],y[i],zsup);//base superiore blu
glEnd();
}
void disegno(GLvoid){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(-50,1,0,0);
glRotatef(-130,0,0,1);
drawAssi();
drawCubo();
glPopMatrix();
ControlloErrori("disegno");
glutSwapBuffers();
}
int main(int argc,char** argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glEnable(GL_DEPTH_TEST);
glutCreateWindow("cubo");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1,1,-1,1,-1,1);
glMatrixMode(GL_MODELVIEW);
glClearColor(0,0.3,0,0);
glShadeModel(GL_FLAT);
glutDisplayFunc(disegno);
glutMainLoop();
}
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
a me funziona, il problema forse è che ti aspetti che il cubo si possa ruotare tramite un drag&drop con il cursore, in questo caso la risposta è sempre negativa semplicemente perché OpenGL è una tecnologia per il rendering e non un framework con velleità multimediali, OpenGL, o meglio GLUT e/o freeGLUT che siano, non gestiscono altro all'infuori del rendering di punti, linee, primitive e colori, per i comandi devi far riferimento ad altri framework o altre librerie.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
no il problema è che non vedo due lati, mancano due lati gialli !!!
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
La normale di un triangolo va nel verso del "vertex winding", ovvero nel verso dell'enumerazione dei vertici.
Dati V1, V2, V3, la normale è messa in modo che girando intorno, si percorrono da 1 a 3 in senso orario... in poche parole è calcolata col prodotto vettoriale. In breve: sei sicuro che disegni i vertici nell'ordine giusto? Se la normale viene invertita le facce non si vedono dal verso che ti aspetti (backface culling) e sembra ci sia un "buco" PS: per il futuro, non usare GL_QUADS. Non usare GLUT. Non usare glBegin()-glEnd(). Usa i VBO e meshes indicizzate. Purtroppo OpenGL ha il problema che se non sai cosa stai facendo puoi usarla come se fosse il '91, ed è quello che stai facendo qui Ultima modifica di Tommo : 25-10-2011 alle 02:45. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
per adesso devo usare glut e non riesco a capire dove sbaglio!!!
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:54.




















