Estoy tratando de crear una tabla de paso usando OpenGL. Para hacer esto, estoy tratando de dibujar un montón de líneas para crear la grilla. Sin embargo, cada sitio de tutorial (incluyendo OpenGL) tiene los ejemplos en C++ y el wiki de Haskell no hace un buen trabajo de explicarlo. Soy nuevo en opengl y me gustaría un tutorial.Dibujando líneas con OpenGL en Haskell
Respuesta
Supongo que quiere usar OpenGL 2.1 o una versión anterior. Para OpenGL 3.0, necesita un código diferente.
Así, en C que iba a escribir esto:
glBegin(GL_LINES);
glVertex3f(1, 2, 3);
glVertex3f(5, 6, 7);
glEnd();
Usted escribe el equivalente en Haskell como esto:
renderPrimitive Lines $ do
vertex $ Vertex3 1 2 3
vertex $ Vertex3 5 6 7
Con este código, que no uso, por ejemplo, 1
en lugar de alguna variable, puede obtener errores sobre tipos ambiguos (por lo tanto, debe reemplazar 1
con (1 :: GLfloat)
), pero si usa variables reales que ya tienen el tipo GLfloat
, no debería tener que hacer esto.
Aquí está un programa completo que traza una diagonal blanco en la ventana:
import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT
main :: IO()
main = do
-- Initialize OpenGL via GLUT
(progname, _) <- getArgsAndInitialize
-- Create the output window
createWindow progname
-- Every time the window needs to be updated, call the display function
displayCallback $= display
-- Let GLUT handle the window events, calling the displayCallback as fast as it can
mainLoop
display :: IO()
display = do
-- Clear the screen with the default clear color (black)
clear [ ColorBuffer ]
-- Render a line from the bottom left to the top right
renderPrimitive Lines $ do
vertex $ (Vertex3 (-1) (-1) 0 :: Vertex3 GLfloat)
vertex $ (Vertex3 1 1 0 :: Vertex3 GLfloat)
-- Send all of the drawing commands to the OpenGL server
flush
El OpenGL predeterminado utiliza la proyección de función fija (-1, -1) para la parte inferior izquierda y (1, 1) para la parte superior derecha de la ventana. Necesita modificar la matriz de proyección para obtener diferentes espacios de coordenadas.
Para obtener ejemplos más completos como este, consulte the Haskell port of the NEHE tutorials. Usan los enlaces RAW OpenGL, que son más parecidos a los enlaces C.
Una rápida de Google apareció esto:
http://www.haskell.org/haskellwiki/OpenGLTutorial1
En cualquier caso, ya que OpenGL es originalmente una biblioteca de C, es posible que desee conseguir sus pies mojados en C (o C++) en primer lugar, ya que se Podré usar la documentación original de OpenGL tal como está; después de eso, es posible que desee profundizar en las vinculaciones de Haskell y ver cómo utiliza las mismas llamadas OpenGL en Haskell.
Ya he visto esto. Tiene muchas fotos, pero realmente no explica cómo hacer nada. – lewdsterthumbs
Sí, pero no es inmediatamente obvio. – tdammers
- 1. Dibujando muchas esferas en OpenGL
- 2. openGL: líneas con sombreadores
- 3. Dibujando líneas 3D en WPF
- 4. Dibujando curvas de Hermite en OpenGL
- 5. Dibujando grandes cantidades de píxeles en OpenGL
- 6. Dibujando una esfera en OpenGL ES
- 7. OpenGL: Dibujar líneas con VBO
- 8. Dibujando líneas punteadas y continuas
- 9. Gráfico de Haskell dibujando en Windows
- 10. Dibujando una línea de ancho variable en OpenGL (Sin glLineWidth)
- 11. Dibujando líneas con el algoritmo de línea de Bresenham
- 12. Dibujando un conjunto fijo de líneas de cuadrícula con opencv
- 13. Dibujar líneas punteadas con OpenGL-ES
- 14. Dibujando triángulos con CUDA
- 15. Dibujando polígonos en XML con Android
- 16. Dibujando líneas en código usando C# y WPF
- 17. textura de JuicyPixels cargando en Haskell OpenGL?
- 18. Dibujando esferas con RadialGradientBrush
- 19. Dibujando círculos con CGContext
- 20. dibujando círculos con System.Drawing
- 21. Dibujando árboles genealógicos con WPF
- 22. Haskell leer las líneas de archivo
- 23. Dibujando una ruta con CAKeyFrameAnimation en iPhone
- 24. Dibujando una línea con flecha en Java
- 25. ¿Qué álgebra lineal usar para OpenGL en Haskell?
- 26. Dibujando texto en un lienzo
- 27. Dibujando texto en .NET
- 28. Dibujando gráficos en Java
- 29. "entrada GLU desconocida gluOrtho2D" usando opengl en Haskell
- 30. Relleno de líneas de escaneo Algoritmo OpenGL/GLUT en C++
Parece que funcionará para lo que intento hacer, sin embargo, parece que no funciona. El programa se compilará, pero no se dibujan líneas cuando lo ejecuto. Tal vez no estoy haciendo lo correcto, o lo estoy poniendo en el área incorrecta. De nuevo, soy nuevo en opengl y realmente no sé cómo funciona. ¿Hay alguna forma de que me la puedas dar como más un programa completo (uno que un principiante pueda entender)? – lewdsterthumbs
Ok, he agregado un programa de ejemplo completo que funciona en mi computadora. – dflemstr
@lewdsterthumbs Puede disfrutar de [40 formas de obtener una pantalla en negro] (http://dmalcolm.livejournal.com/2433.html). –