用OpenGL码一艘战舰~哈哈

/*

还是得现配置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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值