资源简介
基于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
相关资源
- 大量Opengl
- Opengl 太阳系
- 用opengl绘制的兔子
- LSM303DLH 中文pdf (磁力计+ 线性加速
- 基于OpenGL的描点绘制Bezier曲线
- 2d toolkit
- BK2423DesignKit 2.0
- 可视化动态迷宫带音乐,可自定义迷
- 3dmax航母文件
- opengl天空盒的效果源代码
- Qt5版NeHe OpenGL教程6-10
- 基于opengl下的选择物体局部放大
- Unity3D UGUI官方案例
- DirectX3D太阳系
- 网页3D模型显示
- Unity3D超炫的水效果
- OPENGL粒子系统之喷泉
- 3D opengl魔方
- 建立3D点的KD树,速度很快
- unity网络五子棋源代码
- opengles加载3d模型(纹理+光照)
- 3dmax人物建模
- opengl画的小花
- OpenGL三维图形系统开发与实用技术.
- INCT_ROOT_EVO3D.zip
- opengl 立体球体的实现
- loop 细分,结合openGL
- opengl中加载dem方法和贴纹理
- OpenGL写的一个带背景音乐的场景
- opengl房屋设计2
评论
共有 条评论