Hace poco he estado preguntando lo mismo y llegué a la conclusión de que OpenTK es fácil de usar para eso. Creo que da acceso más o menos directo a la API de OpenGL y no requiere muchas dependencias.
Esto es un poco copy'n'paste de my own question and answer, que es el resultado de haber probado muchas bibliotecas diferentes en los últimos días con el objetivo de hacer una nube de puntos basada en los datos que recibo de mi Kinect.
No proporciona una salida para ViewPort3D, pero según mis pruebas fue mucho más rápido que usar WPF. No pude visualizar (y seguir actualizando) una nube de puntos de 640x480 en WPF a una velocidad aceptable.
Es comparativamente fácil de entender. Requiere pocas (y comprensibles) líneas de código para comenzar. No retiene los objetos para mí, así que puedo cambiar cualquier cosa por cada pase, lo cual es genial porque estoy trabajando principalmente con punteros inseguros para la memoria.
Por supuesto, es difícil combinar velocidad con la facilidad de uso. La velocidad requiere hablar directamente con la API 3D, mientras que la facilidad de uso requiere abstracción. Por lo tanto, esto debe considerarse una API de nivel más bajo que algunos de los otros que he probado. Si quisiera hacer una animación de personajes prefabricada, XNA probablemente sería una mejor opción, pero para las nubes de puntos esto parece muy prometedor hasta ahora (4-5 horas de pirateo).
un código de ejemplo:
private void Render()
{
// Every frame
GL.Begin(BeginMode.Points);
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();
}