我一直在尝试将一组复杂的点渲染为 3D 可视化。我有一组图层,每个图层都有多个多边形,每个多边形都有不同数量的点。
我尝试了大量的 .NET 库(OpenGL、DirectX 等的包装器),最终使用 Helix Toolkit 实现了超级简单的 WPF 3D 控件,只是为了渲染 3d 点云可视化。我的超级简单的代码如下所示:
private void Render3D(List<Layer> layers) {
var layerIndex = 0;
var pts = new Point3DCollection();
foreach (var layer in layers) {
foreach (var shape in layer.Shapes) {
foreach (var point in shape.Points) {
pts.Add(new Point3D(point.Item1, point.Item2, layerIndex * .5));
}
}
layerIndex++;
}
var vis = new PointsVisual3D() { Points = pts };
_viewport.Children.Add(vis);
}
Run Code Online (Sandbox Code Playgroud)
我的 XAML 如下:
<Window xmlns:h="http://helix-toolkit.org/wpf">
<h:HelixViewport3D Name="_viewport">
<h:SunLight />
</h:HelixViewport3D>
</Window> …Run Code Online (Sandbox Code Playgroud) 我想尝试编写类似于4D玩具的游乐场,所以我开始学习opengl。
根据我目前的理解,人们将VBO和统一的转换矩阵用于大多数静态对象
(例如立方体,骨骼动画等,通常只涉及转换)。
我还听说,模型之间的变形也使用VBO来缓存两个模型,因为这两个模型都可以很好地定义并且不需要太多的中间步骤。
但是在上面提到的4D玩具中,物体会发生变形并被大量裁剪。
而且很可能没有定义的模型,并且两者之间有很多转换。
(现在可能是一个简单的正方形,一个尖刺的球在以后被切成两半)。
在这种情况下,每帧更新顶点VBO或顶点数组(我在另一个问题中看到)是合适的解决方案吗?