Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » Kugel rotieren im Kreis

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.02.2009, 11:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Ich kann dir den Code dazu nicht basteln, weil ich mich mit OpenGL nicht beschäftigt habe aber nen Kreis/Kreisbahn bekommst du indem du beherzigst, dass gilt

(x-x0)^2 + (y-y0)^2 = r^2

Siehe hier...
http://de.wikipedia.org/wiki/Kreis_(Geometrie)

Vom Prinzip her musst du mit dem Programm "nur umsetzen" dass sich die Kugel auf den Punkten dieser Kreisbahn bewegt (und eben nicht woanders.

r ist ja dein gewünschte Radius und x0, y0 definieren dir den Mittelpunkt um den sich bewegt werden soll... Wenn du nun ein Stück in x richtung gehst kennst du damit automatisch die passende y komponente (bzw kannst die berechnen)...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.02.2009, 23:51 Uhr
mmc20
puss in boots


oder einfach den zähler von 0 bis 360grad laufen lassen und jeweils den sinus/cosinus dazurechnen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.02.2009, 14:09 Uhr
~Mr
Gast


Danke für eure Antworten.
Hab es jetzt o weit, dass er sich entlang der x-Achse hin und her bewegt. Das mit der Kreisbewegung bekomme ich dann hoffentlich auch noch hin. Sonsat meld ich mich nochmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: