资源简介
借鉴他人源码,经过改进后,实现太阳系的全部行星显示,均有纹理、光照等,实现各大行星的公转及自转,分别以a,d控制旋转,具体内容详见代码
代码片段和文件信息
#include // windows的头文件
#include // Glut的头文件
#include “Texture.h“ // 纹理导入的头文件
#include // 标准输入输出头文件
#include // OLE控制库头文件
#include // 数学函数头文件
#include // OpenGL32库的头文件
#define MAXTEXTURE 100 // 定义最大的纹理数目
BOOL BuildTexture(char *szPathName GLuint &texid) // 载入图片并转换为纹理
{
HDC hdcTemp; // DC用来保存位图
HBITMAP hbmpTemp; // 保存临时位图
IPicture *pPicture; // 定义IPicture Interface
OLECHAR wszPath[MAX_PATH+1]; // 图片的完全路径
char szPath[MAX_PATH+1]; // 图片的完全路径
long lWidth; // 单位宽度
long lHeight; // 单位高度
long lWidthPixels; // 像素的宽度
long lHeightPixels; // 像素的高度
GLint glMaxTexDim ; // 保存纹理的最大尺寸
if (strstr(szPathName “http://“)) // 如果路径包含 http:// 则...
{
strcpy(szPath szPathName); // 把路径拷贝到 szPath
}
else // 否则从文件导入图片
{
GetCurrentDirectory(MAX_PATH szPath); // 取得当前路径
strcat(szPath “\\“); // 添加字符“\\“
strcat(szPath szPathName); // 添加图片的相对路径
}
MultiByteToWideChar(CP_ACP 0 szPath -1 wszPath MAX_PATH); // 把ASCII码转化为Unicode标准码
HRESULT hr = OleLoadPicturePath(wszPath 0 0 0 IID_IPicture (void**)&pPicture);
if(FAILED(hr)) // 如果导入失败
{
// 图片载入失败出错信息
MessageBox (HWND_DESKTOP “图片导入失败!\n(TextureLoad Failed!)“ “Error“ MB_OK | MB_ICONEXCLAMATION);
return FALSE; // 返回 FALSE
}
hdcTemp = CreateCompatibleDC(GetDC(0)); // 建立窗口设备描述表
if(!hdcTemp) // 建立失败?
{
pPicture->Release(); // 释放IPicture
// 图片载入失败出错信息
MessageBox (HWND_DESKTOP “图片导入失败!\n(TextureLoad Failed!)“ “Error“ MB_OK | MB_ICONEXCLAMATION);
return FALSE; // 返回 FALSE
}
glGetIntegerv(GL_MAX_TEXTURE_SIZE &glMaxTexDim); // 取得支持的纹理最大尺寸
pPicture->get_Width(&lWidth); // 取得IPicture 宽度 (转换为Pixels格式)
lWidthPixels = MulDiv(lWidth GetDeviceCaps(hdcTemp LOGPIXELSX) 2540);
pPicture->get_Height(&lHeight); // 取得IPicture 高度 (转换为Pixels格式)
lHeightPixels = MulDiv(lHeight GetDeviceCaps(hdcTemp LOGPIXELSY) 2540);
// 调整图片到最好的效果
if (lWidthPixels <= glMaxTexDim) // 图片宽度是否超过显卡最大支持尺寸
lWidthPixels = 1 << (int)floor((log((double)lWidthPixels)/log(2.0f)) + 0.5f);
else // 否则将图片宽度设为显卡最大支持尺寸
lWidthPixels = glMaxTexDim;
if (lHeightPixels <= glMaxTexDim) // 图片高度是否超过显卡最大支持尺寸
lHeightPixels = 1 << (int)floor((log((double)lHeightPixels)/log(2.0f)) + 0.5f);
else // 否则将图片高度设为显卡最大支持尺寸
lHeightPixels = glMaxTexDim;
// 建立一个临时位图
BITMAPINFO bi = {0}; // 位图的类型
DWORD *pBits = 0; // 指向位图Bits的指针
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); // 设置结构大小
bi.bmiHeader.biBitCount = 32; // 32 位
bi.bmiHeader.biWidth = lWidthPixels;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-11-13 19:18 太阳系\
目录 0 2015-10-30 12:44 太阳系\Data\
文件 221814 2015-10-26 16:14 太阳系\Data\光圈.bmp
文件 1572918 2015-10-25 16:54 太阳系\Data\土星.bmp
文件 8640054 2015-10-22 20:13 太阳系\Data\地球.bmp
文件 2359350 2015-10-22 20:16 太阳系\Data\天王星.bmp
文件 588166 2015-10-22 20:15 太阳系\Data\太阳.bmp
文件 66616 2004-07-29 19:07 太阳系\Data\太阳光.bmp
文件 966654 2015-10-25 13:18 太阳系\Data\星空.bmp
文件 12344 2007-04-28 11:28 太阳系\Data\月球.bmp
文件 435054 2015-10-25 16:54 太阳系\Data\木星.bmp
文件 567294 2015-10-22 20:16 太阳系\Data\水星.bmp
文件 460854 2015-10-26 16:25 太阳系\Data\流星1.bmp
文件 202554 2015-10-26 16:25 太阳系\Data\流星2.bmp
文件 1314054 2015-10-22 20:15 太阳系\Data\海王星.bmp
文件 734670 2015-10-22 20:15 太阳系\Data\火星.bmp
文件 49208 2007-04-28 10:10 太阳系\Data\金星.bmp
目录 0 2015-11-13 19:15 太阳系\Debug\
文件 43765 2015-10-25 14:48 太阳系\Debug\a.obj
文件 6102 2015-11-08 22:56 太阳系\Debug\cl.command.1.tlog
文件 130932 2015-11-08 22:56 太阳系\Debug\CL.read.1.tlog
文件 2870 2015-11-08 22:56 太阳系\Debug\CL.write.1.tlog
文件 237568 2007-04-29 14:35 太阳系\Debug\glut32.dll
文件 2 2015-11-08 22:56 太阳系\Debug\li
文件 2 2015-11-08 22:56 太阳系\Debug\li
文件 2 2015-11-08 22:56 太阳系\Debug\li
文件 2 2015-11-08 22:56 太阳系\Debug\li
文件 2 2015-11-08 22:56 太阳系\Debug\li
文件 2 2015-11-08 22:56 太阳系\Debug\li
文件 2 2015-11-08 22:56 太阳系\Debug\li
文件 2 2015-11-08 22:56 太阳系\Debug\li
............此处省略69个文件信息
- 上一篇:Outline-Client.exe
- 下一篇:PRML中文版全文.pdf
评论
共有 条评论