OpenGL ist eine plattformunabhängige Open source Grafikbibliothek. Sie besteht zu einem großen Teil aus der automatischen Berechnung von [[vektor|Vektoren]] mittels direkten Grafikkartenbefehlen. Damit ist es weitgehend von der Hardware abstrahiert und interagiert hauptsächlich mit Grafiktreibern. Diese sollten deshalb aktuell sein. UPDATEN!!!! =====Primitives===== {{https://www3.ntu.edu.sg/home/ehchua/programming/opengl/images/GL_GeometricPrimitives.png}} =====Coordinates===== {{https://www3.ntu.edu.sg/home/ehchua/programming/opengl/images/GL_2DCoordinates.png}} =====Libraries===== Oft wird nicht direkt mit OpenGL, sondern mit Frameworks und Wrappern gearbeitet die auf OpenGL Methoden zugreifen. * [[glfw|GLFW]] (am wenigsten dokumentiert) * [[glut|GLUT]]/FreeGLUT * GLAD (Extension loader) * GLU (very old) * [[glm|GLM]] (Beste Math library) ====GLFW==== GLFW (OpenGL FrameWork) ist eine leichte Bibliothek, die speziell für die Erstellung von OpenGL-Anwendungen entwickelt wurde. Sie bietet eine plattformübergreifende API zum Erstellen von Fenstern, zur Erfassung von Tastatur- und Mausereignissen, zur Erstellung von OpenGL-Kontexten und zur Verwaltung von OpenGL-Fenstereigenschaften. GLFW ist bekannt für seine einfache Integration, hohe Performance und Stabilität. Es ist eine beliebte Alternative zu GLUT und wird häufig in modernen OpenGL-Projekten verwendet. ====SDL==== SDL (Simple DirectMedia Layer) ist eine umfassende plattformübergreifende Multimedia-Bibliothek, die neben der Unterstützung für Grafik, auch Audio, Tastatur, Maus und Joystick-Steuerung bietet. SDL kann auch zur Erstellung von OpenGL-Anwendungen verwendet werden und bietet Funktionen für die Erstellung von Fenstern, die Verwaltung von Ereignissen und den Zugriff auf die Grafikhardware. SDL ist bekannt für seine Einfachheit und Flexibilität und wird in vielen plattformübergreifenden Spielen und Anwendungen verwendet. ====GLUT==== GLUT (OpenGL Utility Toolkit) war eine ursprüngliche OpenGL-Bibliothek, die entwickelt wurde, um die Entwicklung von OpenGL-Anwendungen zu vereinfachen. Es bietet Funktionen zum Erstellen von Fenstern, zum Behandeln von Tastatur- und Mausereignissen, zum Erstellen von Menüs und zur Verwaltung von OpenGL-Kontexten. GLUT war weit verbreitet und hat zur Popularität von OpenGL beigetragen. Allerdings wird GLUT nicht mehr aktiv weiterentwickelt, und es gibt einige Einschränkungen und Mängel in der Funktionalität im Vergleich zu neueren Bibliotheken. ====GLM==== GLM (OpenGL Mathematics) ist eine C++-Mathematikbibliothek, die speziell für die Verwendung mit OpenGL entwickelt wurde. Sie bietet Funktionen und Klassen für die Vektor- und Matrizenmanipulation sowie mathematische Operationen, die häufig in der 3D-Grafik verwendet werden. GLM bietet eine einfache und intuitive Schnittstelle, die der GLSL-Sprache ähnelt und eine nahtlose Integration mit OpenGL ermöglicht. Es erleichtert die Berechnungen und Transformationen in 3D-Anwendungen. ====FreeGLUT==== FreeGLUT ist eine Weiterentwicklung der ursprünglichen GLUT-Bibliothek. Es bietet ähnliche Funktionen wie GLUT, aber mit einigen Verbesserungen und Erweiterungen. FreeGLUT wurde entwickelt, um die Einschränkungen von GLUT zu überwinden und zusätzliche Funktionen wie Vollbildmodus, Mehrfensteranwendungen und erweiterte Tastatur- und Mausereignisse bereitzustellen. FreeGLUT ist eine beliebte Wahl für die Entwicklung von OpenGL-Anwendungen, die auf verschiedenen Betriebssystemen lauffähig sein sollen. * gl: This is the base header file for OpenGL version 1.1. That means if you want to use any functionality beyond version 1.1, you have to add any extension library on this. * glew: OpenGL Extension Wrangler Library. This is a cross-platform library for loading OpenGL extended functionality. When you initialize this library, it will check your platform and graphic card at run-time to know what functionality can be used in your program. * glad: The OpenGL Loader library. Provides access to all modern GL entrypoints. It supports Windows, MacOS X, Linux, and FreeBSD and is updated more frequently than glew. * glu: This is OpenGL utilities library, which has been not updated for long time. Don't need to use this header file. * glut: OpenGL Utility Toolkit for Windowing API. This is good for small to medium size OpenGL program. If you need more sophisticated windowing libraries, use native window system toolkits like GTK or Qt for linux machines. * glfw: OpenGL Frame Work. Another multi-platform library for creating windows and handling events. FreeGlut can be used as an alternative. glfw is designed for game development. * glm: OpenGL Mathematics. It helps implementing vectors and matrices operations. =====Transformation matritzen===== {{https://antongerdelan.net/opengl/images/newtranspipe.png}} =====Example Downloads===== * Render to texture {{rendertexture.rar}} * Mouse picking {{picking.zip}} =====Links===== * https://www3.ntu.edu.sg/home/ehchua/programming/opengl/cg_introduction.html * http://cs.lmu.edu/~ray/notes/openglexamples/ * Collission Detection http://www.metanetsoftware.com/technique/tutorialA.html * Assimp ObjLoader https://nickthecoder.wordpress.com/2013/01/20/mesh-loading-with-assimp/ * [[https://antongerdelan.net/opengl/raycasting.html|Mouse picking w Raycasting]] * Coordinate systems [[https://learnopengl.com/Getting-started/Coordinate-Systems|learnopengl.com]] * Mouse picking [[https://community.khronos.org/t/want-to-be-taught-to-mouse-pick-with-raycasting-step-by-step-c-freeglut-opengl/74813|Khronos]] [[http://www.lighthouse3d.com/tutorials/opengl-selection-tutorial|Lighthouse3D]] * Framebuffer objects [[http://www.lighthouse3d.com/tutorials/opengl_framebuffer_objects/|Lighthouse3D]] * https://community.khronos.org/t/opengl-glut-draw-spheres-where-mouse-pointer-is-clicked/75697