资源简介
VC++6.0中实现了以OpenGL为平台的太地球、月亮之间运动图,并可以实现上下左右的移动(场景漫游);对理解世界坐标系与物体坐标系之间的转换关系有一定帮助。这个程序包里面有详细的word格式的讲解,希望对大家有帮助
代码片段和文件信息
#include
#include
#include
#include
#include
#include
HDC hDC=NULL; // 窗口着色描述表句柄HDC hDC=NULL; // 窗口着色描述表句柄
HGLRC hRC=NULL; // OpenGL渲染描述表句柄
HWND hWnd=NULL; // 保存我们的窗口句柄
HINSTANCE hInstance; // 保存程序的实例
bool keys[256]; // 保存键盘按键的数组
bool active=TRUE; // 窗口的活动标志,缺省为TRUE
bool fullscreen=TRUE; // 全屏标志缺省,缺省设定成全屏模式
GLfloat rtri=0.0f;
GLfloat rquad=0.0f;
GLfloat xrot; // X 旋转量
GLfloat yrot; // Y 旋转量
GLfloat zrot;
GLfloat xspeed; // X 旋转速度
GLfloat yspeed; // Y 旋转速度
//GLuint texture[6]; // 存储六个纹理
BOOL light=TRUE; // 光源的开/关
BOOL lp=FALSE; // L键按下了么?
BOOL fp=FALSE; // F键按下了么?
GLfloat LightAmbient[]= { 1.0f 1.0f 1.0f 1.0f }; // 环境光参数
GLfloat LightDiffuse[]= { 50.0f 0.0f 0.0f 1.0f }; // 漫射光参数
GLfloat LightPosition[]= { 0.0f 0.0f 0.0f 1.0f }; // 光源位置
GLuint Filter=0; // 滤波类型
GLuint texture[12]; // 3种纹理的储存空间
BOOL blend;
BOOL bpwpsp;
GLUquadricObj *quadratic; // 二次几何体
GLuint object=0; // 二次几何体标示符
unsigned long dwRotationdwRevolution;
HANDLE h_Rotationh_Revolution;
GLfloat xtrytrztr;
GLfloat fEarthRad=0.8/100.0f;
GLfloat fMoonRad=fEarthRad*(GLfloat)(109.0/400.0);
GLfloat fSunRad=109*fEarthRad;
#define PI 3.14159
GLfloat a=2.5f;
GLfloat b=2.2f;
GLfloat SunxSunzEllxEllzEarthxEarthzMoonxMoonz;
GLfloat angleMoveAngle=0VertexAngle=0;
GLfloat x=0.0fy=0.0fz=5.0f
lx=0.0fly=0.0flz=-1.0f;
AUX_RGBImageRec *LoadBMP(char *Filename) // 载入位图图象
{
FILE *File=NULL; // 文件句柄
if (!Filename) // 确保文件名已提供
{
return NULL; // 如果没提供,返回 NULL
}
File=fopen(Filename“r“); // 尝试打开文件
if (File) // 文件存在么?
{
fclose(File); // 关闭句柄
return auxDIBImageLoad(Filename); // 载入位图并返回指针
}
MessageBox(NULL“载入位图失败!“NULLMB_OK);
return NULL; // 如果载入失败,返回 NULL
}
int LoadGLTextures() // 载入位图(调用上面的代码)并转换成纹理
{
int Status=FALSE; // 状态指示器
int loop;
int i=0j=0;
AUX_RGBImageRec *TextureImage[4]; // 创建纹理的存储空间
memset(TextureImage0sizeof(void *)*4); // 将指针设为 NULL
// 载入位图,检查有无错误,如果位图没找到则退出
if((TextureImage[0]=LoadBMP(“Data/earth.bmp“))&&(TextureImage[1]=LoadBMP(“Data/moon.bmp“))&&(TextureImage[2]=LoadBMP(“Data/sun2.bmp“))
&&(TextureImage[3]=LoadBMP(“Data/star.bmp“)))
{
Status=TRUE; // 将 Status 设为 TRUE
glGenTextures(12 &texture[0]); // 创建纹理
while(i<10){
// 创建 Nearest 滤波贴图
glBindTexture(GL_TEXTURE_2D texture[0+i]);
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_NEAREST);
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MIN_FILTERGL_NEAREST);
glTexImage2D(GL_TEXTURE_2D 0 3 TextureImage[j]->sizeX TextureImage[j]->sizeY 0 GL_RGB GL_UNSIGNED_BYTE TextureImage[j]->data);
// 创建线性滤波纹理
glBindTexture(GL_TEXTURE_2D texture[1+i]);
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILT
- 上一篇:VC6.0三维画图画三维球,立方体,矩形
- 下一篇:基于udp的socket编程
相关资源
- MFC 单文档 实现opengl 三维旋转 缩放
- OPENGL的烟花程序(代码)
- MFC+OpenGL三维建模与动画显示
- 基于opengl粒子系统实现喷泉的模拟
- 一个基于openGL的太阳系模型,太阳地
- vc6.0+opengl纯色五角星填充
- vc6.0+opengl动态绘制五角星
- NeHe_OpenGL教程完整版 里面有地址可以
- OpenGL简单——实现立方体贴上不同纹
- MFC实现dem的读取与现实
- VC++ OpenGL三维地形漫游
- OpenGL实现三维地形实时动态显示
- VC++中Opengl实现建筑物虚拟漫游
- VC++ 模拟太阳系行星运行
- OpenGL 建筑物漫游
- 用OpenGL实现球面纹理
- 用opengl做的3D教室漫游程序
- 老何炸飞机源代码
- 《Visual C++ OpenGL DirectX三维动画编程宝
- opengl做的迷宫游戏,基于C++
- opengl实现漫游
- VC++雷达模拟程序
- XYZ和STL文件MFC显示
- 简单的OpenGL 3D场景
- OpenGL开发的二维坦克大战游戏,小时
- 最好的CS游戏opengl、C++实现
- c++基于OpenGL的游戏源代码
- opengl c++读取obj文件
- Nehe的OpenGL教程电子书(chm格式)中文
- 三维建筑物漫游程序 opengl
评论
共有 条评论