-HagenZ- Skrevet 27. april 2010 Del Skrevet 27. april 2010 Driver å tester ut forskjellige ting i GL og stucker p denne, hvorfor vil ikke den lage en 3 dimensjonal pyramide, som er litt vridd? #include <GL/glut.h> void display() { glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(0.7, 0.0, 1.0, 0.0); glBegin(GL_TRIANGLE_STRIP); glColor3d(1.0, 0.0, 0.0); glVertex3d(-0.75, -0.75, 1.0); glColor3d(0.0, 1.0, 0.0); glVertex3d( 0.75, -0.75, 1.0); glColor3d(1.0, 1.0, 1.0); glVertex3d( 0.0, 0.75, 1.0); glColor3d(0.0, 0.0, 1.0); glVertex3d( 0.0, -0.75, -1.0); glColor3d(1.0, 0.0, 0.0); glVertex3d(-0.75, -0.75, 1.0); glEnd(); glPopMatrix(); glFinish(); glutSwapBuffers(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitWindowSize(800, 600); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("OpenGL Depth Test"); glutDisplayFunc(display); glutMainLoop(); } Lenke til kommentar
GeirGrusom Skrevet 27. april 2010 Del Skrevet 27. april 2010 For det første brukerdu glRotate funksjonen feil, for det andre kan jeg ikke se at du har satt opp noen projection matrise. glRotate brukes slik: glRotate(x_akse, y_akse, z_akse, vinkel) vinkel MÅ være mer enn null for å få noen effekt. For å sette perspektiv, har du tre muligheter: du kan bruke glFrustum funksjonen, gluPerspective funksjonen, eller lage din egen matrise. gluPerspective er greiest når du skal lære deg OpenGL. glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1, .0001f, 2); glMatrixMode(GL_MODELVIEW); Lenke til kommentar
-HagenZ- Skrevet 28. april 2010 Forfatter Del Skrevet 28. april 2010 Hmmm, virker til å ha liten effekt... #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(0.0, 0.0, 1.0, 0.5); glBegin(GL_TRIANGLE_STRIP); glColor3d(1.0, 0.0, 0.0); glVertex3d(-0.75, -0.75, 1.0); glColor3d(0.0, 1.0, 0.0); glVertex3d( 0.75, -0.75, 1.0); glColor3d(1.0, 1.0, 1.0); glVertex3d( 0.0, 0.75, 1.0); glColor3d(0.0, 0.0, 1.0); glVertex3d( 0.0, -0.75, -1.0); glColor3d(1.0, 0.0, 0.0); glVertex3d(-0.75, -0.75, 1.0); glEnd(); glPopMatrix(); glFinish(); glutSwapBuffers(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitWindowSize(800, 600); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("OpenGL Depth Test"); glutDisplayFunc(display); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(0, 1, .0001f, 2); // noen annet enn 0 i 1 param gjør skjermen svart, hmm? glMatrixMode(GL_MODELVIEW); glClearColor(0, 0, 0, 0); glutMainLoop(); } Lenke til kommentar
animorten Skrevet 29. april 2010 Del Skrevet 29. april 2010 (endret) glRotate(x_akse, y_akse, z_akse, vinkel)Jeg tror vinkelen skal være først. void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) Endret 29. april 2010 av animorten Lenke til kommentar
GeirGrusom Skrevet 29. april 2010 Del Skrevet 29. april 2010 (endret) Ja, godt mulig Har ikke brukt glRotate osv. siden jeg startet med OpenGL, nå går det i Quaternions og slikt. Trådstarter må også flytte kameraet vekk fra modellen, eller mer korrekt: modellen vekk fra kameraet. Endret 29. april 2010 av GeirGrusom Lenke til kommentar
LostOblivion Skrevet 12. mai 2010 Del Skrevet 12. mai 2010 (endret) #include <GL/glut.h> static float rotation = 0.0f; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Ikke gå ut ifra at matrisen er I. glTranslatef(0.0f, 0.0f, -5.0f); // 5 enheter bakover med kamera. glRotatef(rotation, 0.0f, 1.0f, 0.0f); // Litt rotation rundt Y-aksen. glPushMatrix(); glRotatef(0.0, 0.0, 1.0, 0.5); glBegin(GL_TRIANGLE_STRIP); glColor3d(1.0, 0.0, 0.0); glVertex3d(-0.75, -0.75, 1.0); glColor3d(0.0, 1.0, 0.0); glVertex3d( 0.75, -0.75, 1.0); glColor3d(1.0, 1.0, 1.0); glVertex3d( 0.0, 0.75, 1.0); glColor3d(0.0, 0.0, 1.0); glVertex3d( 0.0, -0.75, -1.0); glColor3d(1.0, 0.0, 0.0); glVertex3d(-0.75, -0.75, 1.0); glEnd(); glPopMatrix(); glutSwapBuffers(); // Trenger kun glFinish() ved ett framebuffer (GLUT_SINGLE til glutInitDisplayMode). } void idle() { rotation = rotation + 0.5f; // Burde gjøres med timing for å mappe til real-time. glutPostRedisplay(); // Si til GLUT at den skal tegne igjen. } void reshape(int w, int h) { glViewport(0, 0, w, h); // Tilpass området det tegnes til. glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, (float)w / (float)h, 0.1f, 1000.0f); // Sett opp passende perspektiv. } void initGL() { glClearColor(0, 0, 0, 0); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(0, 0); glutCreateWindow("OpenGL Depth Test"); glutDisplayFunc(display); glutReshapeFunc(reshape); // Når vinduet reshapes (også en gang ved oppstart). glutIdleFunc(idle); // Kalles når messageloopen ikke har noen meldinger. glutMainLoop(); } Et eksempel på å dele opp problemene i sine egne funksjoner. Her ser du også litt mer hva som skjer i verdenen du lager med en liten rotasjon. Lykke til! Endret 12. mai 2010 av LostOblivion Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå