资源简介
opengl写的,导入3DS路灯,有灯光光韵效果,很真实,很漂亮。
代码片段和文件信息
#include “3ds.h“
#include “Texture.h“
// 构造函数
C3DSModel::C3DSModel()
{
// 初始化文件指针
m_FilePtr = NULL;
// 定义一个默认的材质(灰色)
tMaterial defaultMat;
defaultMat.isTexMat = false;
strcpy(defaultMat.matName.string “5DG_Default“);
defaultMat.color[0] = 192;
defaultMat.color[1] = 192;
defaultMat.color[2] = 192;
m_3DModel.pMaterials.push_back(defaultMat);
// 初始化保存3DS模型的结构体
m_3DModel.numOfMaterials = 1;
m_3DModel.numOfobjects = 0;
}
// 析构函数
C3DSModel::~C3DSModel()
{
m_3DModel.pMaterials.clear();
m_3DModel.pobject.clear();
}
// 载入3ds文件
BOOL C3DSModel::Load(char *strFileName)
{
char strMessage[128] = {0};
tChunk chunk = {0};
// 打开文件
m_FilePtr = fopen(strFileName“rb“);
// 如果文件打开失败
if (!m_FilePtr)
{
sprintf(strMessage “3DS文件 %s 不存在!“ strFileName);
MessageBox(NULL strMessage “Error“ MB_OK);
return false;
}
// 读取3ds文件的第一个Chunk
ReadChunk(&chunk);
// 检查是否是3ds文件
if (chunk.ID != PRIMARY)
{
sprintf(strMessage “读取文件 %s 失败!“ strFileName);
MessageBox(NULL strMessage “Error“ MB_OK);
fclose(m_FilePtr);
return false;
}
// 开始读取3ds文件
ReadPrimary(chunk.length-6);
// 计算每个顶点的法线量
ComputeNormals();
// 关闭打开的文件
fclose(m_FilePtr);
m_FilePtr = NULL;
// 对有纹理的材质载入该纹理
for (int i=0; i {
if (m_3DModel.pMaterials[i].isTexMat)
{
if (!BuildTexture(m_3DModel.pMaterials[i].mapName.string m_3DModel.pMaterials[i].texureId))
{
// 纹理载入失败
sprintf(strMessage “3DS纹理文件载入失败: %s !“ m_3DModel.pMaterials[i].mapName.string);
MessageBox(NULL strMessage “Error“ MB_OK);
}
}
}
return true;
}
// 从文件中读取1个字节
BYTE C3DSModel::ReadByte(void)
{
BYTE result = 0;
fread(&result 1 1 m_FilePtr);
return result;
}
// 从文件中读取2个字节
WORD C3DSModel::ReadWord(void)
{
return ReadByte() + (ReadByte()<<8);
}
// 从文件中读取4个字节
UINT C3DSModel::ReadUint(void)
{
return ReadWord() + (ReadWord()<<16);
}
// 从文件中读取浮点数
float C3DSModel::ReadFloat(void)
{
float result;
fread(&result sizeof(float) 1 m_FilePtr);
return result;
}
// 从文件中读取字符串(返回字符串长度)
UINT C3DSModel::ReadString(STRING *pStr)
{
int n=0;
while ((pStr->string[n++]=ReadByte()) != 0)
;
return n;
}
// 读取3ds的一个Chunk信息
void C3DSModel::ReadChunk(tChunk *pChunk)
{
fread(&pChunk->ID 1 2 m_FilePtr);
fread(&pChunk->length 1 4 m_FilePtr);
}
// 读取3ds文件主要Chunk
UINT C3DSModel::ReadPrimary(UINT n)
{
UINT count = 0; // 该Chunk内容已读取的字节计数
tChunk chunk = {0}; // 用以保存子Chunk的内容
while (count < n)
{
ReadChunk(&chunk);
switch (chunk.ID)
{
case PRIM_EDIT:
ReadEdit(chunk.length-6);
break;
//case PRIM_KEY:
// ReadKeyframe(chunk.length-6);
// break;
default:
fseek(m_FilePtr chunk.length-6 SEEK_CUR);
break;
}
count += chunk.length;
}
return count;
}
// 读取3ds物体主编辑Chunk
UINT C3DSModel::ReadEdit(UINT n)
{
UINT count = 0;
tChunk chunk = {0};
while
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 514 2009-04-24 10:12 路灯\121.dsw
文件 240 2009-04-24 19:27 路灯\121.plg
文件 444799 2009-04-02 16:45 路灯\robot.3ds
文件 3883 2009-04-24 10:27 路灯\121.dsp
文件 3377 2009-04-24 19:15 路灯\fasd.dsp
文件 24123 2009-04-24 20:27 路灯\fasd.cpp
文件 892 2009-04-24 19:15 路灯\fasd.plg
文件 509952 2009-04-24 20:27 路灯\121.exe
文件 48640 2009-04-24 19:27 路灯\121.opt
文件 48640 2009-04-24 19:32 路灯\fasd.opt
文件 7982080 2009-04-24 19:32 路灯\fasd.ncb
文件 4817 2009-04-24 19:32 路灯\fasd.vcproj
..A..H. 8192 2009-04-24 19:32 路灯\fasd.suo
文件 1427 2009-04-24 19:32 路灯\fasd.vcproj.496DD1411957409.Administrator.user
文件 8858624 2009-04-24 20:27 路灯\121.ncb
文件 5630 2009-04-24 19:44 路灯\121.vcproj
文件 876 2009-04-24 19:32 路灯\121.sln
..A..H. 9216 2009-04-24 20:27 路灯\121.suo
文件 1427 2009-04-24 20:27 路灯\121.vcproj.496DD1411957409.Administrator.user
文件 4781 2009-04-02 16:45 路灯\3ds.h
文件 13724 2009-04-02 16:45 路灯\3ds.cpp
文件 721964 2009-04-24 18:40 路灯\Gundam.3ds
文件 140288 2009-04-24 19:27 路灯\Debug\vc60.idb
文件 77824 2009-04-24 19:25 路灯\Debug\vc60.pdb
文件 79630 2009-04-24 20:27 路灯\Debug\fasd.obj
文件 360912 2009-04-24 20:27 路灯\Debug\121.ilk
文件 7690 2009-04-24 20:27 路灯\Debug\BuildLog.htm
文件 2048 2009-04-24 19:32 路灯\Debug\fasd.exe.em
文件 576512 2009-04-24 20:27 路灯\Debug\vc90.idb
文件 249856 2009-04-24 20:27 路灯\Debug\vc90.pdb
............此处省略20个文件信息
- 上一篇:MCGS动画图标
- 下一篇:LogParser2.2+LogParserLizard
相关资源
- 基于51单片机的智能光控路灯
- 使用开源的supersocket实现的路灯模拟通
- 数电课设路灯控制器
- 智慧路灯解决方案
- 路灯智能控制器
- 基于LoRa技术的智慧路灯设计
- 基于stm32的智能路灯控制
- 海康威视智慧路灯产品介绍 .pptx
- 基于ZigBee的智能路灯系统Zigbee项目)
- STC89C52芯片的模拟路灯控制系统
- 基于ZigBee 技术的路灯无线网络控制系
- 全国各地市路灯数量统计表
- 太阳能LED 路灯照明系统优化设计.pd
- 路灯远程件监测系统
- 软著模板:基于NB-IoT技术的城市道路
- 基于单片机的路灯自动控制系统
- protues 太阳能LED路灯充电控制器模拟充
- 太阳能LED路灯控制器设计
- 声光控路灯控制课程设计
- 路灯控制系统完整版+PROTEUS仿真
- 太阳能led路灯策划
- 超级实用的multism声光控路灯控制系统
- 基于ZigBee无线网络路灯监测控制系统
- 太阳能路灯毕业论文
- ZigBee智能路灯控制系统
- 100W输出的LED路灯驱动电路(电源)图
- 两款光控路灯电路原理图和介绍都有
- 路灯智能控制系统论文
- 太阳能路灯系统设计资料
- 基于ZigBee的路灯控制系统
评论
共有 条评论