- C5900大小:323KB华为 C5900 原版驱动 支持 vista64 华为 C5900 原版驱动 支持 vista64 华为 C5900 原版驱动 支持 vista64华为 C5900 原版驱动 支持 vista64 华为 C5900 原版驱动 支持 vista64 华为 C5900 原版驱动 支持 vista645 133浏览会员免费
- 三维动画大小:4MB视点变换,旋转,加速减速,星空背景 太阳,光晕 各行星纹理 #include <AFXWIN.H> #include <GL/glut.h> #include <math.h> #include <afxinet.h> #include <wininet.h> #include <windows.h> #include <mmsystem.h> #pragma comment(lib, "winmm.lib") #pragma comment(lib,"wininet") // 纹理图像结构 typedef struct { int imgWidth; // 纹理宽度 int imgHeight; // 纹理高度 unsigned char byteCount; // 每个象素对应的字节数,3:24位图,4:带alpha通道的24位图 unsigned char *data; // 纹理数据 }TEXTUREIMAGE; // BMP文件头 #pragma pack(2) typedef struct { unsigned short bfType; // 文件类型 unsigned long bfSize; // 文件大小 unsigned short bfReserved1; // 保留位 unsigned short bfReserved2; // 保留位 unsigned long bfOffBits; // 数据偏移位置 }BMPFILEHEADER; #pragma pack() // BMP信息头 typedef struct { unsigned long biSize; // 此结构大小 long biWidth; // 图像宽度 long biHeight; // 图像高度 unsigned short biPlanes; // 调色板数量 unsigned short biBitCount; // 每个象素对应的位数,24:24位图,32:带alpha通道的24位图 unsigned long biCompression; // 压缩 unsigned long biSizeImage; // 图像大小 long biXPelsPerMeter;// 横向分辨率 long biYPelsPerMeter;// 纵向分辨率 unsigned long biClrUsed; // 颜色使用数 unsigned long biClrImportant; // 重要颜色数 }BMPINFOHEADER; // 定义窗口的标题、宽度、高度、全屏布尔变量 #define WIN_TITLE "模拟太阳系各星球的转动" const int WIN_WIDTH = 800; const int WIN_HEIGHT = 600; BOOL isFullScreen = FALSE; // 初始不为全屏 #define DEG_TO_RAD 0.017453 float angle=0.0; static GLdouble viewer[]= {0,0,0,0,0}; // 初始化视角 GLUquadricObj *quadric; // 建立二次曲面对象 GLfloat angle_Z; // 星空旋转角度 bool g_bOrbitOn = true; // 控制转动暂停 float g_fSpeedmodifier = 1.0f; // 时间控制 float g_fElpasedTime; double g_dCurrentTime; double g_dLastTime; GLfloat LightAmbient[] = { 1.0f, 1.0f, 1.0f, 0.0f }; // 环境光参数 GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 0.0f }; // 漫射光参数 GLfloat LightPosition[] = { 0.0f, 0.0f, 0.0f, 1.0f }; // 光源的位置 // 纹理图象 TEXTUREIMAGE skyImg; TEXTUREIMAGE sunImg; TEXTUREIMAGE rayImg; TEXTUREIMAGE mercuImg; TEXTUREIMAGE venusImg; TEXTUREIMAGE earthImg; TEXTUREIMAGE marsImg; TEXTUREIMAGE jupiterImg; TEXTUREIMAGE saturnImg; TEXTUREIMAGE uranusImg; TEXTUREIMAGE neptuneImg; TEXTUREIMAGE moonImg; GLuint texture[12]; // 纹理数组 // 星球速度定义 static float fSunSpin = 0.0f; // 太阳自转速度 static float fMercuSpin = 0.0f; // 水星自转速度 static float fMercuOrbit = 0.0f; // 水星公转速度 static float fVenusSpin = 0.0f; // 金星自转速度 static float fVenusOrbit = 0.0f; // 金星公转速度 static float fEarthSpin = 0.0f; // 地球自转速度 static float fEarthOrbit = 0.0f; // 地球公转速度 static float fMarsSpin = 0.0f; // 火星自转速度 static float fMarsOrbit = 0.0f; // 火星公转速度 static float fJupiterSpin = 0.0f; // 木星自转速度 static float fJupiterOrbit = 0.0f; // 木星公转速度 static float fSaturnSpin = 0.0f; // 土星自转速度 static float fSaturnOrbit = 0.0f; // 土星公转速度 static float fUranusSpin = 0.0f; // 天王星自转速度 static float fUranusOrbit = 0.0f; // 天王星公转速度 static float fNeptuneSpin = 0.0f; // 海王星自转速度 static float fNeptuneOrbit = 0.0f; // 海王星公转速度 static float fMoonSpin = 0.0f; // 月亮自转速度 static float fMoonOrbit = 0.0f; // 月亮公转速度 void MakeTexture(TEXTUREIMAGE textureImg, GLuint * texName) //转换为纹理 { glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //对齐像素字节函数 glGenTextures(1,texName); //第一个参数指定表明获取多少个连续的纹理标识符 glBindTexture(GL_TEXTURE_2D , *texName); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureImg.imgWidth,textureImg.imgHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, textureImg.data); } // 初始化OpenGL void InitGL(void) { glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //设置黑色背景 glClearDepth(2.0f); // 设置深度缓存 glEnable(GL_DEPTH_TEST); //启动深度测试 glDepthFunc(GL_LEQUAL); //深度小或相等的时候渲染 glShadeModel(GL_SMOOTH); //启动阴影平滑 glEnable(GL_CULL_FACE); //开启剔除操作效果 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //使用质量最好的模式指定颜色和纹理坐标的插值质量 glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // 设置环境光 glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // 设置漫反射光 glEnable(GL_LIGHTING); // 打开光照 glEnable(GL_LIGHT1); // 打开光源1 // 载入纹理 glEnable(GL_TEXTURE_2D); // 开启2D纹理映射 MakeTexture(skyImg, &texture;[0]); MakeTexture(sunImg, &texture;[1]); MakeTexture(rayImg, &texture;[2]); MakeTexture(mercuImg, &texture;[3]); MakeTexture(venusImg, &texture;[4]); MakeTexture(earthImg, &texture;[5]); MakeTexture(marsImg, &texture;[6]); MakeTexture(jupiterImg, &texture;[7]); MakeTexture(saturnImg, &texture;[8]); MakeTexture(uranusImg, &texture;[9]); MakeTexture(neptuneImg, &texture;[10]); MakeTexture(moonImg, &texture;[11]); quadric = gluNewQuadric(); // 建立一个曲面对象指针 gluQuadricTexture(quadric, GLU_TRUE); // 建立纹理坐标 gluQuadricDrawStyle(quadric, GLU_FILL); // 面填充 } void Display(void) { glLoadIdentity(); // 设置观察点的位置和观察的方向 gluLookAt(viewer[0],viewer[1],viewer[2],viewer[3],viewer[4],-5,0,1,0); //摄像机x,摄像机y,摄像机z, 目标点x,目标点y,目标点z, 摄像机顶朝向x,摄像机顶朝向y,摄像机顶朝向z // 获得系统时间使太阳系有动态效果 g_dCurrentTime = timeGetTime(); g_fElpasedTime = (float)((g_dCurrentTime - g_dLastTime) * 0.0005); g_dLastTime = g_dCurrentTime; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode( GL_MODELVIEW ); //指定GL_MODELVIEW是下一个矩阵操作的目标 glTranslatef(0.0f, 0.0f, -5.0f); // 将坐标系移入屏幕5.0f glRotatef(10, 1.0f ,0.0f, 0.0f); // 将坐标系绕x轴旋转10度 glEnable(GL_LIGHT0); // 打开光源0 /**********************************绘制背景星空********************************************/ glPushMatrix (); // 当前模型矩阵入栈 glTranslatef(-10.0f, 3.0f, 0.0f); glRotatef(angle_Z, 0.0f, 0.0f, 1.0f); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture[0]); // 星空纹理 glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f( 50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f( 50.0f, 50.0f, -50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(-50.0f, 50.0f, -50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, -1.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(-50.0f, -50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f( 50.0f, -50.0f, 50.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 50.0f, 50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(-50.0f, 50.0f, 50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 0.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f( 50.0f, -50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f( 50.0f, -50.0f, -50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(-50.0f, -50.0f, 50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 0.0f, -1.0f, 0.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(-50.0f, 50.0f, -50.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 50.0f, 50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f( 50.0f, 50.0f, -50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(-50.0f, 50.0f, 50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 1.0f, 0.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(-50.0f, 50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(-50.0f, -50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(-50.0f, 50.0f, -50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( -1.0f, 0.0f, 0.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(50.0f, -50.0f, -50.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(50.0f, 50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(50.0f, -50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(50.0f, 50.0f, -50.0f); glEnd(); glPopMatrix (); // 当前模型矩阵出栈 /**********************************绘制太阳************************************************/ glBindTexture(GL_TEXTURE_2D, texture[2]); // 光晕纹理 glEnable(GL_BLEND); // 开启混合 glDisable(GL_DEPTH_TEST); // 关闭深度测试 // 绘制太阳光晕 glDisable(GL_LIGHTING); // 关闭光照 glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 半透明混合函数 glColor4f(1.0f, 0.5f, 0.0f, 0.5f); // 设置RGBA值 glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glEnd(); glDisable(GL_BLEND); // 关闭混合 glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); // 开启光照 glLightfv(GL_LIGHT1, GL_POSITION, LightPosition); // 设置光源1位置 glBindTexture(GL_TEXTURE_2D, texture[1]); // 太阳纹理 // 将坐标系绕Y轴旋转fSunSpin角度,控制太阳自转 glRotatef(fSunSpin,0.0,1.0,0.0); gluSphere(quadric, 0.3f, 32, 32); // 绘制太阳球体 /**********************************绘制水星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fMercuOrbit角度,控制水星公转 glRotatef(fMercuOrbit, 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(0.5f, 0.0f, 0.0f); // 将坐标系右移0.5f glBindTexture(GL_TEXTURE_2D, texture[3]); // 水星纹理 // 将坐标系绕Z轴旋转fMercuSpin角度 控制水星自转 glRotatef(fMercuSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.04f, 32, 32); // 水星球体 glPopMatrix (); // 当前模型视图矩阵出栈 // 绘制轨道 glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(0.5f*sin(DEG_TO_RAD*angle),0,0.5f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制金星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fVenusOrbit角度,控制金星公转 glRotatef(fVenusOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);// 将坐标系绕X轴旋转-90度 glTranslatef(0.8f, 0.0f, 0.0f); // 将坐标系右移0.8f glBindTexture(GL_TEXTURE_2D, texture[4]); // 金星纹理 // 将坐标系绕Z轴旋转fVenusSpin角度,控制金星自转 glRotatef(fVenusSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.06f, 32, 32); // 金星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(0.8f*sin(DEG_TO_RAD*angle),0,0.8f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制地球************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fEarthOrbit角度,控制地球公转 glRotatef(fEarthOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);// 将坐标系绕X轴旋转-90度 glTranslatef(1.1f, 0.0f, 0.0f); // 将坐标系右移1.1f glBindTexture(GL_TEXTURE_2D, texture[5]); // 地球纹理 // 将坐标系绕Z轴旋转fEarthSpin角度,控制地球自转 glRotatef(fEarthSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.08f, 32, 32); // 地球球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.1f*sin(DEG_TO_RAD*angle),0,1.1f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制火星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fMarsOrbit角度,控制火星公转 glRotatef(fMarsOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(1.4f, 0.0f, 0.0f); // 将坐标系右移1.4f glBindTexture(GL_TEXTURE_2D, texture[6]); // 火星纹理 // 将坐标系绕Z轴旋转fMarsSpin角度,控制火星自转 glRotatef(fMarsSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.04f, 32, 32); // 火星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.4f*sin(DEG_TO_RAD*angle),0,1.4f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制木星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fJupiterOrbit角度,控制木星公转 glRotatef(fJupiterOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(1.7f, 0.0f, 0.0f); // 将坐标系右移1.7f glBindTexture(GL_TEXTURE_2D, texture[7]); // 木星纹理 // 将坐标系绕Z轴旋转fJupiterSpin角度,控制木星自转 glRotatef(fJupiterSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.13f, 32, 32); // 木星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.7f*sin(DEG_TO_RAD*angle),0,1.7f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制土星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fSaturnOrbit角度,控制土星公转 glRotatef(fSaturnOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(1.9f, 0.0f, 0.0f); // 将坐标系右移1.9f glBindTexture(GL_TEXTURE_2D, texture[8]); // 土星纹理 // 将坐标系绕Z轴旋转fSaturnSpin角度,控制土星自转 glRotatef(fSaturnSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.1f, 32, 32); // 土星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.9f*sin(DEG_TO_RAD*angle),0,1.9f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制天王星**********************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fUranusOrbit角度,控制天王星公转 glRotatef(fUranusOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(2.1f, 0.0f, 0.0f); // 将坐标系右移2.1f glBindTexture(GL_TEXTURE_2D, texture[9]); // 天王星纹理 // 将坐标系绕Z轴旋转fUranusSpin角度,控制天王星自转 glRotatef(fUranusSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.1f, 32, 32); // 天王星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(2.1f*sin(DEG_TO_RAD*angle),0,2.1f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制海王星**********************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fNeptuneOrbit角度,控制海王星公转 glRotatef(fNeptuneOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(2.3f, 0.0f, 0.0f); // 将坐标系右移2.3f glBindTexture(GL_TEXTURE_2D, texture[10]); // 海王星纹理 // 将坐标系绕Z轴旋转fNeptuneSpin角度,控制海王星自转 glRotatef(fNeptuneSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.08f, 32, 32); // 海王星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(2.3f*sin(DEG_TO_RAD*angle),0,2.3f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制月亮************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // glBindTexture(GL_TEXTURE_2D, texture[11]); // 月亮纹理 glPushMatrix (); // 将坐标系绕Y轴旋转fEarthOrbit角度,控制月亮跟随地球 glRotatef(fEarthOrbit , 0.0f, 1.0f, 0.0f); glTranslatef(1.1f, 0.0f, 0.0f); // 将坐标系右移1.1f // 将坐标系绕Y轴旋转fMoonOrbit角度,控制月亮公转 glRotatef(fMoonOrbit , 0.0f, 1.0f, 0.0f); glTranslatef(0.15f, 0.0f, 0.0f); // 将坐标系绕Y轴旋转fMoonSpin角度,控制月亮自转 glBindTexture(GL_TEXTURE_2D, texture[11]); glRotatef(fMoonSpin , 0.0f, 1.0f, 0.0f); gluSphere(quadric, 0.02, 32, 32); // 月亮球体 glPopMatrix (); // 控制各星球转动的速度 if( g_bOrbitOn == true ) { fSunSpin -= g_fSpeedmodifier * (g_fElpasedTime * 10.0f); fMercuSpin -= g_fSpeedmodifier * (g_fElpasedTime * 15.0f); fMercuOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 40.0f); fVenusSpin -= g_fSpeedmodifier * (g_fElpasedTime * 10.0f); fVenusOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 30.0f); fEarthSpin -= g_fSpeedmodifier * (g_fElpasedTime * 100.0f); fEarthOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 20.0f); fMarsSpin -= g_fSpeedmodifier * (g_fElpasedTime * 30.0f); fMarsOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 50.0f); fJupiterSpin -= g_fSpeedmodifier * (g_fElpasedTime * 90.0f); fJupiterOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 35.0f); fSaturnSpin -= g_fSpeedmodifier * (g_fElpasedTime * 90.0f); fSaturnOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 25.0f); fUranusSpin -= g_fSpeedmodifier * (g_fElpasedTime * 70.0f); fUranusOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 15.0f); fNeptuneSpin -= g_fSpeedmodifier * (g_fElpasedTime * 40.0f); fNeptuneOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 5.0f); fMoonSpin -= g_fSpeedmodifier * (g_fElpasedTime * 50.0f); fMoonOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 200.0f); } angle_Z += 0.01f; // 星空旋转 glutSwapBuffers(); // 交换双缓存 glFlush(); } void Reshape(int width, int height) { if (height==0) height=1; // 改变窗口 glViewport(0,0,width,height); // 设置视口 // 设置投影矩阵 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(viewer[0],viewer[1],viewer[2],viewer[3],viewer[4],-5,0,1,0); } void keyboard(unsigned char key, int x, int y) { switch(key) { case 'r': case 'R': // 视点上下左右移动 if(viewer[0]<=4.5) viewer[0]+=0.5; break; case 'l': case 'L': if(viewer[0]>=-6.0) viewer[0]-=0.5; break; case 'u': case 'U': if(viewer[1]<=4.5) viewer[1]+=0.1; break; case 'd': case 'D': if(viewer[1]>=-6.0) viewer[1]-=0.1; break; case'+': case '=': // 加速,减速,暂停 g_fSpeedmodifier+=1.0f; glutPostRedisplay(); break; case ' ': g_bOrbitOn = !g_bOrbitOn; glutPostRedisplay(); break; case'-': //按'-'减小运行速度 g_fSpeedmodifier-=1.0f; glutPostRedisplay(); break; case VK_ESCAPE: // 按ESC键时退出 exit(0); break; default: break; } } void special_keys(int s_keys, int x, int y) { switch(s_keys) { case GLUT_KEY_F1: // 按F1键时切换窗口/全屏模式 if(isFullScreen) { glutReshapeWindow(WIN_WIDTH, WIN_HEIGHT); glutPositionWindow(30, 30); isFullScreen = FALSE; } else { glutFullScreen(); isFullScreen = TRUE; } break; case GLUT_KEY_RIGHT: // 视角上下左右旋转 if(viewer[3]<=4.5) viewer[3]+=0.1; break; case GLUT_KEY_LEFT: if(viewer[3]>=-3.0) viewer[3]-=0.1; break; case GLUT_KEY_UP: if(viewer[4]<=4.5) viewer[4]+=0.1; break; case GLUT_KEY_DOWN: if(viewer[4]>=-4.5) viewer[4]-=0.1; break; default: break; } } void mouse(int btn, int state, int x, int y) // 远近视角 { if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) viewer[2]+=0.3; if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN&&viewer;[2]>=-3.9) viewer[2]-=0.3; } void LoadBmp(char *filename, TEXTUREIMAGE *textureImg) // 载入图片 { int i, j; FILE *file; BMPFILEHEADER bmpFile; BMPINFOHEADER bmpInfo; int pixel_size; // 初始化纹理数据 textureImg->imgWidth = 0; textureImg->imgHeight = 0; if (textureImg->data != NULL) { delete []textureImg->data; } // 打开文件 file = fopen(filename, "rb"); if (file == NULL) { return; } // 获取文件头 rewind(file); fread(&bmpFile;, sizeof(BMPFILEHEADER), 1, file); fread(&bmpInfo;, sizeof(BMPINFOHEADER), 1, file); // 验证文件类型 if (bmpFile.bfType != 0x4D42) { return; } // 获取图像色彩数 pixel_size = bmpInfo.biBitCount >> 3; // 读取文件数据 textureImg->data = new unsigned char[bmpInfo.biWidth * bmpInfo.biHeight * pixel_size]; for(i = 0 ; i < bmpInfo.biHeight; i++) { fseek(file, bmpFile.bfOffBits + (bmpInfo.biHeight - i - 1) * bmpInfo.biWidth * pixel_size, SEEK_SET); for (j = 0; j < bmpInfo.biWidth; j++) { // 红色分量 fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 2, sizeof(unsigned char), 1, file); // 绿色分量 fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 1, sizeof(unsigned char), 1, file); // 蓝色分量 fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 0, sizeof(unsigned char), 1, file); // Alpha分量 if (pixel_size == 4) { fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 3, sizeof(unsigned char), 1, file); } } } // 记录图像相关参数 textureImg->imgWidth = bmpInfo.biWidth; textureImg->imgHeight = bmpInfo.biHeight; textureImg->byteCount = pixel_size; fclose(file); } // 程序主函数 void main(int argc, char** argv) { //读图片 LoadBmp("Picture//Sky.bmp" , &skyImg;); LoadBmp("Picture//Sun.bmp" , &sunImg;); LoadBmp("Picture//Ray.bmp" , &rayImg;); LoadBmp("Picture//Mercu.bmp" , &mercuImg;); LoadBmp("Picture//Venus.bmp" , &venusImg;); //金星 LoadBmp("Picture//Earth.bmp" , &earthImg;); LoadBmp("Picture//Mars.bmp" , &marsImg;); //火星 LoadBmp("Picture//Jupiter.bmp" , &jupiterImg;); //木星 LoadBmp("Picture//Saturn.bmp" , &saturnImg;); //土星 LoadBmp("Picture//Uranus.bmp" , &uranusImg;); //天王星 LoadBmp("Picture//Neptune.bmp" , &neptuneImg;); //海王星 LoadBmp("Picture//Moon.bmp" , &moonImg;); glutInit(&argc;, argv); // 初始化GLUT库 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); // 初始化显示模式 glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT); // 初始化窗口大小 glutInitWindowPosition(20,20); // 初始化窗口位置 GLuint window = glutCreateWindow(WIN_TITLE); // 建立窗口 InitGL(); // 初始化OpenGL glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutKeyboardFunc(keyboard); glutSpecialFunc(special_keys); glutMouseFunc(mouse); glutIdleFunc(Display); // 设置窗口空闲时的处理函数 glutMainLoop(); // 进入事件处理循环 }视点变换,旋转,加速减速,星空背景 太阳,光晕 各行星纹理 #include <AFXWIN.H> #include <GL/glut.h> #include <math.h> #include <afxinet.h> #include <wininet.h> #include <windows.h> #include <mmsystem.h> #pragma comment(lib, "winmm.lib") #pragma comment(lib,"wininet") // 纹理图像结构 typedef struct { int imgWidth; // 纹理宽度 int imgHeight; // 纹理高度 unsigned char byteCount; // 每个象素对应的字节数,3:24位图,4:带alpha通道的24位图 unsigned char *data; // 纹理数据 }TEXTUREIMAGE; // BMP文件头 #pragma pack(2) typedef struct { unsigned short bfType; // 文件类型 unsigned long bfSize; // 文件大小 unsigned short bfReserved1; // 保留位 unsigned short bfReserved2; // 保留位 unsigned long bfOffBits; // 数据偏移位置 }BMPFILEHEADER; #pragma pack() // BMP信息头 typedef struct { unsigned long biSize; // 此结构大小 long biWidth; // 图像宽度 long biHeight; // 图像高度 unsigned short biPlanes; // 调色板数量 unsigned short biBitCount; // 每个象素对应的位数,24:24位图,32:带alpha通道的24位图 unsigned long biCompression; // 压缩 unsigned long biSizeImage; // 图像大小 long biXPelsPerMeter;// 横向分辨率 long biYPelsPerMeter;// 纵向分辨率 unsigned long biClrUsed; // 颜色使用数 unsigned long biClrImportant; // 重要颜色数 }BMPINFOHEADER; // 定义窗口的标题、宽度、高度、全屏布尔变量 #define WIN_TITLE "模拟太阳系各星球的转动" const int WIN_WIDTH = 800; const int WIN_HEIGHT = 600; BOOL isFullScreen = FALSE; // 初始不为全屏 #define DEG_TO_RAD 0.017453 float angle=0.0; static GLdouble viewer[]= {0,0,0,0,0}; // 初始化视角 GLUquadricObj *quadric; // 建立二次曲面对象 GLfloat angle_Z; // 星空旋转角度 bool g_bOrbitOn = true; // 控制转动暂停 float g_fSpeedmodifier = 1.0f; // 时间控制 float g_fElpasedTime; double g_dCurrentTime; double g_dLastTime; GLfloat LightAmbient[] = { 1.0f, 1.0f, 1.0f, 0.0f }; // 环境光参数 GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 0.0f }; // 漫射光参数 GLfloat LightPosition[] = { 0.0f, 0.0f, 0.0f, 1.0f }; // 光源的位置 // 纹理图象 TEXTUREIMAGE skyImg; TEXTUREIMAGE sunImg; TEXTUREIMAGE rayImg; TEXTUREIMAGE mercuImg; TEXTUREIMAGE venusImg; TEXTUREIMAGE earthImg; TEXTUREIMAGE marsImg; TEXTUREIMAGE jupiterImg; TEXTUREIMAGE saturnImg; TEXTUREIMAGE uranusImg; TEXTUREIMAGE neptuneImg; TEXTUREIMAGE moonImg; GLuint texture[12]; // 纹理数组 // 星球速度定义 static float fSunSpin = 0.0f; // 太阳自转速度 static float fMercuSpin = 0.0f; // 水星自转速度 static float fMercuOrbit = 0.0f; // 水星公转速度 static float fVenusSpin = 0.0f; // 金星自转速度 static float fVenusOrbit = 0.0f; // 金星公转速度 static float fEarthSpin = 0.0f; // 地球自转速度 static float fEarthOrbit = 0.0f; // 地球公转速度 static float fMarsSpin = 0.0f; // 火星自转速度 static float fMarsOrbit = 0.0f; // 火星公转速度 static float fJupiterSpin = 0.0f; // 木星自转速度 static float fJupiterOrbit = 0.0f; // 木星公转速度 static float fSaturnSpin = 0.0f; // 土星自转速度 static float fSaturnOrbit = 0.0f; // 土星公转速度 static float fUranusSpin = 0.0f; // 天王星自转速度 static float fUranusOrbit = 0.0f; // 天王星公转速度 static float fNeptuneSpin = 0.0f; // 海王星自转速度 static float fNeptuneOrbit = 0.0f; // 海王星公转速度 static float fMoonSpin = 0.0f; // 月亮自转速度 static float fMoonOrbit = 0.0f; // 月亮公转速度 void MakeTexture(TEXTUREIMAGE textureImg, GLuint * texName) //转换为纹理 { glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //对齐像素字节函数 glGenTextures(1,texName); //第一个参数指定表明获取多少个连续的纹理标识符 glBindTexture(GL_TEXTURE_2D , *texName); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureImg.imgWidth,textureImg.imgHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, textureImg.data); } // 初始化OpenGL void InitGL(void) { glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //设置黑色背景 glClearDepth(2.0f); // 设置深度缓存 glEnable(GL_DEPTH_TEST); //启动深度测试 glDepthFunc(GL_LEQUAL); //深度小或相等的时候渲染 glShadeModel(GL_SMOOTH); //启动阴影平滑 glEnable(GL_CULL_FACE); //开启剔除操作效果 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //使用质量最好的模式指定颜色和纹理坐标的插值质量 glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // 设置环境光 glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // 设置漫反射光 glEnable(GL_LIGHTING); // 打开光照 glEnable(GL_LIGHT1); // 打开光源1 // 载入纹理 glEnable(GL_TEXTURE_2D); // 开启2D纹理映射 MakeTexture(skyImg, &texture;[0]); MakeTexture(sunImg, &texture;[1]); MakeTexture(rayImg, &texture;[2]); MakeTexture(mercuImg, &texture;[3]); MakeTexture(venusImg, &texture;[4]); MakeTexture(earthImg, &texture;[5]); MakeTexture(marsImg, &texture;[6]); MakeTexture(jupiterImg, &texture;[7]); MakeTexture(saturnImg, &texture;[8]); MakeTexture(uranusImg, &texture;[9]); MakeTexture(neptuneImg, &texture;[10]); MakeTexture(moonImg, &texture;[11]); quadric = gluNewQuadric(); // 建立一个曲面对象指针 gluQuadricTexture(quadric, GLU_TRUE); // 建立纹理坐标 gluQuadricDrawStyle(quadric, GLU_FILL); // 面填充 } void Display(void) { glLoadIdentity(); // 设置观察点的位置和观察的方向 gluLookAt(viewer[0],viewer[1],viewer[2],viewer[3],viewer[4],-5,0,1,0); //摄像机x,摄像机y,摄像机z, 目标点x,目标点y,目标点z, 摄像机顶朝向x,摄像机顶朝向y,摄像机顶朝向z // 获得系统时间使太阳系有动态效果 g_dCurrentTime = timeGetTime(); g_fElpasedTime = (float)((g_dCurrentTime - g_dLastTime) * 0.0005); g_dLastTime = g_dCurrentTime; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode( GL_MODELVIEW ); //指定GL_MODELVIEW是下一个矩阵操作的目标 glTranslatef(0.0f, 0.0f, -5.0f); // 将坐标系移入屏幕5.0f glRotatef(10, 1.0f ,0.0f, 0.0f); // 将坐标系绕x轴旋转10度 glEnable(GL_LIGHT0); // 打开光源0 /**********************************绘制背景星空********************************************/ glPushMatrix (); // 当前模型矩阵入栈 glTranslatef(-10.0f, 3.0f, 0.0f); glRotatef(angle_Z, 0.0f, 0.0f, 1.0f); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture[0]); // 星空纹理 glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f( 50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f( 50.0f, 50.0f, -50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(-50.0f, 50.0f, -50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, -1.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(-50.0f, -50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f( 50.0f, -50.0f, 50.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 50.0f, 50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(-50.0f, 50.0f, 50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 0.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f( 50.0f, -50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f( 50.0f, -50.0f, -50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(-50.0f, -50.0f, 50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 0.0f, -1.0f, 0.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(-50.0f, 50.0f, -50.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 50.0f, 50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f( 50.0f, 50.0f, -50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(-50.0f, 50.0f, 50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( 1.0f, 0.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-50.0f, -50.0f, -50.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(-50.0f, 50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(-50.0f, -50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(-50.0f, 50.0f, -50.0f); glEnd(); glBegin(GL_QUADS); glNormal3f( -1.0f, 0.0f, 0.0f); glTexCoord2f(6.0f, 6.0f); glVertex3f(50.0f, -50.0f, -50.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(50.0f, 50.0f, 50.0f); glTexCoord2f(6.0f, 0.0f); glVertex3f(50.0f, -50.0f, 50.0f); glTexCoord2f(0.0f, 6.0f); glVertex3f(50.0f, 50.0f, -50.0f); glEnd(); glPopMatrix (); // 当前模型矩阵出栈 /**********************************绘制太阳************************************************/ glBindTexture(GL_TEXTURE_2D, texture[2]); // 光晕纹理 glEnable(GL_BLEND); // 开启混合 glDisable(GL_DEPTH_TEST); // 关闭深度测试 // 绘制太阳光晕 glDisable(GL_LIGHTING); // 关闭光照 glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 半透明混合函数 glColor4f(1.0f, 0.5f, 0.0f, 0.5f); // 设置RGBA值 glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glEnd(); glDisable(GL_BLEND); // 关闭混合 glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); // 开启光照 glLightfv(GL_LIGHT1, GL_POSITION, LightPosition); // 设置光源1位置 glBindTexture(GL_TEXTURE_2D, texture[1]); // 太阳纹理 // 将坐标系绕Y轴旋转fSunSpin角度,控制太阳自转 glRotatef(fSunSpin,0.0,1.0,0.0); gluSphere(quadric, 0.3f, 32, 32); // 绘制太阳球体 /**********************************绘制水星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fMercuOrbit角度,控制水星公转 glRotatef(fMercuOrbit, 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(0.5f, 0.0f, 0.0f); // 将坐标系右移0.5f glBindTexture(GL_TEXTURE_2D, texture[3]); // 水星纹理 // 将坐标系绕Z轴旋转fMercuSpin角度 控制水星自转 glRotatef(fMercuSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.04f, 32, 32); // 水星球体 glPopMatrix (); // 当前模型视图矩阵出栈 // 绘制轨道 glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(0.5f*sin(DEG_TO_RAD*angle),0,0.5f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制金星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fVenusOrbit角度,控制金星公转 glRotatef(fVenusOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);// 将坐标系绕X轴旋转-90度 glTranslatef(0.8f, 0.0f, 0.0f); // 将坐标系右移0.8f glBindTexture(GL_TEXTURE_2D, texture[4]); // 金星纹理 // 将坐标系绕Z轴旋转fVenusSpin角度,控制金星自转 glRotatef(fVenusSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.06f, 32, 32); // 金星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(0.8f*sin(DEG_TO_RAD*angle),0,0.8f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制地球************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fEarthOrbit角度,控制地球公转 glRotatef(fEarthOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);// 将坐标系绕X轴旋转-90度 glTranslatef(1.1f, 0.0f, 0.0f); // 将坐标系右移1.1f glBindTexture(GL_TEXTURE_2D, texture[5]); // 地球纹理 // 将坐标系绕Z轴旋转fEarthSpin角度,控制地球自转 glRotatef(fEarthSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.08f, 32, 32); // 地球球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.1f*sin(DEG_TO_RAD*angle),0,1.1f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制火星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fMarsOrbit角度,控制火星公转 glRotatef(fMarsOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(1.4f, 0.0f, 0.0f); // 将坐标系右移1.4f glBindTexture(GL_TEXTURE_2D, texture[6]); // 火星纹理 // 将坐标系绕Z轴旋转fMarsSpin角度,控制火星自转 glRotatef(fMarsSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.04f, 32, 32); // 火星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.4f*sin(DEG_TO_RAD*angle),0,1.4f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制木星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fJupiterOrbit角度,控制木星公转 glRotatef(fJupiterOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(1.7f, 0.0f, 0.0f); // 将坐标系右移1.7f glBindTexture(GL_TEXTURE_2D, texture[7]); // 木星纹理 // 将坐标系绕Z轴旋转fJupiterSpin角度,控制木星自转 glRotatef(fJupiterSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.13f, 32, 32); // 木星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.7f*sin(DEG_TO_RAD*angle),0,1.7f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制土星************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fSaturnOrbit角度,控制土星公转 glRotatef(fSaturnOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(1.9f, 0.0f, 0.0f); // 将坐标系右移1.9f glBindTexture(GL_TEXTURE_2D, texture[8]); // 土星纹理 // 将坐标系绕Z轴旋转fSaturnSpin角度,控制土星自转 glRotatef(fSaturnSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.1f, 32, 32); // 土星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(1.9f*sin(DEG_TO_RAD*angle),0,1.9f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制天王星**********************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fUranusOrbit角度,控制天王星公转 glRotatef(fUranusOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(2.1f, 0.0f, 0.0f); // 将坐标系右移2.1f glBindTexture(GL_TEXTURE_2D, texture[9]); // 天王星纹理 // 将坐标系绕Z轴旋转fUranusSpin角度,控制天王星自转 glRotatef(fUranusSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.1f, 32, 32); // 天王星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(2.1f*sin(DEG_TO_RAD*angle),0,2.1f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制海王星**********************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // 开启纹理 glPushMatrix (); // 当前模型视图矩阵入栈 // 将坐标系绕Y轴旋转fNeptuneOrbit角度,控制海王星公转 glRotatef(fNeptuneOrbit , 0.0f, 1.0f, 0.0f); glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); // 将坐标系绕X轴旋转-90度 glTranslatef(2.3f, 0.0f, 0.0f); // 将坐标系右移2.3f glBindTexture(GL_TEXTURE_2D, texture[10]); // 海王星纹理 // 将坐标系绕Z轴旋转fNeptuneSpin角度,控制海王星自转 glRotatef(fNeptuneSpin , 0.0f, 0.0f, 1.0f); gluSphere(quadric, 0.08f, 32, 32); // 海王星球体 glPopMatrix (); glBegin(GL_LINE_LOOP); for(angle=0;angle<=360;angle++) glVertex3f(2.3f*sin(DEG_TO_RAD*angle),0,2.3f*cos(DEG_TO_RAD*angle)); glEnd(); /**********************************绘制月亮************************************************/ glDisable(GL_LIGHT0); glEnable(GL_TEXTURE_2D ); // glBindTexture(GL_TEXTURE_2D, texture[11]); // 月亮纹理 glPushMatrix (); // 将坐标系绕Y轴旋转fEarthOrbit角度,控制月亮跟随地球 glRotatef(fEarthOrbit , 0.0f, 1.0f, 0.0f); glTranslatef(1.1f, 0.0f, 0.0f); // 将坐标系右移1.1f // 将坐标系绕Y轴旋转fMoonOrbit角度,控制月亮公转 glRotatef(fMoonOrbit , 0.0f, 1.0f, 0.0f); glTranslatef(0.15f, 0.0f, 0.0f); // 将坐标系绕Y轴旋转fMoonSpin角度,控制月亮自转 glBindTexture(GL_TEXTURE_2D, texture[11]); glRotatef(fMoonSpin , 0.0f, 1.0f, 0.0f); gluSphere(quadric, 0.02, 32, 32); // 月亮球体 glPopMatrix (); // 控制各星球转动的速度 if( g_bOrbitOn == true ) { fSunSpin -= g_fSpeedmodifier * (g_fElpasedTime * 10.0f); fMercuSpin -= g_fSpeedmodifier * (g_fElpasedTime * 15.0f); fMercuOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 40.0f); fVenusSpin -= g_fSpeedmodifier * (g_fElpasedTime * 10.0f); fVenusOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 30.0f); fEarthSpin -= g_fSpeedmodifier * (g_fElpasedTime * 100.0f); fEarthOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 20.0f); fMarsSpin -= g_fSpeedmodifier * (g_fElpasedTime * 30.0f); fMarsOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 50.0f); fJupiterSpin -= g_fSpeedmodifier * (g_fElpasedTime * 90.0f); fJupiterOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 35.0f); fSaturnSpin -= g_fSpeedmodifier * (g_fElpasedTime * 90.0f); fSaturnOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 25.0f); fUranusSpin -= g_fSpeedmodifier * (g_fElpasedTime * 70.0f); fUranusOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 15.0f); fNeptuneSpin -= g_fSpeedmodifier * (g_fElpasedTime * 40.0f); fNeptuneOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 5.0f); fMoonSpin -= g_fSpeedmodifier * (g_fElpasedTime * 50.0f); fMoonOrbit -= g_fSpeedmodifier * (g_fElpasedTime * 200.0f); } angle_Z += 0.01f; // 星空旋转 glutSwapBuffers(); // 交换双缓存 glFlush(); } void Reshape(int width, int height) { if (height==0) height=1; // 改变窗口 glViewport(0,0,width,height); // 设置视口 // 设置投影矩阵 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(viewer[0],viewer[1],viewer[2],viewer[3],viewer[4],-5,0,1,0); } void keyboard(unsigned char key, int x, int y) { switch(key) { case 'r': case 'R': // 视点上下左右移动 if(viewer[0]<=4.5) viewer[0]+=0.5; break; case 'l': case 'L': if(viewer[0]>=-6.0) viewer[0]-=0.5; break; case 'u': case 'U': if(viewer[1]<=4.5) viewer[1]+=0.1; break; case 'd': case 'D': if(viewer[1]>=-6.0) viewer[1]-=0.1; break; case'+': case '=': // 加速,减速,暂停 g_fSpeedmodifier+=1.0f; glutPostRedisplay(); break; case ' ': g_bOrbitOn = !g_bOrbitOn; glutPostRedisplay(); break; case'-': //按'-'减小运行速度 g_fSpeedmodifier-=1.0f; glutPostRedisplay(); break; case VK_ESCAPE: // 按ESC键时退出 exit(0); break; default: break; } } void special_keys(int s_keys, int x, int y) { switch(s_keys) { case GLUT_KEY_F1: // 按F1键时切换窗口/全屏模式 if(isFullScreen) { glutReshapeWindow(WIN_WIDTH, WIN_HEIGHT); glutPositionWindow(30, 30); isFullScreen = FALSE; } else { glutFullScreen(); isFullScreen = TRUE; } break; case GLUT_KEY_RIGHT: // 视角上下左右旋转 if(viewer[3]<=4.5) viewer[3]+=0.1; break; case GLUT_KEY_LEFT: if(viewer[3]>=-3.0) viewer[3]-=0.1; break; case GLUT_KEY_UP: if(viewer[4]<=4.5) viewer[4]+=0.1; break; case GLUT_KEY_DOWN: if(viewer[4]>=-4.5) viewer[4]-=0.1; break; default: break; } } void mouse(int btn, int state, int x, int y) // 远近视角 { if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) viewer[2]+=0.3; if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN&&viewer;[2]>=-3.9) viewer[2]-=0.3; } void LoadBmp(char *filename, TEXTUREIMAGE *textureImg) // 载入图片 { int i, j; FILE *file; BMPFILEHEADER bmpFile; BMPINFOHEADER bmpInfo; int pixel_size; // 初始化纹理数据 textureImg->imgWidth = 0; textureImg->imgHeight = 0; if (textureImg->data != NULL) { delete []textureImg->data; } // 打开文件 file = fopen(filename, "rb"); if (file == NULL) { return; } // 获取文件头 rewind(file); fread(&bmpFile;, sizeof(BMPFILEHEADER), 1, file); fread(&bmpInfo;, sizeof(BMPINFOHEADER), 1, file); // 验证文件类型 if (bmpFile.bfType != 0x4D42) { return; } // 获取图像色彩数 pixel_size = bmpInfo.biBitCount >> 3; // 读取文件数据 textureImg->data = new unsigned char[bmpInfo.biWidth * bmpInfo.biHeight * pixel_size]; for(i = 0 ; i < bmpInfo.biHeight; i++) { fseek(file, bmpFile.bfOffBits + (bmpInfo.biHeight - i - 1) * bmpInfo.biWidth * pixel_size, SEEK_SET); for (j = 0; j < bmpInfo.biWidth; j++) { // 红色分量 fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 2, sizeof(unsigned char), 1, file); // 绿色分量 fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 1, sizeof(unsigned char), 1, file); // 蓝色分量 fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 0, sizeof(unsigned char), 1, file); // Alpha分量 if (pixel_size == 4) { fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 3, sizeof(unsigned char), 1, file); } } } // 记录图像相关参数 textureImg->imgWidth = bmpInfo.biWidth; textureImg->imgHeight = bmpInfo.biHeight; textureImg->byteCount = pixel_size; fclose(file); } // 程序主函数 void main(int argc, char** argv) { //读图片 LoadBmp("Picture//Sky.bmp" , &skyImg;); LoadBmp("Picture//Sun.bmp" , &sunImg;); LoadBmp("Picture//Ray.bmp" , &rayImg;); LoadBmp("Picture//Mercu.bmp" , &mercuImg;); LoadBmp("Picture//Venus.bmp" , &venusImg;); //金星 LoadBmp("Picture//Earth.bmp" , &earthImg;); LoadBmp("Picture//Mars.bmp" , &marsImg;); //火星 LoadBmp("Picture//Jupiter.bmp" , &jupiterImg;); //木星 LoadBmp("Picture//Saturn.bmp" , &saturnImg;); //土星 LoadBmp("Picture//Uranus.bmp" , &uranusImg;); //天王星 LoadBmp("Picture//Neptune.bmp" , &neptuneImg;); //海王星 LoadBmp("Picture//Moon.bmp" , &moonImg;); glutInit(&argc;, argv); // 初始化GLUT库 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); // 初始化显示模式 glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT); // 初始化窗口大小 glutInitWindowPosition(20,20); // 初始化窗口位置 GLuint window = glutCreateWindow(WIN_TITLE); // 建立窗口 InitGL(); // 初始化OpenGL glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutKeyboardFunc(keyboard); glutSpecialFunc(special_keys); glutMouseFunc(mouse); glutIdleFunc(Display); // 设置窗口空闲时的处理函数 glutMainLoop(); // 进入事件处理循环 }5 971浏览会员免费
- XPath大小:87KB官方W3C的XPath标准官方W3C的XPath标准5 502浏览会员免费
- libiconv大小:4MBhttp://download.csdn.net/detail/travel981cn/7093579 这个发布的资源有点问题,根据http://www.codeproject.com/Articles/302012/How-to-Build-libiconv-with-Microsoft-Visual-Studio 这篇文章的介绍,编译生成的libiconv_a.lib会缺少一个_libiconv_set_relocation_prefix函数,原因为预处理器定义中少了一个宏定义,这样在编译php5ts.lib时会报错,虽然可以通过修改php5ts.def来避免这个问题,但是总归有点毛病。这次我从https://github.com/winlibs这个位置取得libiconv的代码,重新制作了MSVC10的工程文件和MAKEFILE文件,欢印同学下载测试。http://download.csdn.net/detail/travel981cn/7093579 这个发布的资源有点问题,根据http://www.codeproject.com/Articles/302012/How-to-Build-libiconv-with-Microsoft-Visual-Studio 这篇文章的介绍,编译生成的libiconv_a.lib会缺少一个_libiconv_set_relocation_prefix函数,原因为预处理器定义中少了一个宏定义,这样在编译php5ts.lib时会报错,虽然可以通过修改php5ts.def来避免这个问题,但是总归有点毛病。这次我从https://github.com/winlibs这个位置取得libiconv的代码,重新制作了MSVC10的工程文件和MAKEFILE文件,欢印同学下载测试。5 230浏览会员免费
- RAR大小:38KBPIC单片机的串口通信,能够接收发送任意多个字节,通过proteus仿真,设置虚拟串口,可以与串口助手联合调试,希望大家共同交流PIC单片机的串口通信,能够接收发送任意多个字节,通过proteus仿真,设置虚拟串口,可以与串口助手联合调试,希望大家共同交流5 501浏览会员免费
- C语言大小:3MB【内容简介】 本书特点: ·以实例为主。本书采用实例讲解的方式,先介绍必要背景知识,之后是加注释的源码,再给出分析和改进方向。 ·涉及的知识面广。从内存分配,到串行、并行口编程,再到界面开发,几乎含盖了C编程的方方面面。 ·实用性强。实例均有具体项目中的源代码,实例非常具有参考价值,而且很多实例可以在新的项目中使用。 ·本书的源代码都可在附送的光盘中找到,读者可以将代码拷贝到自己的编译器中,进行修改、编译使用。 ·在本书光盘中赠送了大量其他高级实例。 C语言把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。在系统开发,特别是操作系统、底层开发中,C语言的效率是其他编程语言难以企及的。C语言较之汇编语言的普及和易用性决定了在强调效率的开发过程中将采用C语言。 本书以实例讲解为主线,对C编程做了深入和具体的探讨。涉及的知识面广,从内存分配,到串行、并行口编程,再到界面开发、动画和高级应用,几乎涵盖了C语言编程的方方面面。通过对本书的学习,对C语言的高级编程,将育一个深刻的理解和掌握,而不仅局限于简单的数据结构和算法。 本书既可以供一般读者作为深入学习C语言的教材,也可以作为工程人员的参考手册。本书适合中、高级读者,学习过C语言语法的初级读者也可以通过学习本书快速成长为C语言的编程高手。【内容简介】 本书特点: ·以实例为主。本书采用实例讲解的方式,先介绍必要背景知识,之后是加注释的源码,再给出分析和改进方向。 ·涉及的知识面广。从内存分配,到串行、并行口编程,再到界面开发,几乎含盖了C编程的方方面面。 ·实用性强。实例均有具体项目中的源代码,实例非常具有参考价值,而且很多实例可以在新的项目中使用。 ·本书的源代码都可在附送的光盘中找到,读者可以将代码拷贝到自己的编译器中,进行修改、编译使用。 ·在本书光盘中赠送了大量其他高级实例。 C语言把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。在系统开发,特别是操作系统、底层开发中,C语言的效率是其他编程语言难以企及的。C语言较之汇编语言的普及和易用性决定了在强调效率的开发过程中将采用C语言。 本书以实例讲解为主线,对C编程做了深入和具体的探讨。涉及的知识面广,从内存分配,到串行、并行口编程,再到界面开发、动画和高级应用,几乎涵盖了C语言编程的方方面面。通过对本书的学习,对C语言的高级编程,将育一个深刻的理解和掌握,而不仅局限于简单的数据结构和算法。 本书既可以供一般读者作为深入学习C语言的教材,也可以作为工程人员的参考手册。本书适合中、高级读者,学习过C语言语法的初级读者也可以通过学习本书快速成长为C语言的编程高手。5 133浏览会员免费
- STM32F0中文大小:19MBSTM32F051中文参考手册,STM32F030可以参考用,相差不大STM32F051中文参考手册,STM32F030可以参考用,相差不大4 2344浏览会员免费
- VMware6.6大小:39MBVMware6下的,实现虚拟机和pc共享文件的组件包,可以实现pc与虚拟机共享一个文件夹,实现文件传输。解压后执行vmware-install.pl程序,然后一直按回车。安装后如果有/mnt/hgfs文件,说明安装成功了。VMware6下的,实现虚拟机和pc共享文件的组件包,可以实现pc与虚拟机共享一个文件夹,实现文件传输。解压后执行vmware-install.pl程序,然后一直按回车。安装后如果有/mnt/hgfs文件,说明安装成功了。5 238浏览会员免费
- 用来学习H3C交换机命令的模拟器大小:715KB用来学习交换机命令的模拟器,可以模拟大部份的命令。用来学习交换机命令的模拟器,可以模拟大部份的命令。4 1379浏览会员免费
- 数据融合大小:2MB本书以具有代表性的C3I系统为主线,介绍了多传感器数据融合系统的基本概念,系统组成,基本原理以及多传感器数据融合系统设计中所采用的基本方法。 全书共分七章,第一章介绍多传感器信息系统的一般概念及组成,第二章至第六章的内容分别为多传感器系统状成估计,数据关联原理和方法,航迹融合等,第七章简单介绍了C3I系统所用到的几种主要传感器。 本书是为电子信息类专业对应的各个学科的士研究生编写的,也可供从事电子信息系统研究与设计的工程技术人员和此领域的博士研究生参考。本书以具有代表性的C3I系统为主线,介绍了多传感器数据融合系统的基本概念,系统组成,基本原理以及多传感器数据融合系统设计中所采用的基本方法。 全书共分七章,第一章介绍多传感器信息系统的一般概念及组成,第二章至第六章的内容分别为多传感器系统状成估计,数据关联原理和方法,航迹融合等,第七章简单介绍了C3I系统所用到的几种主要传感器。 本书是为电子信息类专业对应的各个学科的士研究生编写的,也可供从事电子信息系统研究与设计的工程技术人员和此领域的博士研究生参考。5 935浏览会员免费
- C语言数值算法源程序,国外经典教材,可读性高!5 866浏览会员免费
- C语言课件(精华版)C语言课件(精华版)C语言课件(精华版)C语言课件(精华版)C语言课件(精华版)5 1888浏览会员免费
- ili9488大小:3KBili9488的驱动代码,包括初始化,开窗口,画点等基本函数ili9488的驱动代码,包括初始化,开窗口,画点等基本函数4 1505浏览会员免费
- 计算机国考二级C语言模拟考试系统大小:4MB计算机国考二级C语言模拟考试系统&计算机二级C语言笔试历年真卷&计算机二级C语言机试题库+100道 不用多解释了吧童鞋们~计算机国考二级C语言模拟考试系统&计算机二级C语言笔试历年真卷&计算机二级C语言机试题库+100道 不用多解释了吧童鞋们~5 473浏览会员免费
- bc31大小:1MB适合初学者的C语言编译器,我就是从这里出发的,希望你也能够从此。。。适合初学者的C语言编译器,我就是从这里出发的,希望你也能够从此。。。5 949浏览会员免费
- stm32f407大小:14MB基于stm32f407与L298N的电机驱动源码,详情可见博客。基于stm32f407与L298N的电机驱动源码,详情可见博客。4 4444浏览会员免费
- ASR芯片大小:12MB包含ASR芯片的所有开发文档,有协议指令描述,硬件描述,使用描述,环境配置描述包含ASR芯片的所有开发文档,有协议指令描述,硬件描述,使用描述,环境配置描述3 3867浏览会员免费
- 标准C编写com组件大小:98KB标准C编写com组件 纯C编写com组件 中文教程。 详细描述了如何使用标准C来编写类库的方法。 对于了解C++机制,面向对象机制,com组件机制会有更深入的了解。标准C编写com组件 纯C编写com组件 中文教程。 详细描述了如何使用标准C来编写类库的方法。 对于了解C++机制,面向对象机制,com组件机制会有更深入的了解。5 262浏览会员免费
- RAR大小:167KB上次上传少了这本书的参考答案.<br>参考答案,PDF文件上次上传少了这本书的参考答案.<br>参考答案,PDF文件5 86浏览免费
- 计算机类大小:362KB不错的好书,配合C程序设计看,会体会更深。不错的好书,配合C程序设计看,会体会更深。0 97浏览免费
- SHA1大小:8KB从 RFC3174 文档摘抄下来的 SHA1 摘要算法的C语言实现代码从 RFC3174 文档摘抄下来的 SHA1 摘要算法的C语言实现代码5 580浏览会员免费
- SourceInsight字体大小:11KBSourceInsight字体调整 最合适的代码阅读字体风格;直接加载到SourceInsight就可以使用。 加载方法:菜单Options->Style Properties,load样式。 字体设置:菜单Options->Document Options,Arial 10 Bold,Auto Indent->Auto Indent Type选为Smart,将Indent Open Brace 和 Indent Close Brace复选框去掉,确认。SourceInsight字体调整 最合适的代码阅读字体风格;直接加载到SourceInsight就可以使用。 加载方法:菜单Options->Style Properties,load样式。 字体设置:菜单Options->Document Options,Arial 10 Bold,Auto Indent->Auto Indent Type选为Smart,将Indent Open Brace 和 Indent Close Brace复选框去掉,确认。5 2776浏览会员免费
- STM32;UART;大小:278KB基于CubeMx的STM32F407串口代码:6各串口均已启用DMA及空闲中断,支持不定长度数据接收;可通过CubeMx裁剪串口数量,裁剪后只需编译时删去极少量与删去硬件资源相关的代码即可移植使用;默认使用片外8M晶振,可在CubeMx更改。基于CubeMx的STM32F407串口代码:6各串口均已启用DMA及空闲中断,支持不定长度数据接收;可通过CubeMx裁剪串口数量,裁剪后只需编译时删去极少量与删去硬件资源相关的代码即可移植使用;默认使用片外8M晶振,可在CubeMx更改。4 3071浏览会员免费
- Sharp大小:2MBC Sharp Windows Forms 程序设计(pdf版本)(压缩卷4)C Sharp Windows Forms 程序设计(pdf版本)(压缩卷4)4 58浏览会员免费
- 房屋租赁管理大小:13MB数据库课程设计c#+Mysql数据库课程设计-房屋租赁管理系统 需要在项目中引用Mysql,将数据库备份导入Mysql 可直接运行。做毕业设计、课程设计或者想研究下技术的可以下载学习。需要更多资源的可以关注我数据库课程设计c#+Mysql数据库课程设计-房屋租赁管理系统 需要在项目中引用Mysql,将数据库备份导入Mysql 可直接运行。做毕业设计、课程设计或者想研究下技术的可以下载学习。需要更多资源的可以关注我0 670浏览会员免费
- opencv大小:5MB使用opencv试下camera标定和畸变校正使用opencv试下camera标定和畸变校正5 2761浏览会员免费
- C8051F,大小:121KBC8051F系列MCU PCB封装库包含Sliabs公司全系列MCU PCB封装库,适用于PROTEL99SE及以上版本.包括QFN10、QFN20、QFN28、LFPQ32、TPFQ48、TPFQ64、TPFQ100。绝对值得一下C8051F系列MCU PCB封装库包含Sliabs公司全系列MCU PCB封装库,适用于PROTEL99SE及以上版本.包括QFN10、QFN20、QFN28、LFPQ32、TPFQ48、TPFQ64、TPFQ100。绝对值得一下5 144浏览会员免费
- can大小:36MBstm32f107vc lwip协议栈udp发送数据到pc机的简单程序,上位机安装好TCP&UDP;测试工具就可以通信了stm32f107vc lwip协议栈udp发送数据到pc机的简单程序,上位机安装好TCP&UDP;测试工具就可以通信了4 266浏览会员免费
- 三轴云台大小:688KB开源的三轴无刷云台算法,每一行都添加了详细注释,stm32单片机程序开源的三轴无刷云台算法,每一行都添加了详细注释,stm32单片机程序2 3363浏览会员免费
- c/c++大小:4MB图书管理系统(c语言)图书管理系统(c语言)图书管理系统(c语言)图书管理系统(c语言)图书管理系统(c语言)图书管理系统(c语言)图书管理系统(c语言)图书管理系统(c语言)4 157浏览会员免费
- Invensense大小:23MB源下载地址:http://www.invensense.com/developers/software-downloads/源下载地址:http://www.invensense.com/developers/software-downloads/5 1065浏览会员免费
- (产品 产品包:航空订票系统.rar 开发说明书:航空订票系统开发说明书 产品源代码名:航空订票系统.cpp 开发文档:开发成员名单.xls 帮助文档:帮助.xls ) 一.设计题目 航空客运订票的业务活动包括:查询航线、客票预订和办理退票等运订票系统,以使上述业务可以借助计算机来完成。 二.需求分析 (一) 功能描述 (1)每条航线所涉及的够息有:终点站名、航班号、星期几、乘员定额、众票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票层); (2)作为示意系统,全部数据可以只放在内存中; (3)系统能实现的操作和功能如下: ①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额。 ②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续.输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; ③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询 该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求.则为他 力、理订票手续,否则依次询问其它排队候补的客户。 (二) 实现提示 两个客户名单可分别由线性表和队列实现。为查找方便.已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条航线约情况登录在一张线性表上,由于航线基本不变.可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的—个记录,包含上述8个域,其中乘员名单域为指向乘员名单链表的头指针,等侯替补的客户名单域为分别指向队头和队尾的指针。 (三) 功能结构图 (四) 模块划分 1) 航班查询 根据旅客提出的终点站名输出航班号、星期几飞行,最近一天航班的日期以及余票额情况。 2) 用户订票 根据客户提出的要求查询该航班票额情况,若尚有余票,则为客户办理订票手续.输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补。 3) 用户退票 根据客户提出的要求查询该客户的订票情况,若情况属实则可确认退票。 4) 开发简介 表明产品名及开发人员情况。 。 。 。 。 。5 614浏览会员免费
- DALI大小:1MBDALI标准指令解析和源程序例程,里面有两个文档,一个是协议解析,第二个是DALI程序例子,很详细,我也是根据这两个文件学习开发DALIDALI标准指令解析和源程序例程,里面有两个文档,一个是协议解析,第二个是DALI程序例子,很详细,我也是根据这两个文件学习开发DALI4 1199浏览会员免费
- 舵机,控制,C51大小:20KB该程序是实现运用51单片机控制舵机的程序!!!该程序是实现运用51单片机控制舵机的程序!!!5 2490浏览会员免费
- c++语言描述大小:264KB山西大学工程学院 信息系 计本0407 赵志平 <br/>2007年,编译原理实验:词法分析器,c++语言描述的山西大学工程学院 信息系 计本0407 赵志平 <br/>2007年,编译原理实验:词法分析器,c++语言描述的5 82浏览会员免费
- objectc,mac大小:6MB一本object-c和iphone开发的入门教程,不错一本object-c和iphone开发的入门教程,不错4 101浏览会员免费
- 针对传统的Meanshift 方法在复杂条件下目标跟踪丢失问题,提出了一种将Meanshift 与Kalman滤波器融合的视频运动目标跟踪算法。该算法可对跟踪加入运动目标预测,根据Meanshift 跟踪结果判断是否开启Kalman 滤波器的预测及滤波,能提高跟踪的鲁棒性。实验结果表明,该算法可以有效改善在复杂条件下的跟踪效果,具有较好的鲁棒性。4 298浏览会员免费
- 门禁系统源代码大小:191KB门禁系统源代码,图书馆预约门禁系统源程序,采用ARM控制器,代码注释很多,方便阅读门禁系统源代码,图书馆预约门禁系统源程序,采用ARM控制器,代码注释很多,方便阅读5 1430浏览会员免费
- mingw-w64大小:195MBMinGW-W64 GCC-8.1.0 windows 下gcc编译版本,压缩包里包括四个版本,分别是 x86_64-posix-sjlj x86_64-posix-seh x86_64-win32-sjlj x86_64-win32-seh posix和win32是os接口类型 sjlj, seh是异常处理方案 如果不确定,一般安装posix和seh即可 解压即用,注意安装路径不要有空格或中文路径,使用前务必将mingw64/bin加入环境变量MinGW-W64 GCC-8.1.0 windows 下gcc编译版本,压缩包里包括四个版本,分别是 x86_64-posix-sjlj x86_64-posix-seh x86_64-win32-sjlj x86_64-win32-seh posix和win32是os接口类型 sjlj, seh是异常处理方案 如果不确定,一般安装posix和seh即可 解压即用,注意安装路径不要有空格或中文路径,使用前务必将mingw64/bin加入环境变量4 5924浏览会员免费
- C语言大小:281KB中国游戏开发者第一章 OpenGL与三维图形世界.1 OpenGL使人们进入三维图形世界1.2 OpenGL提供直观的三维图形开发环境1.3 OpenGL称为目前三维图形开发标准第二章 OpenGL概念建立2.1 OpenGL基本理解2.2 OpenGL工作流程2.3 OpenGL图形操作步骤第三章 Windows NT环境下的OpenGL3.1 Windows NT下的OpenGL函数3.2 OpenGL基本功能3.3 Windows NT下OpenGL结构第四章 OpenGL基本程序结构第五章 OpenGL数据类型和函数名第六章 OpenGL辅助库的基本使用6.1 辅助库函数分类 6.2 辅助库应用示例 第七章 OpenGL建模 7.1 描述图元 7.1.1 齐次坐标 7.1.2 点 7.1.3 线 7.1.4 多边形 7.2 绘制图元 7.2.1 定义顶点 7.2.2 构造几何图元 第八章 OpenGL变换 8.1 从三维空间到二维平面 8.1.1 相机模拟 8.1.2 三维图形显示流程 8.1.3 基本变换简单分析 8.2 几何变换 8.2.1 两个矩阵函数解释 8.2.2 平移 8.2.3 旋转 8.2.4 缩放和反射 8.2.5 几何变换举例 8.3 投影变换 8.3.1 正射投影 8.3.2 透视投影 8.4 裁剪变换 8.5 视口变换 8.6 堆栈操作 第九章 OpenGL颜色 9.1 计算机颜色 9.1.1 颜色生成原理 9.1.2 RGB色立体 9.2 颜色模式 9.2.1 RGBA模式 9.2.2 颜色表模式 9.2.3 两种模式应用场合 9.3 颜色应用举例 第十章 OpenGL光照 10.1 真实感图形基本概念 10.2 光照模型 10.2.1 简单光照模型 10.2.2 OpenGL光组成 10.2.3 创建光源 10.2.4 启动光照 10.3 明暗处理 10.4 材质 10.4.1 材质颜色 10.4.2 材质定义 10.4.3 材质RGB值和光源RGB值的关系 10.4.4 材质改变 第十一章 OpenGL位图和图像 11.1 位图 11.1.1 位图和字符 11.1.2 当前光栅位置 11.1.3 位图显示 11.2 图像 11.2.1 象素读写 11.2.2 象素拷贝 11.2.3 图像缩放 11.2.4 图像例程 第十二章 OpenGL纹理 12.1 基本步骤 12.2 纹理定义 12.3 纹理控制 12.3.1 滤波 12.3.2 重复与约简 12.4 映射方式 12.5 纹理坐标 12.5.1 坐标定义 12.5.2 坐标自动产生 第十三章 OpenGL复杂物体建模 13.1 图元扩展 13.1.1 点和线 13.1.2 多边形 13.2 法向计算 13.2.1 法向基本计算方法 13.2.2 法向定义 13.3 曲线生成 13.3.1 曲线绘制举例 13.3.2 曲线定义和启动 13.3.3 曲线坐标计算 13.3.4 定义均匀间隔曲线坐标值 13.4 曲面构造 13.4.1 曲面定义和坐标计算 13.4.2 定义均匀间隔的曲面坐标值 13.4.3 纹理曲面 13.4.4 NURBS曲面 第十四章 OpenGL特殊光处理 14.1 光照模型 14.1.1 全局环境光 14.1.2 近视点与无穷远视点 14.1.3 双面光照 14.2 光源位置与衰减 14.3 聚光与多光源 14.3.1 聚光 14.3.2 多光源与例程 14.4 光源位置与方向的控制 14.5 辐射光 第十五章 OpenGL效果处理 15.1 融合 15.1.1 Alpha值与融合 15.1.2 融合因子 15.1.3 融合实例 15.2 反走样 15.2.1 行为控制函数 15.2.2 点和线的反走样 15.2.3 多边形的反走样 15.3 雾 15.3.1 雾的概论和例程 15.3.2 雾化步骤 第十六章 OpenGL显示列表 16.1 显示列表概论 16.1.1 显示列表的优势 16.1.2 显示列表的适用场合 16.2 创建和执行显示列表 16.2.1 创建显示列表 16.2.2 执行显示列表 16.3 管理显示列表 16.4 多级显示列表 第十七章 OpenGL帧缓存和动画 17.1 帧缓存 17.1.1 帧缓存组成 17.1.2 缓存清除 17.2 动画中国游戏开发者第一章 OpenGL与三维图形世界.1 OpenGL使人们进入三维图形世界1.2 OpenGL提供直观的三维图形开发环境1.3 OpenGL称为目前三维图形开发标准第二章 OpenGL概念建立2.1 OpenGL基本理解2.2 OpenGL工作流程2.3 OpenGL图形操作步骤第三章 Windows NT环境下的OpenGL3.1 Windows NT下的OpenGL函数3.2 OpenGL基本功能3.3 Windows NT下OpenGL结构第四章 OpenGL基本程序结构第五章 OpenGL数据类型和函数名第六章 OpenGL辅助库的基本使用6.1 辅助库函数分类 6.2 辅助库应用示例 第七章 OpenGL建模 7.1 描述图元 7.1.1 齐次坐标 7.1.2 点 7.1.3 线 7.1.4 多边形 7.2 绘制图元 7.2.1 定义顶点 7.2.2 构造几何图元 第八章 OpenGL变换 8.1 从三维空间到二维平面 8.1.1 相机模拟 8.1.2 三维图形显示流程 8.1.3 基本变换简单分析 8.2 几何变换 8.2.1 两个矩阵函数解释 8.2.2 平移 8.2.3 旋转 8.2.4 缩放和反射 8.2.5 几何变换举例 8.3 投影变换 8.3.1 正射投影 8.3.2 透视投影 8.4 裁剪变换 8.5 视口变换 8.6 堆栈操作 第九章 OpenGL颜色 9.1 计算机颜色 9.1.1 颜色生成原理 9.1.2 RGB色立体 9.2 颜色模式 9.2.1 RGBA模式 9.2.2 颜色表模式 9.2.3 两种模式应用场合 9.3 颜色应用举例 第十章 OpenGL光照 10.1 真实感图形基本概念 10.2 光照模型 10.2.1 简单光照模型 10.2.2 OpenGL光组成 10.2.3 创建光源 10.2.4 启动光照 10.3 明暗处理 10.4 材质 10.4.1 材质颜色 10.4.2 材质定义 10.4.3 材质RGB值和光源RGB值的关系 10.4.4 材质改变 第十一章 OpenGL位图和图像 11.1 位图 11.1.1 位图和字符 11.1.2 当前光栅位置 11.1.3 位图显示 11.2 图像 11.2.1 象素读写 11.2.2 象素拷贝 11.2.3 图像缩放 11.2.4 图像例程 第十二章 OpenGL纹理 12.1 基本步骤 12.2 纹理定义 12.3 纹理控制 12.3.1 滤波 12.3.2 重复与约简 12.4 映射方式 12.5 纹理坐标 12.5.1 坐标定义 12.5.2 坐标自动产生 第十三章 OpenGL复杂物体建模 13.1 图元扩展 13.1.1 点和线 13.1.2 多边形 13.2 法向计算 13.2.1 法向基本计算方法 13.2.2 法向定义 13.3 曲线生成 13.3.1 曲线绘制举例 13.3.2 曲线定义和启动 13.3.3 曲线坐标计算 13.3.4 定义均匀间隔曲线坐标值 13.4 曲面构造 13.4.1 曲面定义和坐标计算 13.4.2 定义均匀间隔的曲面坐标值 13.4.3 纹理曲面 13.4.4 NURBS曲面 第十四章 OpenGL特殊光处理 14.1 光照模型 14.1.1 全局环境光 14.1.2 近视点与无穷远视点 14.1.3 双面光照 14.2 光源位置与衰减 14.3 聚光与多光源 14.3.1 聚光 14.3.2 多光源与例程 14.4 光源位置与方向的控制 14.5 辐射光 第十五章 OpenGL效果处理 15.1 融合 15.1.1 Alpha值与融合 15.1.2 融合因子 15.1.3 融合实例 15.2 反走样 15.2.1 行为控制函数 15.2.2 点和线的反走样 15.2.3 多边形的反走样 15.3 雾 15.3.1 雾的概论和例程 15.3.2 雾化步骤 第十六章 OpenGL显示列表 16.1 显示列表概论 16.1.1 显示列表的优势 16.1.2 显示列表的适用场合 16.2 创建和执行显示列表 16.2.1 创建显示列表 16.2.2 执行显示列表 16.3 管理显示列表 16.4 多级显示列表 第十七章 OpenGL帧缓存和动画 17.1 帧缓存 17.1.1 帧缓存组成 17.1.2 缓存清除 17.2 动画5 176浏览会员免费
- DSP大小:148KB28335二阶bootloader,可以实现远程应用升级, 非常好用28335二阶bootloader,可以实现远程应用升级, 非常好用4 4397浏览会员免费
- DecisionTree大小:7MB集成了ID3,C4.5,CART,转载请注明出处!集成了ID3,C4.5,CART,转载请注明出处!5 95浏览会员免费
- fmv610nu2大小:6MBfmv610nu2老显卡驱动 I830M.rarfmv610nu2老显卡驱动 I830M.rar4 140浏览会员免费
- AGC大小:7KB语音信号AGC——自动增益控制 含matlab和c两种 含测试程序语音信号AGC——自动增益控制 含matlab和c两种 含测试程序4 1206浏览会员免费
- C语言大小:123KBC语言面试100题(含答案)。 例题1: /* 下列给定程序的功能是:读入一个整数k(2=<k<=10000),打印它的所有质因子(即所有素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 */ #include <conio.h> #include <stdio.h> /**********found************/ IsPrime(int n); { int i,m; m=1; /**********found************/ for(i=2;i<n;i++) if !(n%i) { m=0;break;} return(m); } main() { int j,k; clrscr(); printf("\nPleasr enter an integer number between 2 and 10000:");scanf("%d",&k); printf("\n\nThe prime factor(s) of %d is (are) :",k); for(j=2; j<=k;j++) if((!(k%j))&&(IsPrime(j))) printf("\n %4d",j); printf("\n"); } /* 答案: IsPrime(int n); 改为 IsPrime(int n) if !(n%i) 改为 if (!(n%i)) */C语言面试100题(含答案)。 例题1: /* 下列给定程序的功能是:读入一个整数k(2=<k<=10000),打印它的所有质因子(即所有素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 */ #include <conio.h> #include <stdio.h> /**********found************/ IsPrime(int n); { int i,m; m=1; /**********found************/ for(i=2;i<n;i++) if !(n%i) { m=0;break;} return(m); } main() { int j,k; clrscr(); printf("\nPleasr enter an integer number between 2 and 10000:");scanf("%d",&k); printf("\n\nThe prime factor(s) of %d is (are) :",k); for(j=2; j<=k;j++) if((!(k%j))&&(IsPrime(j))) printf("\n %4d",j); printf("\n"); } /* 答案: IsPrime(int n); 改为 IsPrime(int n) if !(n%i) 改为 if (!(n%i)) */5 1w+浏览会员免费
- SRTF大小:1KB该程序实现作业调度的SRTF算法,只要输入进程号,到达时间,运行所需时间即可,输出的是一条时间轴和对应的一条进程运行流程,表示一个时间点里哪个进程在运行。 很简单,看了就知道~该程序实现作业调度的SRTF算法,只要输入进程号,到达时间,运行所需时间即可,输出的是一条时间轴和对应的一条进程运行流程,表示一个时间点里哪个进程在运行。 很简单,看了就知道~4 4221浏览会员免费
- 明解C语言 第3版 入门学习C语言,对初学者来说是很好的书,贵在坚持!!5 162浏览会员免费
- jquery-ui大小:2MBjquery-ui-1.9.1.jquery-ui-1.9.1.5 75浏览会员免费
- gps大小:58KB模块思想 程序框架 高质量代码。 界面与后台程序分离分层。 采用模块化思想封装装各个模块,除配置外只使用了个全局变量。 含有gps, 语音模块 v4l2视频模块 定时器线程模块思想 程序框架 高质量代码。 界面与后台程序分离分层。 采用模块化思想封装装各个模块,除配置外只使用了个全局变量。 含有gps, 语音模块 v4l2视频模块 定时器线程5 659浏览会员免费
- BootLoader大小:9MB自己写的BootLoader,可以支持任意串口升级下载程序,调试程序,内含稳定的串口协议。自己写的BootLoader,可以支持任意串口升级下载程序,调试程序,内含稳定的串口协议。4 1794浏览会员免费
- js+socket大小:2MBjs调用flash中socket操作,实现与客户端通讯js调用flash中socket操作,实现与客户端通讯4 2783浏览会员免费
- scsi指令大小:92KB对于Mass Storage Reset命令,介绍scsi指令格式及使用方法对于Mass Storage Reset命令,介绍scsi指令格式及使用方法4 2713浏览会员免费
- RSA大小:338KBrsaeuro-1.04.tar.gz C语言实现的RSA算法rsaeuro-1.04.tar.gz C语言实现的RSA算法5 95浏览会员免费
- 嵌入式Linux大小:9KB学习一些网络编程,嵌入式Linux开发应用层的好材料,智能排队系统,按照索取的先后顺序自动取排队机,提供客户评价系统打分功能学习一些网络编程,嵌入式Linux开发应用层的好材料,智能排队系统,按照索取的先后顺序自动取排队机,提供客户评价系统打分功能5 566浏览会员免费
- kernel大小:35MB《深入理解linux内核》第三版的源代码,linux 2.6.11版本,适合在阅读的时候查看。《深入理解linux内核》第三版的源代码,linux 2.6.11版本,适合在阅读的时候查看。5 134浏览会员免费
- 完美解决proteus仿真stm323 1w+浏览会员免费
- 好课件大小:1MB推荐!完美c语言课件,内容翔实,课件优美。推荐!完美c语言课件,内容翔实,课件优美。5 55浏览会员免费
- 笔试题大小:28KB呵呵,参加了华三笔试,看到了不少原题,虽然没去华三,但是还是很高兴能碰到这些原题呵呵,参加了华三笔试,看到了不少原题,虽然没去华三,但是还是很高兴能碰到这些原题5 2342浏览会员免费
- c语言事例大小:39KB对于想学c的朋友很有帮助,一般的算法都有对于想学c的朋友很有帮助,一般的算法都有0 61浏览免费
- 文星仿宋大小:14MB公务文字处理必备字体,文星仿宋,安全无毒! 下载后直接拷贝到C:\WINDOWS\Fonts文件夹下即可使用!公务文字处理必备字体,文星仿宋,安全无毒! 下载后直接拷贝到C:\WINDOWS\Fonts文件夹下即可使用!5 925浏览会员免费