000
16.02.2009, 23:33 Uhr
~Mr
Gast
|
Hallo,
ich habe eine ganz einfache "3D Szene" (einen Grid Boden) und eine Kugel erstellt, und zwar folgendermaßen:
C++: |
#include <windows.h> #include "gridroom.h" #include <GL/glut.h> #include <math.h> #include <stdio.h>
void init(void) {
//Hintergrund ist schwarz glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); glEnable(GL_DEPTH_TEST);
GLfloat light0_pos[]={1.0, 5.0, 3.0, 1.0}; /*Position der Lichtquelle*/ glLightfv(GL_LIGHT0, GL_POSITION, light0_pos); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); }
void grid(void){
glDisable(GL_LIGHTING);
/* * glTranslate(a,b,c) verschiebt den Koordinatenursprung * des aktuellen Koordinatensystems * um a Einheiten in die Richtung der X-Achse, um b * Einheiten in die Richtung der Y-Achse und um c Einheiten in die Richtung der Z-Achse. */ glTranslatef(1,-1,-1);
/* * glRotate(w,x,y,z) rotiert das * Koordinatensystem um w Grad um die Rotationsachse * welche durch (0,0,0) und (x,y,z) verläuft. glRotate * richtet also die Achsen neu aus. (Die Richtung der Achsen * ist z.B. wichtig für glTranslate) */ glRotatef(0,0,1,0);
//glScalef(0.9,0.5,0.5);
glBegin(GL_LINES); for(int i=-10;i<=10;++i) { glVertex3f(i,0,-10); glVertex3f(i,0,10);
glVertex3f(10,0,i); glVertex3f(-10,0,i); } glEnd();
glEnable(GL_LIGHTING);
}
GLfloat angle=0.0; void spin(void) { angle+=1; glutPostRedisplay(); }
//zeichnet die Kugel in die Szene void sphere(void){
glTranslatef(-1,1,-2); glRotatef(angle,0,1,0); // Set the current OpenGL color to red glColor4f(1.0, 0.0, 0.0, 1.0); // Draw a wire sphere glutWireSphere(0.3, 30, 30); }
void zeichenfunktion(void) {
glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
grid(); sphere();
glLoadIdentity();
glutSwapBuffers(); }
void reshape(int w, int h) { if(w==0) h = 1;
glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45,(float)w/h,0.1,100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
int main(int argc, char** argv) {
glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB|GLUT_DEPTH);
//wie z.B. das Fenster //hier die Größe glutInitWindowSize (640, 480);
//der Ort wo das Fenster erscheinen soll glutInitWindowPosition (100, 100);
//und der Titel des Fensters glutCreateWindow ("3Droom");
init ();
glutDisplayFunc(zeichenfunktion); glutReshapeFunc(reshape); glutIdleFunc(spin); glutMainLoop(); return 0; }
|
Mit diesem Code rotiert du Kugel um die y-Achse. Ich möchte aber, dass sie sich nicht um sich selbst dreht, sondern im Kreis fliegt. Das wäre ja dann die y-Achse des Bodens, sprich die Weltkoordinate?
Leider weiß ich nicht wie ich das bewerkstelligen soll. Wäre für jede Hilfe dankbar. |