如何将3Dmax做的模型导入到OpenGL中?

「已注销」 2010-04-09 04:28:17
用3dmax已经制作好了模型,但是不知道怎么在OpenGL中显示,需要什么步骤,请高手们贡献下自己的一点精华帮助下小菜,描述下具体的步骤,如果能有实例再好不过---先行谢过
...全文
1671 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZMQ0598 2010-12-14
  • 打赏
  • 举报
回复
我也是初学这,楼主你QQ多少啊
jiangjunliu 2010-07-19
  • 打赏
  • 举报
回复
怎样把3dmax模型导入VC?

网上有人说用CLoad3DS,这个类的代码都给了。怎么弄啊?我没弄出来。

哪位发一个完整的工程压缩文件啊?用一个简单的例子就行了。

lewieamy@gmail.com
jessicagogo 2010-07-05
  • 打赏
  • 举报
回复
好复杂啊,场景导入问题一直没解决,导致整个项目没能解决,哎!!~~继续努力
VR_Lab 2010-04-11
  • 打赏
  • 举报
回复
下面是显示的代码:
可以到这里下载http://download.csdn.net/source/2227141
也可以看我的资源里的资源,希望对你有用!
// 遍历模型中所有的对象
for(int i = 0; i < g_3DModel.numOfObjects; i++)
{
// 如果对象的大小小于0,则退出
if(g_3DModel.pObject.size() <= 0) break;

// 获得当前显示的对象
t3DObject *pObject = &g_3DModel.pObject[i];

// 判断该对象是否有纹理映射
if(pObject->bHasTexture) {

// 打开纹理映射
glEnable(GL_TEXTURE_2D);
glColor3ub(255, 255, 255);
glBindTexture(GL_TEXTURE_2D, g_Texture[pObject->materialID]);
} else {

// 关闭纹理映射
glDisable(GL_TEXTURE_2D);
glColor3ub(255, 255, 255);
}
// 开始以g_ViewMode模式绘制
glBegin(g_ViewMode);
// 遍历所有的面
for(int j = 0; j < pObject->numOfFaces; j++)
{
// 遍历三角形的所有点
for(int whichVertex = 0; whichVertex < 3; whichVertex++)
{
// 获得面对每个点的索引
int index = pObject->pFaces[j].vertIndex[whichVertex];

// 给出法向量
glNormal3f(pObject->pNormals[ index ].x, pObject->pNormals[ index ].y, pObject->pNormals[ index ].z);

// 如果对象具有纹理
if(pObject->bHasTexture) {

// 确定是否有UVW纹理坐标
if(pObject->pTexVerts) {
glTexCoord2f(pObject->pTexVerts[ index ].x, pObject->pTexVerts[ index ].y);
}
} else {

if(g_3DModel.pMaterials.size() && pObject->materialID >= 0)
{
BYTE *pColor = g_3DModel.pMaterials[pObject->materialID].color;
glColor3ub(pColor[0], pColor[1], pColor[2]);
}
}
glVertex3f(pObject->pVerts[ index ].x, pObject->pVerts[ index ].y, pObject->pVerts[ index ].z);
}
}

glEnd(); // 绘制结束
}

SwapBuffers(wglGetCurrentDC());
VR_Lab 2010-04-11
  • 打赏
  • 举报
回复
我这里有个类用来读取3DS文件格式的,头文件如下:具体代码如有需要加我QQ:726436079,别忘了加分哈,呵呵!
#ifndef _3DS_H
#define _3DS_H

// 基本块(Primary Chunk),位于文件的开始
#define PRIMARY 0x4D4D

// 主块(Main Chunks)
#define OBJECTINFO 0x3D3D // 网格对象的版本号
#define VERSION 0x0002 // .3ds文件的版本
#define EDITKEYFRAME 0xB000 // 所有关键帧信息的头部

// 对象的次级定义(包括对象的材质和对象)
#define MATERIAL 0xAFFF // 保存纹理信息
#define OBJECT 0x4000 // 保存对象的面、顶点等信息

// 材质的次级定义
#define MATNAME 0xA000 // 保存材质名称
#define MATDIFFUSE 0xA020 // 对象/材质的颜色
#define MATMAP 0xA200 // 新材质的头部
#define MATMAPFILE 0xA300 // 保存纹理的文件名

#define OBJECT_MESH 0x4100 // 新的网格对象

// OBJECT_MESH的次级定义
#define OBJECT_VERTICES 0x4110 // 对象顶点
#define OBJECT_FACES 0x4120 // 对象的面
#define OBJECT_MATERIAL 0x4130 // 对象的材质
#define OBJECT_UV 0x4140 // 对象的UV纹理坐标

struct tIndices
{
unsigned short a, b, c, bVisible;
};

// 保存块信息的结构
struct tChunk
{
unsigned short int ID; // 块的ID
unsigned int length; // 块的长度
unsigned int bytesRead; // 需要读的块数据的字节数
};

