今天解决了两个不是问题的问题

一早上就兴冲冲的把自己在挤公车时想出来的关于 3dmax 导出材质的想法跟老 Z 说了,并看了一上午的 NDL 源代码,想找出它是如何实现多级材质与 Face 对应的,结果倒是没找到,把 NDL 的渲染过程和渲染状态设置部分看了个差不多,中午的时候和老 Z 又讨论了一下,下午反复试了几次,结果发现原本我以为引擎的导出器不支持多级材质居然能正确绘制出来!我突然意识到 从 INode 获取的 Mtl 并不是3dmax 的根材质,而是这个 node 所使用的材质,比如材质 a 是 root 并且是 multi 的,b 是 a 的子材质 并且也是 multi 的,c 是 b 的子材质且是 std,那么当 mesh 使用的是 b 的时候,通过 INode 拿到的就是 b,当使用 c 的时候得到的就是 c,所以虽然通过 Face 的 getMatID 是相对的材质 ID,但也能得到正确的材质信息,而我原以为 INode 得到的是 root 材质,通过相对的 mtlID 是无法获得正确的材质信息,是自己想的复杂了,导出材质的本来就是正确的,不明白为什么 3dmax 的 sdk 里不说明这点。第二个问题是在导出 3dmax 中自带的 国际象棋 的马的时候,总是法线出现问题,出现不正确的光照效果,以为自己的导出方式有问题,仔细看看,觉得也没有问题,百思不得其解。在跟老 Z 讨论的过程中突然间想到,如果模型经过缩放,顶点法线是要重新归一化的,而 d3d 的固定管线的 T&L 默认不会重新计算顶点法线,想到这里,设置 NormalizeNormals 渲染状态为 true ,运行,OK!本来这两个问题都不是问题,却搞了我一天。
Advertisements
此条目发表在3D图形分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s