📄 car.cpp
字号:
#include "objects/car.h"
#include "SDL.h"
#include "SDL_opengl.h"
Car::Car(float x, float y, float z, float rotx, float roty, float rotz):
Rendereable(x,y,z,rotx,roty,rotz)
{
int cube = glGenLists(1);
glNewList( cube, GL_COMPILE );
{
glBegin(GL_LINE_LOOP);
{
glVertex3f(.5f, .5f, .5f);
glVertex3f(.5f, .5f, -.5f);
glVertex3f(.5f, -.5f, -.5f);
glVertex3f(-.5f, -.5f, -.5f);
glVertex3f(-.5f, .5f, -.5f);
glVertex3f(-.5f, .5f, .5f);
glVertex3f(-.5f, -.5f, .5f);
glVertex3f(.5f, -.5f, .5f);
}
glEnd();
glBegin(GL_LINES);
{
glVertex3f(.5f, .5f, .5f);
glVertex3f(-.5f, .5f, .5f);
glVertex3f(.5f, .5f, -.5f);
glVertex3f(-.5f, .5f, -.5f);
glVertex3f(.5f, -.5f, .5f);
glVertex3f(.5f, -.5f, -.5f);
glVertex3f(-.5f, -.5f, .5f);
glVertex3f(-.5f, -.5f, -.5f);
}
glEnd();
}
glEndList();
int rueda = glGenLists(1);
GLUquadric* quadratic = gluNewQuadric();
glNewList( rueda, GL_COMPILE );
{
glTranslatef(0.f,0.f,-0.25);
gluCylinder(quadratic, .5f, .5f,.5f,10,3);
gluDisk(quadratic, .25f, .5f,10,3);
glTranslatef(0.f,0.f,.5f);
gluDisk(quadratic, .25f, .5f,10,3);
}
glEndList();
this->carDisplayListId = glGenLists(1);
glNewList(this->carDisplayListId, GL_COMPILE);
{
glColor3f(1.f,0.f,0.f);
glPushMatrix();
glScalef(5.f,1.f,2.f);
glCallList( cube );
glPopMatrix();
glPushMatrix();
glTranslatef(.5f,.75f,0.f);
glScalef(2.f,.5f,2.f);
glCallList( cube );
glPopMatrix();
glColor3f(.4f,.4f,1.f);
glPushMatrix();
glTranslatef(2.3f,-0.4f,1.3f);
glCallList( rueda );
glPopMatrix();
glPushMatrix();
glTranslatef(2.3f,-0.4f,-1.3f);
glCallList( rueda );
glPopMatrix();
glPushMatrix();
glTranslatef(-2.3f,-0.4f,1.3f);
glCallList( rueda );
glPopMatrix();
glPushMatrix();
glTranslatef(-2.3f,-0.4f,-1.3f);
glCallList( rueda );
glPopMatrix();
glColor3f(.8f,.8f,0.f);
glPushMatrix();
glTranslatef(-2.5f,0.f,-.6f);
glScalef(.1f,.3f,.3f);
gluSphere( quadratic, 1.f, 12, 12 );
glPopMatrix();
glPushMatrix();
glTranslatef(-2.5f,0.f,.6f);
glScalef(.1f,.3f,.3f);
gluSphere( quadratic, 1.f, 12, 12 );
glPopMatrix();
}
glEndList();
}
void Car::draw()
{
glPushMatrix();
glTranslatef( this->x, this->y, this->z );
if( this->rotx != 0 )
{
glRotatef( this->rotx, 1.f,0.f,0.f );
}
if( this->roty != 0 )
{
glRotatef( this->roty, 0.f,1.f,0.f );
}
if( this->rotz != 0 )
{
glRotatef( this->rotz, 0.f,0.f,1.f );
}
GLint args[2];
glGetIntegerv( GL_POLYGON_MODE, args );
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glCallList( this->carDisplayListId );
glPolygonMode( GL_FRONT_AND_BACK, args[1]);
glPopMatrix();
}
Car::~Car()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -