2008-09-12 25 views
7

¿Hay alguna otra manera de representar gráficos en C# más allá de GDI+ y XNA?Gráficos de representación en C#

(Para el desarrollo de un editor de mapas de baldosas.)

+0

David, acaba de notar su pregunta "Entender los indicadores". Gran pregunta, excelentes respuestas! Todos los puntos mencionados en esa publicación también se aplican a mi respuesta "insegura" a continuación. – Ash

Respuesta

8

SDL.NET es la solución que he llegado a amar. Si necesita 3D en la parte superior, puede usar Tao.OpenGL para procesar dentro. Es rápido, estándar de la industria (SDL), y multiplataforma.

+0

¡Impresionante! Estoy realmente familiarizado con SDL. Voy a investigar esto. –

+0

Han movido su wiki para que ese enlace ya no funcione. Simplemente vaya a http://cs-sdl.sourceforge.net/ y navegue desde allí –

3

Sí, he escrito un control de Windows Forms que envuelve DirectX 9.0 y proporciona manipulación directa de nivel de píxeles de la superficie de video.

De hecho, me escribió otro mensaje el desbordamiento de pila preguntando si hay otros enfoques mejores: Unsafe C# and pointers for 2D rendering, good or bad?

Si bien es relativamente alto rendimiento, se requiere la opción de compilador insegura, ya que utiliza punteros para acceder a la memoria de manera eficiente. De ahí el motivo de esta publicación anterior.

Se trata de un alto nivel de los pasos necesarios:

  1. Descargar el SDK de DirectX.
  2. Cree un nuevo proyecto C# Windows Forms y haga referencia al ensamblado Microsoft DirectX instalado.
  3. Inicialice un nuevo objeto de dispositivo DirectX con los Parámetros de presentación (en ventanas, memoria intermedia posterior, etc.) que necesite.
  4. Cree el dispositivo, teniendo cuidado de registrar la superficie "Paso" y modo de visualización actual (bits por píxel).
  5. Cuando necesite mostrar algo, Lock la superficie del amortiguador y guarde el puntero devuelto al inicio de la superficie de memoria.
  6. Utilice la aritmética del puntero, calcule la posición del píxel real en los datos en función del paso de la superficie, bits por píxel y la coordenada x/y del píxel real.
  7. En mi caso por simplicidad me estoy quedando con 32   bpp, lo que significa que configurar un píxel es tan simple como: * (surfacePointer + (y * pitch + x)) = Color.FromARGB (255,0,0);
  8. Cuando termine de dibujar, Unlock superficie de la memoria intermedia posterior. Presente la superficie.
  9. Repita desde el paso 5 según sea necesario.

Tenga en cuenta que teniendo en cuenta este enfoque debe tener mucho cuidado con la comprobación del modo de visualización actual (paso y bits por pxiel) de la superficie del objetivo. También deberá tener una estrategia para lidiar con el cambio de tamaño de la ventana o los cambios de formato de pantalla mientras se ejecuta su programa.

1

Puede intentar buscar en WPF, utilizando Visual Studio y/o Expression Blend. No estoy seguro de qué tan sofisticado está tratando de obtener, pero debería ser capaz de manejar un editor simple. Consulte esto MSDN Article para obtener más información.

2
  • DirectX administrado (espacio de nombres Microsoft.DirectX) para gráficos 3D más rápidos. Es un contenedor sólido de .NET sobre la API de DirectX, que viene con un poco de rendimiento para crear.Objetos NET y clasificación. A menos que esté escribiendo un motor 3D moderno con todas las funciones, funcionará bien.

  • Window Presentation Foundation (WPF) (espacio de nombres Windows.Media) - la mejor opción para gráficos 2D. También tiene habilidades limitadas en 3D. Dirigido a reemplazar Windows Forms con vector, marco acelerado por la independencia de la resolución de hardware. Muy conveniente, admite varios sabores de controles personalizados, recursos, enlace de datos, eventos y comandos ... también tiene algunos WTF. La velocidad suele ser más rápida que GDI y más lenta que DirectX, y depende en gran medida de cómo se hacen las cosas (se ha visto algo para trabajar 60 veces más rápido después de volver a escribir de forma sensata). Tuvimos éxito al implementar 3 pantallas de 1280x1024 llenas de indicadores, gráficos y trazados en tiempo real en una única (y no la mejor) PC.

0

Cairo es una opción. Actualmente estoy reescribiendo mi software de mapeo usando tanto GDI + como Cairo. Tiene un generador de mapas de teselas, entre otras características.