Hallo,
riesen Problem! Wir schreiben am Mo eine Klausur in Grafischer-Datenverarbeitung und haben ein kleines Problem. Wir können uns die Funktionsweise von GluLookAt nicht so ganz erklären, genauer die des UP-Vektors. Hier werden immer irgendwelche Objekte gedreht, nur so richtig klar ist mir das nicht!
Ich hätte hier mal ein paar SourceCodes:
#include <stdlib.h>
#include <stdio.h>
#include <GL/glut.h>
void display(void);
void init (void);
void reshape(int w, int h);
int main (int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow("muh");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0);
//hier zeigt das Objekt nach rechts!
glPushMatrix();
glScalef(2.0, 1.0, 1.0);
glutWireCube(1.0);
glPopMatrix();
glPushMatrix();
glTranslatef(1.0, 0.0, 0.0);
glRotatef(90.0, 0.0, 1.0, 0.0);
glutWireCone(0.5, 1.0, 30.0, 30.0);
glPopMatrix();
glFlush();
}
void init(void){
glShadeModel(GL_FLAT);
glClearColor(1.0,1.0,1.0,1.0);
}
void reshape(int w, int h)
{
glViewport(0,0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2.0, 3.0, -2.0, 2.0, 0.0, 20.0);
glMatrixMode(GL_MODELVIEW);
}
-> bei diesem Programm zeigt es allerdings nach oben (in der Ausganssituation): Warum nicht auch nach rechts?
#include <stdlib.h>
#include <GL/glut.h>
void display(void);
void init(void);
void reshape(int w, int h);
void keyboard(unsigned char key, int x, int y);
int main (int argc, char **argv){
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow(argv[0]);
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex3d(0.0,0.8,0.0);
glVertex3d(0.4,0.6,0.0);
glVertex3d(0.4,-0.8,0.0);
glVertex3d(-0.4,-0.8,0.0);
glVertex3d(-0.4,0.6,0.0);
glEnd();
glutSwapBuffers();
}
void init(void){
glClearColor(1.0,1.0,1.0,1.0);
glColor3f(1.0,0.0,0.0);
}
void reshape(int w, int h)
{
glViewport(0,0, (GLsizei)400, (GLsizei)400);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0,0.0,1.0, 0.0,0.0,0.0, 0.0,1.0,0.0);
}
void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case '1':
glRotatef(-45.0,0.0,0.0,1.0);
glPushMatrix();
glutPostRedisplay();
break;
case '2':
glScalef(1.0,-0.5,1.0);
glutPostRedisplay();
break;
case '3':
glLoadIdentity();
glRotatef(45.0,0.0,0.0,1.0);
glutPostRedisplay();
break;
case '4':
exit(0);
default:
break;
}
}
Unser Prof. konnte uns das nicht wirklich näher bringen und hoffe nun, daß das hier jemand machen kann. Sowas kommt nämlich immer dran und dann wäre es schlecht, wenn ichs net kann
Über Hilfe würde ich mich freuen...
MfG