引擎中的一些dynamic mesh在GForce 440MX上显示不正常,draw call全都返回成功,DX没有任何debug信息。经过仔细观察,发现主要是贴图坐标不对。在确认了uv transform,uv index等都没问题之后,开始怀疑顶点格式的问题。这些mesh都使用了下面这种顶点格式:
struct vert_ptd
{
vector3 pos;
vector2 uv;
DWORD diffuse;
};
把此顶点格式改为:
struct vert_pdt
{
vector3 pos;
DWORD diffuse;
vector2 uv;
};
并相应的修改了vertex declaration之后显示正常了——,@_@|||
初看上去有些诡异,仔细一想应该是由于GeForce MX440只支持fixed function pipeline的原因,因为老的FVF对顶点元素是有顺序要求的!看来如果想兼容老显卡,在顶点格式方面必须小心啦!
【下图来自dx8.1sdk文档】

针对GeForceMX440显卡在显示某些dynamicmesh时出现的问题,通过调整顶点格式从vert_ptd到vert_pdt,解决了贴图坐标错误导致的显示异常。
1477

被折叠的 条评论
为什么被折叠?



