|
|
学了两周Managed DirectX,一直用Managed DirectX Kick Start,近日进行到第七章遇到一点问题盼高手
指点。
Kick Start中对简化Mesh是这样做的:
ExtendedMaterial[] mtrl;
GraphicsStream adj;
// Load our mesh
mesh = Mesh.FromFile(file, MeshFlags.Managed, device, out adj, out mtrl);
// Clean our main mesh
Mesh tempMesh = Mesh.Clean(CleanType.Simplification,mesh, adj, adj);
// Replace our existing mesh with this one
mesh.Dispose();
mesh = tempMesh;
// Get our new simplified mesh
simplifiedMesh = Mesh.Simplify(mesh, adj, null, 1,MeshFlags.SimplifyVertex);
但运行到最后一句时发生NullReferenceException,未将对象引用设置到对象的实例。
我参考DirectX的Doc,Doc中使用了不同的方法:
SimplificationMesh simplifiedMesh = new SimplificationMesh(mesh, adjacency);
simplifiedMesh.ReduceVertices(mesh.NumberVertices - 25);
mesh.Dispose();
mesh = simplifiedMesh.Clone(simplifiedMesh.Options.Value,
simplifiedMesh.VertexFormat, device);
simplifiedMesh.Dispose();
但我很想知道Kick Start中问题在哪?盼高手帮助。
今天我又尝试了Doc中的方法,结果还是出现同样的错误。
2006-4-22
问题有了新的进展,又出了新的问题。
经过调试发现,在Clean那一段中,对mesh使用dispose的同时,tempMesh也被一起dispose掉了。实在不知道为什么。
于是屏蔽dispose一句,却出现了一个“应用程序中的错误”。实在郁闷。
2006-4-22
在thezbuffer网站上下载了Kick Start的更新源码,证实了对一个Mesh使用Dispose导致其他Mesh均被Dispose,其实是DirectX的一个bug。唉。
微软的东西总是逃不掉bug。 |
|