[Nebula2]使用3dmax7,nmaxtoolbox导出模型到nebula2遇到的问题及解决方法
2006-10-13 11:30
726 查看
1. 长度单位
假设nebula2内使用opende,其长度单位一般当作公制的米(也可以根据需要调整重力加速度质量等的比例来使用其他单位)。
3dmax内可以调整内部数据使用的长度单位。
Customise->Units Setup...->System Unit Setup
调整为任意单位,只需要保证Unit
Setup内的显示单位(Display Unit
Scale)与之匹配,则导出时的'数据'尺寸就是Measure中查看到的值。
Nebula Export Options内有一个Scale Geometry
By的参数,改为1.0则可以保持尺寸不变。(默认值为0.01,此时建议设置System
Unit为厘米、
显示单位为米以保证程序内使用的长度单位与模型制作时的单位一致)
2. 坐标轴
3dsmax是右手系坐标轴,z轴正方向向上。而nebula2则是右手系,y轴正方向向上。这个变化由nmaxtoolbox导出时自动进行转换。
3. 渲染结点包围盒偏移
无骨骼模型在进行了一系列的变换后会产生变换,其结果是包含整个模型的ntransformnode结点的包围盒与实际看到的对象的包围盒不一致。这在
进行对象可见裁减时将得到错误的结果。
解决方法有2种:第一种是模型变换后进行Reset
XForm并重新转为editable mesh
第二种则是程序中所有对象的可见裁减不以模型为单位,而以实际的nshapenode为单位。(该方法仅是设想,未尝试)
4. 层次结构的模型动画
模型之间设置父子关系,子模型会收到父模型动画的影响,如模拟监视器探头的2个不同轴向的关节。只需要分别设置父子的相对动画过程即可。
5. 骨骼动画与程序中模型的装配连接
模型可以通过绑定骨骼的方式得到装配点,但装配点骨骼方向需要设置为方向(0,0,0)(即指向3dsmax的x轴正方向)才能得到模型向正上方。
程序中可以直接取装配点骨骼的变换矩阵乘到装配模型的变换矩阵内。
如:坦克炮塔,炮塔装配在坦克上方。炮管装配在炮塔前部。
// set tank tower
mx.ident();
mx.rotate_y(this->tower_turn.x); // 坦克炮塔水平转向
if (this->joint[0])
{
mx *= this->joint[0]->GetMatrix(); // 装配骨骼
}
mx *= mx_tank; // 坦克变换矩阵
this->tower->Transform().setmatrix(mx);
this->tower->Render();
// set tank gun
mx.ident();
mx.rotate_x(this->tower_turn.y); // 炮管上下转
if (this->joint[1])
{
mx *= this->joint[1]->GetMatrix(); // 炮管装在炮塔上
}
mx.rotate_y(this->tower_turn.x); // 炮塔水平转
if (this->joint[0])
{
mx *= this->joint[0]->GetMatrix(); // 炮塔装在坦克上
}
mx *= mx_tank; // 坦克的变换矩阵
this->gun->Transform().setmatrix(mx);
this->gun->Render();
6. 阴影体的制作和导出
阴影体用来生成shadow
volume,nebula2需要模型制作对应的阴影体才能生成shadow
volume。
阴影体分为两类,static shadow和skinned shadow。
阴影体必须是闭合的,否则生成的阴影在边界处会显示出多余的阴影片。
多个阴影体可以相交或重合。
3dsmax中制作阴影体可以复制原模型然后修改mesh
options为shadow后导出。
如果使用skinned
shadow,则在阴影体上添加skin这个modifier后最终导出时需要选择包含mesh
options的modifier再导出(可能是nmaxtoolbox的缺陷)否则导出时阴影体被认为是普通模型。
阴影体制作补充
阴影体的闭合不仅要把阴影体模型的洞补上,而且从原模型复制来的阴影体如果是多重纹理的需要把阴影体纹理统一到同一个纹理空间,否则导出的阴影体将会按多重纹理把阴影体切分成为不闭合的多个模型。
===========================
放出我正在使用中的nmaxtoolbox。修改内容如下:
1.
光源导出castshadows参数;点光源(Omni/Point)导出LightRange参数(默认为500.f)
2.
材质导出renderpri参数,nebula2中使用它对物体进行渲染排序
3.
纹理默认值,使用shaders:shaders.xml中定义的默认值(仅支持AmbientMap0,BumpMap0,DiffMap0)官方最近的更新支持所有类型的纹理,但各类型固定了默认值。
4. 为了配合nebula2的shadow2,阴影体单独导出mesh文件:
static
shadow导出带有_shadow后缀的mesh文件,顶点格式COORD,
3个float
skinned
shadow导出带有_skinnedshadow后缀的mesh文件,顶点格式COORD,
WEIGHT, JINDICES, 11个float
5. export菜单不调用nviewer。
下载地址:
http://zikaizhang.googlepages.com/nmaxtoolbox_2006_10_12.exe
假设nebula2内使用opende,其长度单位一般当作公制的米(也可以根据需要调整重力加速度质量等的比例来使用其他单位)。
3dmax内可以调整内部数据使用的长度单位。
Customise->Units Setup...->System Unit Setup
调整为任意单位,只需要保证Unit
Setup内的显示单位(Display Unit
Scale)与之匹配,则导出时的'数据'尺寸就是Measure中查看到的值。
Nebula Export Options内有一个Scale Geometry
By的参数,改为1.0则可以保持尺寸不变。(默认值为0.01,此时建议设置System
Unit为厘米、
显示单位为米以保证程序内使用的长度单位与模型制作时的单位一致)
2. 坐标轴
3dsmax是右手系坐标轴,z轴正方向向上。而nebula2则是右手系,y轴正方向向上。这个变化由nmaxtoolbox导出时自动进行转换。
3. 渲染结点包围盒偏移
无骨骼模型在进行了一系列的变换后会产生变换,其结果是包含整个模型的ntransformnode结点的包围盒与实际看到的对象的包围盒不一致。这在
进行对象可见裁减时将得到错误的结果。
解决方法有2种:第一种是模型变换后进行Reset
XForm并重新转为editable mesh
第二种则是程序中所有对象的可见裁减不以模型为单位,而以实际的nshapenode为单位。(该方法仅是设想,未尝试)
4. 层次结构的模型动画
模型之间设置父子关系,子模型会收到父模型动画的影响,如模拟监视器探头的2个不同轴向的关节。只需要分别设置父子的相对动画过程即可。
5. 骨骼动画与程序中模型的装配连接
模型可以通过绑定骨骼的方式得到装配点,但装配点骨骼方向需要设置为方向(0,0,0)(即指向3dsmax的x轴正方向)才能得到模型向正上方。
程序中可以直接取装配点骨骼的变换矩阵乘到装配模型的变换矩阵内。
如:坦克炮塔,炮塔装配在坦克上方。炮管装配在炮塔前部。
// set tank tower
mx.ident();
mx.rotate_y(this->tower_turn.x); // 坦克炮塔水平转向
if (this->joint[0])
{
mx *= this->joint[0]->GetMatrix(); // 装配骨骼
}
mx *= mx_tank; // 坦克变换矩阵
this->tower->Transform().setmatrix(mx);
this->tower->Render();
// set tank gun
mx.ident();
mx.rotate_x(this->tower_turn.y); // 炮管上下转
if (this->joint[1])
{
mx *= this->joint[1]->GetMatrix(); // 炮管装在炮塔上
}
mx.rotate_y(this->tower_turn.x); // 炮塔水平转
if (this->joint[0])
{
mx *= this->joint[0]->GetMatrix(); // 炮塔装在坦克上
}
mx *= mx_tank; // 坦克的变换矩阵
this->gun->Transform().setmatrix(mx);
this->gun->Render();
6. 阴影体的制作和导出
阴影体用来生成shadow
volume,nebula2需要模型制作对应的阴影体才能生成shadow
volume。
阴影体分为两类,static shadow和skinned shadow。
阴影体必须是闭合的,否则生成的阴影在边界处会显示出多余的阴影片。
多个阴影体可以相交或重合。
3dsmax中制作阴影体可以复制原模型然后修改mesh
options为shadow后导出。
如果使用skinned
shadow,则在阴影体上添加skin这个modifier后最终导出时需要选择包含mesh
options的modifier再导出(可能是nmaxtoolbox的缺陷)否则导出时阴影体被认为是普通模型。
阴影体制作补充
阴影体的闭合不仅要把阴影体模型的洞补上,而且从原模型复制来的阴影体如果是多重纹理的需要把阴影体纹理统一到同一个纹理空间,否则导出的阴影体将会按多重纹理把阴影体切分成为不闭合的多个模型。
===========================
放出我正在使用中的nmaxtoolbox。修改内容如下:
1.
光源导出castshadows参数;点光源(Omni/Point)导出LightRange参数(默认为500.f)
2.
材质导出renderpri参数,nebula2中使用它对物体进行渲染排序
3.
纹理默认值,使用shaders:shaders.xml中定义的默认值(仅支持AmbientMap0,BumpMap0,DiffMap0)官方最近的更新支持所有类型的纹理,但各类型固定了默认值。
4. 为了配合nebula2的shadow2,阴影体单独导出mesh文件:
static
shadow导出带有_shadow后缀的mesh文件,顶点格式COORD,
3个float
skinned
shadow导出带有_skinnedshadow后缀的mesh文件,顶点格式COORD,
WEIGHT, JINDICES, 11个float
5. export菜单不调用nviewer。
下载地址:
http://zikaizhang.googlepages.com/nmaxtoolbox_2006_10_12.exe
相关文章推荐
- 在SharePoint中服务器端使用Word编程模型转换PDF遇到的问题以及解决方法
- 使用GridView时遇到的一些小问题及解决方法
- iphone 开发中使用zbar时遇到的几个典型问题解决方法。
- 使用IDA调试Android原生程序中遇到的问题及解决方法
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- Python2.5使用新浪微博Python SDK遇到的问题与解决方法
- 使用xml模板导出excel时遇到尖括号<>转义的问题解决
- zabbix使用过程中遇到的问题与解决方法(1)
- 使用innobackupex备份遇到的问题和解决方法
- 自动化测试工具TestWriter使用时遇到的脚本录制问题及解决方法
- sublime 使用中一些遇到问题解决方法和技巧汇总(持续更新)
- Struts 2 使用属性模型取checkbox 值出现问题解决方法。
- ubuntu14.04 使用中遇到的问题及解决方法集锦
- 使用Navicat Premium将Oracle数据库中的表和数据迁移到MySQL数据库中,遇到的Date类型出现精度问题及解决方法
- Ubuntu上使用Codeblocks遇到的一些问题及解决方法
- Android使用AudioRecord遇到的问题与解决方法
- 使用elasticsearch遇到的一些问题以及解决方法
- MAC 上使用MySQL Workbench工具管理mysql数据库时遇到的一些问题及解决方法
- C# 使用Linq递归查询数据库遇到的问题及解决方法
- 使用CentOS 遇到的问题以及解决方法(持续更新)