求救!!!!!!!!!!!为什么3d模型导入之后看到显示啊?????????

代码如下:

#include "Main.h"



#include"CLoad3DS.h"
//在此处定义全局变量
CLoad3DS *gothicLoader=new(CLoad3DS);  
t3DModel gothicModel;  
float gothicTrans[10] = {   
    0, 0 , 0 ,     //表示在世界矩阵的位置  
        2,2,2,      //表示xyz放大倍数  
        0 , 0 , 0 , 0  //表示旋转  
};


//此处定义用户变量
GLfloat angle_X;
GLfloat angle_Y;
GLfloat t_x;
GLfloat eyex=0.0f;
GLfloat eyey=0.0f;
GLfloat eyez=-2.0f;
GLfloat centerx=0.0f;
GLfloat centery=0.0f;
GLfloat centerz=-10.0f;
GLfloat camera_speed=0.01f;




// 用户绘制场景相关的函数在此处定义
BOOL Initialize(GL_Window* window,Keys* keys)
{
//设置全局变量
OGL_window = window;
OGL_keys  = keys;


//建立时钟
SetTimer(window->hWnd,TIMER1,33,NULL);


// 在此处初始化绘制场景
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // 清屏为黑色
glClearDepth(1.0f); // 设置深度缓存
glDepthFunc(GL_LEQUAL); // 选择深度测试方式
glEnable(GL_DEPTH_TEST); // 开启深度测试
glShadeModel(GL_SMOOTH); // 阴暗处理采用平滑方式
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 最精细的透视计算


//导入模型 模型的文件夹尽量这样设置   
    //然后模型贴图 装在Data/pic里面  一定要跟前面截图的文件夹名字一样,想改得去CLoad3DS文件里面改  
    gothicLoader->Import3DS(&gothicModel, "Data/3ds/01.3DS"); 




return TRUE; // 初始化成功返回TRUE
}
//坐标系的绘制
void DrawPlane(GLfloat length=10.0f)
{
GLfloat L=length/2;
glLineWidth(2.0f);//定义线宽
glDisable(GL_TEXTURE_2D); // 关闭2D纹理映射
//绘制X轴
glBegin(GL_LINES);  //X轴正方向
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(L,0.0f,0.0f);
glEnd();
glLineStipple(2,0x0C03);//X轴负方向
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINES);  
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(-L,0.0f,0.0f);
glEnd();
glDisable(GL_LINE_STIPPLE);
glBegin(GL_LINE_STRIP);//X轴箭头
   glVertex3f(L-0.3,0.3f,0.0f);
glVertex3f(L,0.0f,0.0f);
   glVertex3f(L-0.3,-0.3f,0.0f);
glEnd();
glBegin(GL_LINES);//字母X
glVertex3f(L+0.2f,0.2f,0.0f);
glVertex3f(L+0.4f,-0.2f,0.0f);
glEnd();
glBegin(GL_LINES);
glVertex3f(L+0.2f,-0.2f,0.0f);
glVertex3f(L+0.4f,0.2f,0.0f);
glEnd();
//绘制Y轴
glBegin(GL_LINES);  //Y轴正方向
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,L,0.0f);
glEnd();
glLineStipple(2,0x0C03);//Y轴负方向
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINES);  
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,-L,0.0f);
glEnd();
glDisable(GL_LINE_STIPPLE);
glBegin(GL_LINE_STRIP);//Y轴箭头
   glVertex3f(0.3f,L-0.3f,0.0f);
glVertex3f(0.0f,L,0.0f);
   glVertex3f(-0.3f,L-0.3f,0.0f);
