c# - 用什么? Tao、SharpGL、OpenTK、DirectX P/Invoke、XNA、MDX、SlimDX、Windows API 编解码器包

标签 c# 3d

<分区>

在过去,这很容易;你制作了自己的 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();
}

关于c# - 用什么? Tao、SharpGL、OpenTK、DirectX P/Invoke、XNA、MDX、SlimDX、Windows API 编解码器包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4885085/

相关文章:

c# - 将 JSON 字符串转换为 DataTable C# 时出现问题

c# - LINQ intersect() 方法

graphics - 怎样才能达到 "Antichamber"游戏中的效果?

math - 如何使用three.js绘制自定义3d表面?

java - 在 Java 中绘制密集的 3D 点云(或网格)

c# - 当第一个数据流 block 的输入完成所有链接 block 时报告

c# - WPF 仅访问具有依赖属性的派生类的单个实例

c# - c#中虚函数的实际使用

c++ - 实时对象绘画

python - Python 中的 3D 绘图 - 向散点图添加图例