📄 cube.h
字号:
#pragma once
#include "sphere.h"
float frame_interval;
class CCube :public CObject
{
public:
float hside;
CSphere bsphere;
float angle;
float speed;
bool showcube,showsphere;
float r,g,b;
CVector pos;
CCube()
{}
CCube( float x, float y, float z, float _r, float _g, float _b , float _hside,
bool wireFrame, float _speed ,bool _showcube, bool _showsphere )
{
pos.x = x; pos.y = y; pos.z = z;
r = _r; g =_g; b = _b;
hside = _hside;
bsphere.wireFrame = wireFrame;
speed = _speed;
type = "cube";
bsphere.r = 1.0; bsphere.g = 1.0; bsphere.b = 1.0;
bsphere.radius = sqrt(2*hside*hside);
bsphere.pos = pos;
angle = 0.0;
bsphere.angle = 0.0;
showcube = _showcube;
showsphere = _showsphere;
bsphere.radius = sqrt(2*hside*hside)*1.25;
}
void Render()
{
glPushMatrix();
glTranslatef(pos.x,pos.y,pos.z);
glRotatef( angle*RAD_TO_DEG, 0.0, 1.0, 0.0 );
if (showcube)
{
// back
CPlane p1( hside, -hside, -hside, -hside, -hside, -hside,
-hside, hside, -hside, hside, hside, -hside,
r, g, b, -1,1);
// front
CPlane p2(-hside, -hside, hside, hside, -hside, hside,
hside, hside, hside, -hside, hside, hside,
r, g-0.2, b,-1,1);
// left
CPlane p3( -hside, -hside, -hside, -hside, -hside, hside,
-hside, hside, hside, -hside, hside, -hside,
r, g-0.1, b, -1,1);
// right
CPlane p4( hside, -hside, hside, hside, -hside, -hside,
hside, hside, -hside, hside, hside, hside,
r, g-0.1, b, -1,1);
// top
CPlane p5( -hside, hside, hside,
hside, hside, hside,
hside, hside, -hside,
-hside, hside, -hside,
r, g, b, 2,1);
p1.Render(); p2.Render(); p3.Render(); p4.Render(); p5.Render();
}
glPopMatrix();
if (bsphere.wireFrame && showsphere)
bsphere.Render();
}
void MoveForward( CCamera *camera )
{
pos.x -= sin( angle ) * speed * 120.0 * frame_interval;
pos.z -= cos( angle ) * speed * 120.0 * frame_interval;
camera->view.x = pos.x;
camera->view.z = pos.z;
camera->pos.x -= sin( angle ) * speed * 120.0 * frame_interval;
camera->pos.z -= cos( angle ) * speed * 120.0 * frame_interval;
bsphere.pos = pos;
}
void MoveBackward(CCamera *camera)
{
pos.x += sin( angle ) * speed * 120.0 * frame_interval;
pos.z += cos( angle ) * speed * 120.0 * frame_interval;
camera->view.x = pos.x;
camera->view.z = pos.z;
camera->pos.x += sin( angle ) * speed * 120.0 * frame_interval;
camera->pos.z += cos( angle ) * speed * 120.0 * frame_interval;
bsphere.pos = pos;
}
void TurnLeft(CCamera *camera)
{
angle += speed * 120.0 * frame_interval;
camera->Rotate(speed* 120.0 * frame_interval,0,1,0);
bsphere.angle += speed * 120.0 * frame_interval;
}
void TurnRight(CCamera *camera)
{
angle -= speed * 120.0 * frame_interval;
camera->Rotate(-speed * 120.0 * frame_interval,0,1,0);
bsphere.angle -= speed * 120.0 * frame_interval;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -