/*
还是得现配置OPENGL,或者直接下载配置好的。
*/
#include <gl/glut.h>
#include <math.h>
#include <windows.h>
#define WIDTH 600
#define HEIGHT 600
#define MAX_CHAR 128
#define ColoredVertex(c, v) do{ glColor3fv(c); glVertex3fv(v); }while(0)
GLfloat angle = 0.0f;//旋转动画角度初始值
GLfloat anglex = 0.0f, angley = 0.0f, anglez = 0.0f;
static int Dxx=0,Dyy=0,Dzz=0;//旋转方向
int xx,yy,zz;//输入坐标
int limitx=360,limity=360,limitz=360;//旋转动画的最大角度
int playflag1=0,playflag2=0;
int movement_t=0;
void drawString(const char* str) {
static int isFirstCall = 1;
static GLuint lists;
if( isFirstCall ) { // 如果是第一次调用,执行初始化
// 为每一个ASCII字符产生一个显示列表
isFirstCall = 0;
// 申请MAX_CHAR个连续的显示列表编号
lists = glGenLists(MAX_CHAR);
// 把每个字符的绘制命令都装到对应的显示列表中
wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
}
// 调用每个字符对应的显示列表,绘制每个字符
for(; *str!='\0'; ++str)
glCallList(lists + *str);
}
void myDisplay(void)
{
static int list = 0;
GLint Gen3DObjectList();
if( list == 0 )list=Gen3DObjectList();
{
/* //光源
GLfloat sun_light_position[] = { 0.0f, 3.0f, -1.0f, 1.0f};
GLfloat sun_light_ambient[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat sun_light_diffuse[] = {0.5f, 0.5f, 0.5f, 1.0f};//不要设全零
GLfloat sun_light_specular[] = {1.0f, 1.0f, 1.0f, 1.0f};//不要设全零
glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, sun_light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, sun_light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, sun_light_specular);
//材质
GLfloat sun_mat_ambient[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_diffuse[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_specular[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_emission[] = {1.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_shininess = 0.0f;
glMaterialfv(GL_FRONT, GL_AMBIENT, sun_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, sun_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, sun_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, sun_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, sun_mat_shininess);
// glTranslatef(5.0f, 0.0f, 0.0f);
glutSolidSphere(0.3, 40, 32);//用作背景了
*/
// 如果显示列表不存在,则创建
//四个点的坐标
GLfloat
//船底
PointA[] = { 0 , 0.1f , 1.2f },//RED
PointD[] = { 0 , -0.1f , 1.0f },//YELLOW
PointB[] = { -0.23f, 0 , 0.8f},//GREEN
PointE[] = { -0.21f, -0.1f , 0.8f},
PointC[] = { 0.23f, 0 ,0.8f },//BLUE
PointF[] = { 0.21f, -0.1f , 0.8f},
PointG[] = {-0.2f, 0 ,-0.6f},
PointI[] = {-0.2f, -0.1f, -0.6f},
PointH[] = { 0.2f, 0 , -0.6f},
PointJ[] = { 0.2f, -0.1f, -0.6f},
//船舱
PointK[] = {-0.15f, 0 ,0.6f }, PointL[] = {-0.15f, -0.1f , -0.3f}, PointM[] = { 0.15f, -0.1f , -0.3f}, PointN[] = { 0.15f, 0 , 0.6f},
PointO[] = {-0.15f, 0.15f , 0.5f }, PointP[] = {-0.15f, 0.15f