在过去,这很容易;你制作了自己的 3D 东西,然后是 DirectX,然后是 OpenGL。对于.Net 开发人员来说,MDX 很不错。然后 XNA 接管了 MDX,但它不一样。 XNA 似乎非常以游戏为中心,具有固定模型和内容的所有内容流水线和预加载。
那么我们现在处于什么位置?经过几天的研究/试验和错误后,我觉得到处都能找到开发一半的库、有开销的库、严重的限制或过于复杂的库。
我想做“徒手”3D 的东西。例如在 3D 屏幕上显示 200k 点并以 30fps(Kinect 深度图像)移动它们。我想制作 3D 屏幕保护程序、音频分析插件等。所有这些都不是内容管道的预制件,并且需要高性能。而且(嗯)我想从 .Net 做。
有没有人使用过简单/易于理解的库,并且仍然提供相当大的自由度和速度?
我好像登陆了OpenTK .我认为它或多或少地提供了对 OpenGL API 的直接访问,并且不需要大量的依赖项。
比较容易理解。它只需要很少(且易于理解)的代码行即可开始。它不为我保留对象,因此我可以在每次传递时自由更改任何内容,这很棒,因为我主要使用指向内存的不安全指针。
当然很难将速度与易用性结合起来。速度需要直接与 3D API 对话,而易用性则需要抽象。因此,这必须被视为比我尝试过的其他一些 API 级别更低的 API。如果我想做一些预制角色动画,那么 XNA 可能是更好的选择,但对于我的使用(如上所述),到目前为止这似乎非常有前途(4-5 小时的黑客攻击)。
一些示例代码:
private void Render()
{
// Every frame
GL.MatrixMode(MatrixMode.Modelview);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.LoadMatrix(ref cameraMatrix);
GL.Begin(BeginMode.Points);
// Here I can add lots of points. I add 200k without any big problem.
// It seems these points could have been passed in as an array pointer too,
// but I'll look at that later.
GL.Vertex3(x2, y2, z2);
GL.End();
glControl.SwapBuffers();
}