游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1919|回复: 1

新手求助:关于简化Mesh

[复制链接]

6

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
QQ
发表于 2006-4-21 23:18:00 | 显示全部楼层 |阅读模式
学了两周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。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2006-4-23 16:14:00 | 显示全部楼层

Re:新手求助:关于简化Mesh

加入这个
Device.IsUsingEventHandlers=false;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 07:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表