C# 哪种3D渲染技术/算法最有效地通过边绘制光束?
我正在尝试用C#构建一个程序,生成由梁组成的结构的3D模型,然后创建对象的一些视图(正面、侧面、顶部和等轴测) 由于我不需要绘制曲面(边就足够了),所以我一直在计算要绘制的每条线,然后使用C# 哪种3D渲染技术/算法最有效地通过边绘制光束?,c#,algorithm,3d,render,C#,Algorithm,3d,Render,我正在尝试用C#构建一个程序,生成由梁组成的结构的3D模型,然后创建对象的一些视图(正面、侧面、顶部和等轴测) 由于我不需要绘制曲面(边就足够了),所以我一直在计算要绘制的每条线,然后使用 GraphicObject.DrawLine(myPen, x1, y1, x2, y2) 到目前为止,这一切都很好,但随着我向结构中添加部件,刷新GraphicObject需要花费太多时间。所以我开始进行线条可见性检查,以减少要绘制的线条数量 我在维基百科和一些PDF上搜索过这个主题,但我所找到的都是面向
GraphicObject.DrawLine(myPen, x1, y1, x2, y2)
到目前为止,这一切都很好,但随着我向结构中添加部件,刷新GraphicObject
需要花费太多时间。所以我开始进行线条可见性检查,以减少要绘制的线条数量
我在维基百科和一些PDF上搜索过这个主题,但我所找到的都是面向表面的。所以我的问题是:是否有一个简化的算法来检查对象边缘的可见性,或者我应该采用另一种方法,比如考虑曲面?
如果您有任何建议,我们将不胜感激,谢谢您的帮助
补充说明/问题:
我目前的做法是:
- 计算局部轴中的每个梁(所有顶点)
- =>将其移动到其全球位置
- =>创建一个包含成对点的列表(投影并缩放到视图)
- =>
点对列表)GraphicObject.DrawLine
- 如果我按像素计算视图,而不是使用
方法,整个过程会更快吗DrawLine
- 结构视图
- 结构细节
有两种解决方案可提高性能。 a) 将计算切换到图形卡。 b) 使用kd树或其他类似的数据结构快速删除不可见的边 详情如下: 对于a),很多计算都是将许多顶点(长度为3的向量)乘以某个矩阵。CPU的速度很慢,因为它们一次只执行几个这样的操作。切换到GPU,例如使用CUDA,这将允许您使用更好的内存访问基础设施并行执行更多操作。您还可以使用OpenGL/DirectX/Vulkan或其他任何工具来渲染线条本身,以避免从图形卡获取结果,以及windows代码/库引入的任何其他问题。这在几乎所有情况下都有助于提高性能 对于b),它仅在您不查看整个场景时才有帮助(在这种情况下,您确实需要绘制所有内容)。在这种情况下,您可以将场景存储在kd树或其他一些数据结构中,并使用它快速删除视图区域之外肯定存在的内容。通常需要将某个长方体与棱锥体/fustrum相交,这样就需要更多的数学运算 作为一个妥协,在一个大的场景中你应该帮助你看到一切,你可以考虑调整细节的水平。在您的示例中,整个读取bean由8个左右的组件组成。如果你够远,你将无法分辨8,所以只画一个。如果您有大量的圆角,这将非常有用,因为您可以简化很多圆角