Code:
#include <GL/glut.h>
#include <GL/glu.h>
using namespace std;
float legsright = 30.0f;
float legsleft = 30.f;
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();
//dog's right front leg
glPushMatrix();
glRotatef(legsright,0.0,0.0,-1.0);
frontleg();//thigh
bottomleg();//shin
rightfrontfoot();//foot
glPopMatrix();
//dog's right back leg
glPushMatrix();
glRotatef(legsright,0.0,0.0,-1.0); //dogs right front leg and back leg are connected with this same rotate
backleg();
bottombackleg();
rightbackfoot();
glPopMatrix();
// dog's left front leg
glPushMatrix();
glRotatef(legsleft,0.0,0.0,-1.0);
frontlegl();//thigh
bottomlegl();//shin
leftfrontfoot();//foot
glPopMatrix();
// need a second rotate for the left back and front legs remeber to make an update at the bottom a varible ect
glPushMatrix();
glRotatef(legsleft,0.0,0.0,-1.0);
backlegl();
bottombacklegl();
leftbackfoot();
glPopMatrix();
glutSwapBuffers();
}
void update(int value) {
legsright += 2.0f;
if (legsright > 30)
{
legsright -= 30;
}
glutPostRedisplay();
glutTimerFunc(30,update,0); // change speed
}
void update2(int value) {
legsleft += 2.0f;
if (legsleft > 30)
{
legsleft -= 30;
}
glutPostRedisplay();
glutTimerFunc(30,update2,0); // change speed
}
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();
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();
glutTimerFunc(30,update,0);
glutTimerFunc(25, update2, 0);
glutMainLoop();
}