glEnd();
glBegin(GL_LINE_STRIP);//字母Y
glVertex3f(0.0f,L+0.3f,0.0f);
glVertex3f(0.0f,L+0.5f,0.0f);
glVertex3f(0.2f,L+0.7f,0.0f);
glEnd();
glBegin(GL_LINES);
glVertex3f(0.0f,L+0.5f,0.0f);
glVertex3f(-0.2f,L+0.7f,0.0f);
glEnd();
//绘制Z轴
glBegin(GL_LINES);  //z轴正方向
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,L);
glEnd();
glLineStipple(2,0x0C03);//z轴负方向
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINES);  
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,-L);
glEnd();
glDisable(GL_LINE_STIPPLE);
glBegin(GL_LINE_STRIP);//Z轴箭头
   glVertex3f(-0.3f,0.0f,L-0.3f);
glVertex3f(0.0f,0.0f,L);
   glVertex3f(0.3f,0.0f,L-0.3f);
glEnd();
glBegin(GL_LINE_STRIP);//绘制字母Z
glVertex3f(-0.4f,-0.2f,L);
glVertex3f(-0.2f,-0.2f,L);
glVertex3f(-0.4f,-0.4f,L);
glVertex3f(-0.2f,-0.4f,L);
glEnd();
glColor3f(1.0f,1.0f,1.0f);//将画笔设置为白色,否则可能干扰后续绘制工作
}
//绘制立方体
void DrawCube(GLfloat width, GLfloat height, GLfloat depth)
{
GLfloat x = width / 2, y = height / 2, z = depth / 2;  //临时变量
glBegin(GL_QUADS);
//前面(front)
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(-x, -y, z);
glVertex3f(x, -y, z);
glVertex3f(x, y, z);
glVertex3f(-x, y, z);
//背面(back)
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(x, -y, -z);
glVertex3f(-x, -y, -z);
glVertex3f(-x, y, -z);
glVertex3f(x, y, -z);
//右侧面(right)
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(x, -y, z);
glVertex3f(x, -y, -z);
glVertex3f(x, y, -z);
glVertex3f(x, y, z);
//左侧面(left)
glVertex3f(-x, -y, -z);
glVertex3f(-x, -y, z);
glVertex3f(-x, y, z);
glVertex3f(-x, y, -z);
//顶面(top)
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-x, y, z);
glVertex3f(x, y, z);
glVertex3f(x, y, -z);
glVertex3f(-x, y, -z);
//底面(bottom)
glVertex3f(-x, -y, -z);
glVertex3f(x, -y, -z);
glVertex3f(x, -y, z);
glVertex3f(-x, -y, z);
glEnd();
}
//绘制金字塔
void DrawPyramid(GLfloat width,GLfloat depth,GLfloat height)
{
GLfloat x = width / 2, y = height, z = depth / 2;
glColor3ub(217, 167, 22);
glBegin(GL_TRIANGLES);
//前面(font)
glVertex3f(x, 0, z);
glVertex3f(-x, 0, z);
glVertex3f(0, y, 0);
//背面(back)
glVertex3f(x, 0, -z);
glVertex3f(-x, 0, -z);
glVertex3f(0, y, 0);
//左侧面(left)
glColor3ub(217, 122, 0);
glVertex3f(-x, 0, z);
glVertex3f(-x, 0, -z);
glVertex3f(0, y, 0);
//右侧面(right)
glVertex3f(x, 0, z);
glVertex3f(x, 0, -z);
glVertex3f(0, y, 0);
glEnd();
//底面(bottom)
glBegin(GL_QUADS);
glVertex3f(x, 0, z);
glVertex3f(x, 0, -z);
glVertex3f(-x, 0, -z);
glVertex3f(-x, 0, z);
glEnd();
}
//XOZ参考面的绘制
void ReferPlane_XOZ(void)
{
//绘制平面网格
glColor3f(0.0f,0.5f,0.0f);
glDisable(GL_TEXTURE_2D);  //关闭纹理映射
glBegin(GL_LINES);
for(int i=-30;i<=30;i++)
{
glVertex3i(30,0,i);
glVertex3i(-30,0,i);
glVertex3i(i,0,30);
glVertex3i(i,0,-30);
}
glColor3f(1.0f,1.0f,1.0f);
glEnd();
}
//绘制场景
void DrawSceneGL(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  //清楚颜色和深度缓存
glLoadIdentity();  //重置当前矩阵
//在此处添加代码进行绘制:
//摄像机的绘制
gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,0.0f,1.0f,0.0f);