// CLoad3DS类处理所有的装入代码
class CLoad3DS
{
public:
CLoad3DS(); // 初始化数据成员
// 装入3ds文件到模型结构中
bool Import3DS(t3DModel *pModel, char *strFileName);

private:
// 读一个字符串
int GetString(char *);
// 读下一个块
void ReadChunk(tChunk *);
// 读下一个块
void ProcessNextChunk(t3DModel *pModel, tChunk *);
// 读下一个对象块
void ProcessNextObjectChunk(t3DModel *pModel, t3DObject *pObject, tChunk *);
// 读下一个材质块
void ProcessNextMaterialChunk(t3DModel *pModel, tChunk *);
// 读对象颜色的RGB值
void ReadColorChunk(tMaterialInfo *pMaterial, tChunk *pChunk);
// 读对象的顶点
void ReadVertices(t3DObject *pObject, tChunk *);
// 读对象的面信息
void ReadVertexIndices(t3DObject *pObject, tChunk *);
// 读对象的纹理坐标
void ReadUVCoordinates(t3DObject *pObject, tChunk *);
// 读赋予对象的材质名称
void ReadObjectMaterial(t3DModel *pModel, t3DObject *pObject, tChunk *pPreviousChunk);
// 计算对象顶点的法向量
void ComputeNormals(t3DModel *pModel);
// 关闭文件,释放内存空间
void CleanUp();
// 文件指针
FILE *m_FilePointer;

tChunk *m_CurrentChunk;
tChunk *m_TempChunk;
};


#endif
ReachGod 2010-04-11
  • 打赏
  • 举报
回复
#define MAIN3DS 0x4d4d //主段
#define EDIT3DS 0X3D3D //编辑段
#define EDIT_MATERIAL 0XAFFF
#define MAT_NAME01 0XA000 //材质名
#define MAT_UNKNWN01 0XA010 //Ambiet : 环境光
#define MAT_UNKNWN02 0XA020 //Diffuse : 散射光
#define MAT_UNKNWN03 0XA030 //Specualr :镜面光
#define MAT_UNKNWN04 0XA040 //Shininess X光
#define MAT_UNKNWN05 0XA041
#define MAT_UNKNWN06 0XA050
#define MAT_UNKNWN07 0XA052
#define MAT_UNKNWN08 0XA053
#define MAT_UNKNWN09 0XA100
#define MAT_UNKNWN10 0XA084
#define MAT_UNKNWN11 0XA08A
#define MAT_UNKNWN12 0XA087
#define MAT_UNKNWN13 0XA200
#define MAT_UNKNWN14 0X0030
#define MAT_MAP_NAME 0XA300 //贴图的文件名
#define MAT_UNKNWN15 0XA351
#define MAT_UNKNWN16 0XA353
#define EDIT_CONFIG01 0X0100
#define EDIT_CONFIG02 0x3D3E
#define EDIT_VIEW_P1 0X7012
#define TOP 0X0001
#define BOTTOM 0X0002
#define LEFT 0X0003
#define RIGHT 0X0004
#define FRONT 0X0005
#define BACK 0X0006
#define USER 0X0007
#define CAMERA 0XFFFF
#define LIGHT 0X0009
#define DISABLED 0X0010
#define BOGUS 0X0011
#define EDIT_VIEW_P2 0X7011
#define EDIT_VIEW_P3 0X7020
#define EDIT_VIEW1 0X7001
#define EDIT_BACKGR 0X1200
#define EDIT_AMBIENT 0X2100
#define EDIT_UNKNWN02 0X1400
#define EDIT_UNKNWN03 0X1420
#define EDIT_UNKNWN04 0X1450
#define EDIT_UNKNWN05 0X1460
#define EDIT_UNKNWN06 0X1500
#define EDIT_UNKNWN07 0X1300
#define EDIT_UNKNWN08 0X2200
#define EDIT_UNKNWN09 0X2302
#define EDIT_UNKNWN010 0X2300
#define EDIT_UNKNWN011 0X3000
#define EDIT_OBJECT 0X4000 //物体定义,后跟物体名
#define OBJ_TRIMESH 0X4100
#define TRI_VERTEXL 0X4110 //定义形体的点

3DX 文件有3ds的格式,这个文件格式在网上有很多资料。我的作法是自己在OPENGL里写读取3ds文件数据的代码,然后再显示。不过,你可以用VTK,可以直接读取3ds的文件并显示,两三行的代码就可以解决。VTK是封装了OPONGL的类库
glacier3d 2010-04-10
  • 打赏
  • 举报
回复
导出为.xxx格式,然后在在opengl程序里解析文件渲染
辰岡墨竹 2010-04-10
  • 打赏
  • 举报
回复
一般是保存为.OBJ之类的格式,然后你自己写代码来显示。.OBJ之类的有相关的格式规范,也是现成的实例程序,参考一下就行了。这样比较简单,因为.OBJ之类的格式通常只包含顶点、三角形信息,没有NURBS等复杂的东西,对材质支持也比较有限,但是应该足够了。LS注意LZ是想显示模型,而不是在OpenGL里建模,类似电脑游戏那样。
huaxiani 2010-04-10
  • 打赏
  • 举报
回复
具体是什么样子的啊??[Quote=引用 5 楼 glacier3d 的回复:]
导出为.xxx格式,然后在在opengl程序里解析文件渲染
[/Quote]
xiuxianshen 2010-04-09
  • 打赏
  • 举报
回复
没做过类似的,帮顶,感觉难度有点大
如果直接可以在3DMAX中建模,那OpenGL编程做3D建模不是舍本逐末了,应该有限制的
「已注销」 2010-04-09
  • 打赏
  • 举报
回复
网上找的,不知道什么意思??


http://www.gamedev.net/reference/articles/article1259.asp
fandh 2010-04-09
  • 打赏
  • 举报
回复
3Dmax的模型存成什么文件格式了?在opengl中读取该文件,然后,自己定义数据结构显示!

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