Heya,
I have been reading the tutorial(http://www.cprogramming.com/tutorial/gl6.html) for animating a Robot in OpenGl and I am I complete noob when it comes to OpenGl only been learning for about a month. Basically I am trying to animate a dog to walk around however my code seems to be a lot different to the way you have drawn and animated your Robot. Anyway I was wondering if someone could give me a hand with this. Basically I have the rough outline of my dog and now I need to animate it to walk around the environment. How do I go about doing this with the code I have already written. My code seems different to how a lot of people would do it but it does the trick.
Here is my code:
Code:
#include <GL/glut.h>
#include <GL/glu.h>
using namespace std;
const float BODY_LENGTH = 0.5;
const float NECK_LENGTH = 0.5;
const float HEAD_LENGTH = 0.45;
const float FRONTLEG_LENGTH = 0.5;
const float FRONTLEGL_LENGTH = 0.5;
const float BOTTOMLEG_LENGTH = 0.9;
const float BOTTOMLEGL_LENGTH = 0.9;
const float BACKLEG_LENGTH = 0.5;
const float BACKLEGL_LENGTH = 0.5;
const float BOTTOMBACKLEG_LENGTH = 0.9;
const float BOTTOMBACKLEGL_LENGTH = 0.9;
const float RIGHTFRONTFOOT_LENGTH = 0.2;
const float LEFTFRONTFOOT_LENGTH = 0.2;
const float RIGHTBACKFOOT_LENGTH = 0.2;
const float LEFTBACKFOOT_LENGTH = 0.2;
void leftbackfoot()
{
glPushMatrix();
glTranslatef(-0.3,(LEFTBACKFOOT_LENGTH*-6.0),-0.4);
glScalef(0.5,LEFTBACKFOOT_LENGTH,0.3);
glutWireCube(1.0);
glPopMatrix();
}
void rightbackfoot()
{
glPushMatrix();
glTranslatef(-0.3,(RIGHTBACKFOOT_LENGTH*-6.0),0.4);
glScalef(0.5,RIGHTBACKFOOT_LENGTH,0.3);
glutWireCube(1.0);
glPopMatrix();
}
void leftfrontfoot()
{
glPushMatrix();
glTranslatef(0.7,(LEFTFRONTFOOT_LENGTH*-6.0),-0.4);
glScalef(0.5,LEFTFRONTFOOT_LENGTH,0.3);
glutWireCube(1.0);
glPopMatrix();
}
void rightfrontfoot()
{
glPushMatrix();
glTranslatef(0.7,(RIGHTFRONTFOOT_LENGTH*-6.0),0.4);
glScalef(0.5,RIGHTFRONTFOOT_LENGTH,0.3);
glutWireCube(1.0);
glPopMatrix();
}
void bottombacklegl()
{
glPushMatrix();
glTranslatef(-0.51,(BOTTOMBACKLEGL_LENGTH*-0.8),-0.4);
glScalef(0.15,BOTTOMBACKLEGL_LENGTH,0.15);
glutWireCube(1.0);
glPopMatrix();
}
void bottombackleg()
{
glPushMatrix();
glTranslatef(-0.51,(BOTTOMBACKLEG_LENGTH*-0.8),0.4);
glScalef(0.15,BOTTOMBACKLEG_LENGTH,0.15);
glutWireCube(1.0);
glPopMatrix();
}
void backlegl()
{
glPushMatrix();
glTranslatef(-0.51,(BACKLEGL_LENGTH*-0.3),-0.4);
glScalef(0.15,BACKLEGL_LENGTH,0.15);
glRotatef(-10,0.0,0.0,1.0);
glutWireCube(1.0);
glPopMatrix();
}
void backleg()
{
glPushMatrix();
glTranslatef(-0.5,(BACKLEG_LENGTH*-0.3),0.4);
glScalef(0.15,BACKLEG_LENGTH,0.15);
glRotatef(-10,0.0,0.0,1.0);
glutWireCube(1.0);
glPopMatrix();
}
void bottomlegl()
{
glPushMatrix();
glTranslatef(0.51,(BOTTOMLEGL_LENGTH*-0.8),-0.4);
glScalef(0.15,BOTTOMLEGL_LENGTH,0.15);
glutWireCube(1.0);
glPopMatrix();
}
void bottomleg()
{
glPushMatrix();
glTranslatef(0.51,(BOTTOMLEG_LENGTH*-0.8),0.4);
glScalef(0.15,BOTTOMLEG_LENGTH,0.15);
glutWireCube(1.0);
glPopMatrix();
}
void frontlegl()
{
//glRotatef(-20,0.0,1.0,0.0);
//glRotatef(90,0.0,0.0,1.0);
glPushMatrix();
glTranslatef(0.5,(FRONTLEGL_LENGTH*-0.3),-0.4);
glScalef(0.15,FRONTLEGL_LENGTH,0.15);
glRotatef(-10,0.0,0.0,1.0);
glutWireCube(1.0);
glPopMatrix();
}
void frontleg()
{
glPushMatrix();
glTranslatef(0.5,(FRONTLEG_LENGTH*-0.3),0.4);
glScalef(0.15,FRONTLEG_LENGTH,0.15);
glRotatef(-10,0.0,0.0,1.0);
glutWireCube(1.0);
glPopMatrix();
}
void body()
{
glPushMatrix();
glTranslatef(0.0,(BODY_LENGTH*0.5),0.0);
glScalef(1.5,BODY_LENGTH,1.0);
glutWireCube(1.0);
glPopMatrix();
}
void neck()
{
glPushMatrix();
glTranslatef(0.5,(NECK_LENGTH*1.3),0.0);
glScalef(0.5,NECK_LENGTH,0.3);
glRotatef(-15,0.0,0.0,1.0);
glutWireCube(1.0);
glPopMatrix();
}
void head()
{
glPushMatrix();
glTranslatef(0.68,(HEAD_LENGTH*2.4),0.0);
glScalef(0.8,HEAD_LENGTH,0.4);
glRotatef(-10,0.0,0.0,1.0);
glutWireCube(1.0);
glPopMatrix();
}
using namespace std;
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//gluLookAt(1.0,0.0,0.0, 0.0,0.0,0.0, 0.0,1.0,0.0);
gluLookAt(1.0,1.0,2.0, 0.0,0.0,0.0, 0.0,1.0,0.0);
body();
neck();
head();
frontleg();
frontlegl();
bottomleg();
bottomlegl();
backleg();
backlegl();
bottombackleg();
bottombacklegl();
rightfrontfoot();
leftfrontfoot();
rightbackfoot();
leftbackfoot();
glutSwapBuffers();
}
void init(){
glClearColor(0.0,0.0,0.0,0.0);
glEnable(GL_DEPTH_TEST);
glColor3f(1.0,1.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//glFrustum(-1.0,1.0, -1.0,1.0, 1.0,10.0);
glOrtho(-5.0,5.0, -5.0,5.0, -1.0,10.0);
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("Transformations");
glutDisplayFunc(display);
init();
glutMainLoop();
}
