OpenGL simpler Roboter

  animation, c++, glut, opengl, rotation

Servus,

und zwar habe ich einen simplen "Roboter" mit openGL erstellt. Nun will ich die Beine und die arme beweglich machen. Leider weiß ich nicht wirklich wie ich das angehen soll. Habe es soweit,dass ich einen Arm um die eigen x Achse schwenken lasse. Jedoch will ich nicht das er einmal komplett durchschwenkt sondern es wie ein "normales" schwenken beim laufen ausschauen soll. Habe mit opengl erst vor 2 Tagen angefangen und wäre für jeden Ratschlag oder auch Lösungsvorschlag dankbar.

   #include <iostream> 
#include <GL/freeglut.h>         
#include "Wuerfel.h"

static float fRHand = 0., fRUnterHand = 0;
static float fX = 1, fY = 1, fZ = 1;



void Init()
{
   
   glClearColor(0, 0, 0, 1);
   glEnable(GL_DEPTH_TEST);
}

void RenderScene() 
{
   glLoadIdentity();   
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


   gluLookAt(0,0., 3    // Betrachterposition
                   , 0., 0., 0.,//Blickziel
                   0, 0.1, 0.); // Oben-Betrachter

   //KOPF
   glTranslatef(0.0, 0.5, 0.0);
   glColor3f(0.8, 0.5, 0.2);
   Wuerfel(0.3);
   glPopMatrix();

   //KÖRPER
   glPushMatrix();
   glScalef(1.3, 2., 2.);
   glTranslatef(0.0, -0.25, 0.0);
   Wuerfel(0.4);
   glPopMatrix();

   //LINKES BEIN
   glPushMatrix();
   glScalef(0.5, 2., 0.3);
   glTranslatef(-0.4, -0.6, 0.0);
   Wuerfel(0.2);
   glPopMatrix();

   //RECHTES BEIN
   glPushMatrix();
   glScalef(0.5, 2., 0.3);
   glTranslatef(0.4, -0.6, 0.0);
   Wuerfel(0.2);
   glPopMatrix();


   //LINKER OBERARM
   glPushMatrix();
   //glRotatef(fRotation, 0.1, 0.0, 0.0);
   glScalef(0.4, 1.4, 0.3);
   glTranslatef(-1.0, -0.25, 0.0);
   Wuerfel(0.3);
   glPopMatrix();

   //LINKER UNTERARM
   glPushMatrix();
   glScalef(0.4, 0.8, 0.3);
   glTranslatef(-1., -0.8, 0.0);
   Wuerfel(0.2);
   glPopMatrix();



   //RECHTER OBERARM
   glRotatef(fRHand += 0.2, 1., 0., 0.);
   glPushMatrix();
   glScalef(0.4, 1.4, 0.3);
   glTranslatef(1.0, -0.25, 0.0);
   Wuerfel(0.3);
   glPopMatrix();

   //RECHTER UNTERARM
   glPushMatrix();
   glScalef(0.4, 0.8, 0.3);
   glTranslatef(1., -0.8, 0.0);
   glRotatef(fRUnterHand += 0.2, 0.5, 0., 0.);
   Wuerfel(0.2);
   glPopMatrix();

   
   

   

   

   glutSwapBuffers();
}


void Reshape(int width, int height)
{
   
   
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glViewport(0, 0, width, height);
   gluPerspective(45., 1, 0.1, 8.); // perspektivische Kamera
   glMatrixMode(GL_MODELVIEW);


}

void Animate(int value)
{


   glutPostRedisplay();
   int wait_msec = 10;
   glutTimerFunc(wait_msec, Animate, ++value);
}

int main(int argc, char **argv)
{
   glutInit(&argc, argv);                
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize(600, 600);         
   glutCreateWindow("Name_1; Name_2");  
   glutDisplayFunc(RenderScene);        
   glutReshapeFunc(Reshape); 
   glutTimerFunc(10, Animate, 0);
   Init();
   glutMainLoop();
   return 0;
}
`

Source: Windows Questions C++

LEAVE A COMMENT