//坐标轴的引用
glPushMatrix();
glTranslatef(0.0f,0.0f,-10.0f);
DrawPlane(); 
ReferPlane_XOZ();
glPopMatrix();


//四面体X轴周期性缩放
glPushMatrix();
glTranslatef(3.0f, 0.0f, -10.0f);
glScalef(sin(0.05*t_x),sin(0.05*t_x),sin(0.05*t_x));
DrawCube(1.0f, 1.0f, 1.0f);
glPopMatrix();
//立方体Y轴周期性平移
glPushMatrix();
glTranslatef(0.0f,3.0f,-10.0f);
glTranslatef(0.0f,sin(0.05*t_x),0.0f);
DrawCube(1.0f,1.0f,1.0f);
glPopMatrix();
//金字塔-Z轴公转,Z轴自转
glPushMatrix();
glTranslatef(0.0f,0.0f,-13.0f);
glRotatef(angle_X, 0.0f, 0.0f, 1.0f);
glTranslatef(2.0f, 0.0f, 0.0f);
glRotatef(angle_Y, 0.0f, 1.0f, 0.0f);
DrawPyramid(1.0f,1.0f,1.0f);
glPopMatrix();
angle_X+=1.5f;
angle_Y-=1.5f;
t_x++;


glPushMatrix(); 
glTranslatef(0.0f,0.0f,0.0f);
    changeObject( gothicTrans );  
    drawModel(gothicModel,true,false);  
    glPopMatrix(); 


glFlush();  //刷新GL买了队列
}


// 在此处更新对消息的动作
void Update(void)
{
if(OGL_keys->keyDown[VK_ESCAPE]==TRUE)  //判断ESC键是否按下
{
PostMessage(OGL_window->hWnd,WM_QUIT,0,0);  //结束程序
}
if(OGL_keys->keyDown[VK_F1] == TRUE)  //判断F1是否按下
{
PostMessage(OGL_window->hWnd,WM_TOGGLEFULLSCREEN,0,0);  //在全屏/窗口模式键切换
}
if(OGL_keys->keyDown[VK_UP]==TRUE)
{
eyey+=camera_speed;
}
if(OGL_keys->keyDown[VK_DOWN]==TRUE)
{
eyey-=camera_speed;
}
if(OGL_keys->keyDown[VK_RIGHT]==TRUE)
{
eyex+=camera_speed;
}
if(OGL_keys->keyDown[VK_LEFT]==TRUE)
{
eyex-=camera_speed;
}
if(OGL_keys->keyDown['A']==TRUE)
{
eyez-=camera_speed;
}
if(OGL_keys->keyDown['D']==TRUE)
{
eyez+=camera_speed;
}
if(OGL_keys->keyDown[VK_SPACE]==TRUE)
{
eyex=0.0f;
eyey=0.0f;
eyez=-2.0f;
centerx=0.0f;
centery=0.0f;
centerz=-10.0f;
}
if(OGL_keys->keyDown['X']==TRUE)
{
eyex=0.0f;
eyey=0.0f;
eyez=-2.0f;
centerx=3.0f;
centery=0.0f;
centerz=-8.0f;
}
if(OGL_keys->keyDown['Y']==TRUE)
{
eyex=0.0f;
eyey=0.0f;
eyez=-2.0f;
centerx=0.0f;
centery=3.0f;
centerz=-8.0f;
}
if(OGL_keys->keyDown['Z']==TRUE)
{
eyex=0.0f;
eyey=0.0f;
eyez=-8.0f;
centerx=0.0f;
centery=0.0f;
centerz=-13.0f;
}
}
// 在此处做退出前扫尾工作
void Deinitialize(void) // 在此处做退出前扫尾工作
{
KillTimer(OGL_window->hWnd, TIMER1); // 释放时钟
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值