资源简介
基于OpenGL的3D迷宫漫游程序,包括模型加载、纹理映射、碰撞处理、摄像漫游等,带详细按键说明和文档

代码片段和文件信息
#include
#include “CTargaImage.h“
CTargaImage::CTargaImage() : m_pImageData(NULL)
{
}
CTargaImage::~CTargaImage()
{
Release();
}
void CTargaImage::SwapRedBlue()
{
switch (m_colorDepth)
{
case 32:
{
unsigned char temp;
rgba_t* source = (rgba_t*)m_pImageData;
for (int pixel = 0; pixel < (m_width * m_height); ++pixel)
{
temp = source[pixel].b;
source[pixel].b = source[pixel].r;
source[pixel].r = temp;
}
} break;
case 24:
{
unsigned char temp;
rgb_t* source = (rgb_t*)m_pImageData;
for (int pixel = 0; pixel < (m_width * m_height); ++pixel)
{
temp = source[pixel].b;
source[pixel].b = source[pixel].r;
source[pixel].r = temp;
}
} break;
default:
// ignore other color depths
break;
}
}
bool CTargaImage::Load(const char *filename)
{
FILE *pFile = fopen(filename “rb“);
if (!pFile)
return false;
tgaheader_t tgaHeader;
// read the TGA header
fread(&tgaHeader 1 sizeof(tgaheader_t) pFile);
// see if the image type is one that we support (RGB RGB RLE GRAYSCALE GRAYSCALE RLE)
if ( ((tgaHeader.imageTypeCode != TGA_RGB) && (tgaHeader.imageTypeCode != TGA_GRAYSCALE) &&
(tgaHeader.imageTypeCode != TGA_RGB_RLE) && (tgaHeader.imageTypeCode != TGA_GRAYSCALE_RLE)) ||
tgaHeader.colorMapType != 0)
{
fclose(pFile);
return false;
}
// get image width and height
m_width = tgaHeader.width;
m_height = tgaHeader.height;
// colormode -> 3 = BGR 4 = BGRA
int colorMode = tgaHeader.bpp / 8;
// we don‘t handle less than 24 bit
if (colorMode < 3)
{
fclose(pFile);
return false;
}
m_imageSize = m_width * m_height * colorMode;
// allocate memory for TGA image data
m_pImageData = new unsigned char[m_imageSize];
// skip past the id if there is one
if (tgaHeader.idLength > 0)
fseek(pFile SEEK_CUR tgaHeader.idLength);
// read image data
if (tgaHeader.imageTypeCode == TGA_RGB || tgaHeader.imageTypeCode == TGA_GRAYSCALE)
{
fread(m_pImageData 1 m_imageSize pFile);
}
else
{
// this is an RLE compressed image
unsigned char id;
unsigned char length;
rgba_t color = { 0 0 0 0 };
unsigned int i = 0;
while (i < m_imageSize)
{
id = fgetc(pFile);
// see if this is run length data
if (id >= 128)// & 0x80)
{
// find the run length
length = (unsigned char)(id - 127);
// next 3 (or 4) bytes are the repeated values
color.b = (unsigned char)fgetc(pFile);
color.g = (unsigned char)fgetc(pFile);
color.r = (unsigned char)fgetc(pFile);
if (colorMode == 4)
color.a = (unsigned char)fgetc(pFile);
// save everything in this run
while (length > 0)
{
m_pImageData[i++] = color.b;
m_pImageData[i++] = color.g;
m_pImageData[i++] = color.r;
if (colorMode == 4)
m_pImageData[i++] = color.a;
--length;
}
}
else
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1715200 2010-11-08 12:51 实验报告\wendang.doc
文件 7038 2004-02-09 20:23 源代码\MYMAZE\CTargaImage.cpp
文件 2241 2009-12-08 09:57 源代码\MYMAZE\CTargaImage.h
文件 197147 2004-02-09 20:29 源代码\MYMAZE\data\map\Brick.tga
文件 4225 2004-02-09 20:24 源代码\MYMAZE\data\map\heightmap.raw
文件 197147 2004-02-09 20:30 源代码\MYMAZE\data\map\Marble.tga
文件 194727 2004-02-09 07:38 源代码\MYMAZE\data\map\water.tga
文件 786476 2004-02-09 20:27 源代码\MYMAZE\data\skybox\bk.tga
文件 786971 2004-02-09 20:28 源代码\MYMAZE\data\skybox\dn.tga
文件 786476 2004-02-09 20:28 源代码\MYMAZE\data\skybox\ft.tga
文件 786476 2004-02-09 20:28 源代码\MYMAZE\data\skybox\lt.tga
文件 4585 2004-02-09 20:28 源代码\MYMAZE\data\skybox\Morning Dew.nfo
文件 140 2004-02-09 20:28 源代码\MYMAZE\data\skybox\readme.txt
文件 786476 2004-02-09 20:29 源代码\MYMAZE\data\skybox\rt.tga
文件 786971 2004-02-09 20:29 源代码\MYMAZE\data\skybox\up.tga
文件 145357 2004-02-09 20:23 源代码\MYMAZE\data\模型\centaur\Centaur.tga
文件 246120 2004-02-09 20:23 源代码\MYMAZE\data\模型\centaur\Tris.md2
文件 33344 2008-03-30 19:06 源代码\MYMAZE\data\模型\knight\knight.jpg
文件 320236 2004-01-30 06:50 源代码\MYMAZE\data\模型\knight\knight.md2
文件 196652 2009-12-09 14:35 源代码\MYMAZE\data\模型\knight\knight.tga
文件 129407 2004-02-09 20:25 源代码\MYMAZE\data\模型\Necromicus\necromicus.tga
文件 436652 2004-02-09 20:25 源代码\MYMAZE\data\模型\Necromicus\tris.md2
文件 69959 2004-02-09 20:26 源代码\MYMAZE\data\模型\rhino\rhino.tga
文件 418932 2004-02-09 20:27 源代码\MYMAZE\data\模型\rhino\tris.md2
文件 565040 2004-01-30 06:48 源代码\MYMAZE\data\模型\丑牛\tris.MD2
文件 192044 2009-12-11 19:30 源代码\MYMAZE\data\模型\丑牛\tris.tga
文件 259348 1999-12-23 16:52 源代码\MYMAZE\data\模型\怪兽\goblin.md2
文件 196652 2009-12-11 19:41 源代码\MYMAZE\data\模型\怪兽\goblin.tga
文件 362288 2000-05-10 11:42 源代码\MYMAZE\data\模型\木乃伊\hueteotl.MD2
文件 196652 2009-12-11 19:43 源代码\MYMAZE\data\模型\木乃伊\hueteotl_b.tga
............此处省略36个文件信息
- 上一篇:收藏的许多MD2模型
- 下一篇:基于zigbee的温度传感器DS18B20
相关资源
- OSG 72集视频教程和资料140620
- OpenGL参考手册
- The Secret Path 3D 3D魔方迷宫[源码][scra
-
Actionsc
ript 1.0实现能跟随鼠标运动的 - Qt Creator opengl实现四元数鼠标控制轨迹
- Unity3D登录界面工程
- 3DWebGIS 3DWebGIS
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 3des加解密_C 实现
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- unity3d反编译工具
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- Quest3D 2个动画相机切换实例
- 迷宫问题 maze 迷宫算法的实现
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- FLAC3D数值模拟的边坡稳定性
-
UnityWebPla
yerFull - scratch穿越迷宫.sb2
- Scratch:3d飞行模拟器 .sb3
- OPENGL实现世界上最小的3D游戏
- js 迷宫小游戏源码
评论
共有 条评论