- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个MeshGeometry3D
存储在单独文件中的元素。例如,somemodel.xml
可能包含 <MeshGeometry3D ... />
.
如果我在主 UI 线程中加载它们,它们会在加载时锁定 UI。所以我尝试将它们加载到一个单独的线程中:
ThreadStart threadStart = delegate
{
var geometry = ConvertXmlFileToMeshGeometry3D(filename);
viewport2DVisual3D.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new Action(delegate { viewport2DVisual3D.Geometry = geometry; }));
};
threadStart.BeginInvoke(delegate(IAsyncResult aysncResult) { threadStart.EndInvoke(aysncResult); }, null);
但是,这会在 viewportVisual.Geometry = geometry;
行出现异常: The calling thread cannot access this object because a different thread owns it.
换句话说,MeshGeometry3D
是在不同的线程上创建的,所以我不能把它变成 Viewport2DVisual3D
的几何体。
我想不出异步加载 MeshGeometry3D
的方法没有他们被错误的线程拥有。这只是不可能的事情,还是有办法做到这一点?
编辑:分析表明大约 13% 的时间加载 MeshGeometry3D
用于从文件 (var element = XElement.Load(filename);
) 加载 xml 元素,其余用于将其转换为 MeshGeometry3D:
return new MeshGeometry3D
{
Normals = (Vector3DCollection)new Vector3DCollectionConverter().ConvertFromString(element.Attribute("Normals").Value),
Positions = (Point3DCollection)new Point3DCollectionConverter().ConvertFromString(element.Attribute("Positions").Value),
TextureCoordinates = (PointCollection)new PointCollectionConverter().ConvertFromString(element.Attribute("TextureCoordinates").Value),
TriangleIndices = (Int32Collection)new Int32CollectionConverter().ConvertFromString(element.Attribute("TriangleIndices").Value),
};
所以看起来从磁盘中获取 XML 并不是这里的瓶颈。
最佳答案
除非以后需要修改模型可以尝试Freeze
它在加载后可以跨线程共享,参见 Freezable Objects Overview .
关于c# - 如何在单独的线程中加载多个 3D 几何体而不遇到线程所有权问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6523987/
我想计算一条线之间的交点: l := direction * x + origin for x e R or x e [0,R+) 和默认的 Boost 多边形。在文档中我只发现了与线段(固定起点和终
我有一个 blender 文件,我将其导出为 DAE/collada,然后使用 Xcode 将其转换为 Scenekit 的场景文件。我在使用场景文件中的几何体时遇到问题。 场景文件(“model.s
我正在开发一些用于生成 3D 模型的 webgl 软件,并且依赖于动态几何。我观察到了一些非常奇怪的行为,我已经能够在 this jsfiddle 中隔离这些行为。 . 似乎在将几何体实例添加到场景后
我们正在尝试构建“编辑 handle ”,允许用户通过在 8 个位置(4 个 Angular + 4 个边)之一拖动来调整(投影)平面的大小。这种调整大小应该只在拖动的方向上缩放/拉伸(stretch
我创建了一个渲染四边形的简单程序 初始化: Math::float3 vertices[4]; vertices[0] = Math::float3(-0.5f, 0.5f, -1.0f); vert
这里是定义我的简单 3D 几何体的点。 datN = {{{-0.47150460764747554`, 0.29559274991660417`, 0.010131794240974218`},
有没有办法在 3d 中定义形状 var x = 0, y = 0, z=0 ; var heartShape = 新三。 形状 (); heartShape.moveTo( x + 25, y + 2
我正在使用网络 worker 加载动画 3D 模型的 .json 文件。对于每个大数组(顶点、法线等),我将一个 Float32Array 缓冲区传输回 UI 线程。由于此类缓冲区是 transfer
我是一名优秀的程序员,十分优秀!