If I can visualize it, I can understand it.
- Develop a 3D interactive graphics rendering engine which can also be used as game engine.
- A C++ and OpenGL/Shader programming playground (in linux)
- Get creative with visual effects and particle effects using shader programming.
- To practice Shader programming in OpenGL/OpenCL, to understand GPU programming and architecture.
- Hope to increase mathematical concepts understanding with shader programming.
- Learn parallel computaiton with GPU architecture.
- Learn to implement algorithms in GPU to leverage its architecture.
- The red book of OpenGL. Here is the online version of this book. Is also available here.
- Another, very much similar to above mentioned book with a comprehensive tutorial and reference on OpenGL, shaders and mathematical foundation for the same - OpenGL Superbible.
- Photorealistic computer graphics is ubiquitous today, with applications that include entertainment—notably, movies and video games; product design; and architecture. Donald Knuth wrote “This book has deservedly won an Academy Award. I believe it should also be nominated for a Pulitzer Prize.” Read about the book Physically Based Rendering, which will link you to the contents of the book to Physically Based Rendering:Contents. And more fun - here is the source code used by the book.
- Real Time Rendering is a legend which focuses on modern techniques used to generate synthetic three-dimensional images in a fraction of a second. With the advent of programmable shaders, a wide variety of new algorithms have arisen and evolved over the past few years. This edition discusses current, practical rendering methods used in games and other applications. It also presents a solid theoretical framework and relevant mathematics for the field of interactive computer graphics, all in an approachable style.
- They also list a helluva lot of graphics books resources except their own book on their website.
- And here is their blog.
- TU Wien Rendering / Ray Tracing Course.
- Cem Yuksel's Introduction to Computer Graphics.
- A very helpful and all in one C++ Game Engine Series to get started with, by TheCherno. Here is it's github link.
- A set of related course on Khanacademy; Pixar in a box.
- UC Davis MOOC on Computer Graphics.
- A course on photorealistic rendering, ray tracing and global illumination at the TU Wien. The entire course is now available here on YouTube as a playlist at Two minutes paper youtube channel. This channel publishes videos on papers from field of visual computing (AI, computer graphics, etc.).
- A bulk of Computer Graphics resources from SigGraph - Advances in Real-Time Rendering in 3D Graphics and Games. Additionally,
- SIGGRAPH University has a youtube playlist which features recorded versions of popular Courses from the annual SIGGRAPH Conference.
- About Physics based animation from ACMSIGGRAPH- Physics based animation part 1 and Physics based animation part 2.
- Great online resource for Computer Graphics techniques &/on GPU programming from NVIDIA - GPU Gems Series.
- Get started with Ogre3D tutorials. This will help you understand 3D Graphics programming as well as help you shine your C++ skills.
- You can also get started with the Graphics Programming Projects which uses G3D as the source code to get started with.
- You can surf the projects listed in the library.
- Here is an example project - Cubes.
- To see in which order the projects should be completed see these dependencies description. Looks like there are no strict dependencies.
- You can surf the projects listed in the library.
- Guide as learning Path for a Game Engine Programmer.
- Great Start for learning OpenGL @LearnOpenGL.COM..
- Here is the github link associated with this tutorial.
- Glitter is a dead simple boilerplate for OpenGL, intended as a starting point for the tutorials on learnopengl.com and open.gl.
- See its sample usage on how to use Glitter.
- A book of Shaders, Learn Shading Language. It has a whole content from shading, 3D Graphics, simulation etc.
- OpenGL introduction - youtube playlist from TheCherno Project.
- Another place to learn openGL.
- OpenGL learning resources form OGLDEV
- OpenGL learning playlist from Mike Shah
- Yet yet another place to learn openGL.
- OpenGL Khronos Group man page and other beautiful related references.
- OpenGL and Computer Graphics Resources
- Learn Computer Graphics using WebGL : This interactive textbook will teach you how to create interactive 3D computer graphics content that can be viewed and manipulated in a web browser. As you learn computer graphic concepts you will apply them using WebGL – a version of OpenGL (Open Graphics Library) that works in most web browsers.
- Nice conceptual articles on computer graphics in codinglabs website.
- Computer Graphics Tutorial from tutorialspoint gives you hands on experience with basic and advanced concepts and their implementation.
- AdaptiveCpp : Implementation of SYCL and C++ standard parallelism for CPUs and GPUs from all vendors: The independent, community-driven compiler for C++-based heterogeneous programming models.
- Hands On OpenCL : An open source two-day lecture course for teaching and learning OpenCL. Here is the github link.
- OpenCL technical overview.
- Resources for parallel and GPU computing with OpenCL. - OpenCL learning resources and much more from Khronos Group. - OpenCL user guide.
- Learn about Compute Shaders : how they work and why to use them. - Here is wiki from Khronos group about compute shaders.
- OpenCL tutorials - David Gohara.
- The C++ for OpenCL Programming Language.
- What is GPU computing.
- Introducing GPUOpen :
- an AMD initiative designed to enable developers to create ground-breaking PC games, computer generated imagery and GPU computing applications for great performance and lifelike experiences using no cost and open development tools and software.
- GPUOpen-Tools (git repository) is a comprehensive collection of visual effects, productivity tools, and other content at no cost from GPUOpen initiative from AMD.
- CodeXL is one such tool from GPUOpen initative. It enables developers to harness the benefits of GPUs and APUs. Combine C/C++ debugging with comprehensive GPU debugging of OpenCL & OpenGL API calls. Peek into compute and graphic memory objects, monitor their contents, and detect memory leaks and code paths that caused it.
- Efficient shader tricks.
- Shader tricks from ATI & power of maths etc..
- Avoiding shader conditionals
- GLSL optimizations.
- This is common with books on mathematics for visual computing, see this section here.
- Íñigo Quílez uses mathematics and shaders to create beautiful computer graphics like this. Visit his articles page for tutorials on the techniques he developed for his computer graphics experiments, demos, shadertoys and movies. For video tutorials, code and other useful resources visit his productions.
- He is one of the most profilic writers on the subject signed distance function. The same concept also blogged here and here.
- A nice blog post on ray marching with simple sphere example to explain the concept.
- Beautiful piece of literature on procedeural modellling with signed distance functions.
-
Links and resources:
- OpenGL Software Development Kit Documentation, Sample Code, Libraries, and Tools for creating OpenGL-based Applications.
- Here you'll find some of the most valuable resources available to OpenGL developers, all in one place. Use the menu above to navigate to each contribution. Revisit often, as there will be new contributions coming online all the time!
- OpenGL Software Development Kit Documentation, Sample Code, Libraries, and Tools for creating OpenGL-based Applications.
-
Specific Libraries :
- Raylib is a simple and easy-to-use library to enjoy game programming. Get to know more about it.
- The G3D Innovation Engine is a commercial-grade C++ 3D engine available as Open Source. Its design emphasizes rapid prototyping and innovation, particularly of rendering and game algorithms. G3D provides a set of routines and structures so common that they are needed in almost every graphics program. Get to know more about it here.
- Dear ImGui is a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline enabled application. It is fast, portable, renderer agnostic and self-contained (no external dependencies).
- spdlog is very fast, header only, C++ logging library.
- Open Asset Import Library (assimp) : A library to import and export various 3d-model-formats including scene-post-processing to generate missing render data.
- GLAD is a C++ (multi-Language) GL/GLES/EGL/GLX/WGL Loader-Generator based on the official specs. Here is the online GLAD generator.
- GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events.
- OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specifications. Here is its github repository.
Getting started on developing graphical application with Raylib (has very good C++ bindings) as base library:
- Raylib is a simple and easy-to-use library to enjoy game programming.
- raylib is a programming library to enjoy games programming; no fancy interface, no visual helpers, no auto-debugging... just coding in the most pure spartan-programmers way. It's specially well suited for prototyping and tooling graphical applications, game engines, games etc.
- It is a very modular library, defined by a small number of specific and self-contained modules. Every module is organized by its main functionality (avoiding hundreds of modules depending on other modules, like other C libraries).
- See about its architecture here.
- Repeating... Its NOT a game engine, BUT, you can use it as a base library to prototyping and tooling graphical applications/tools or game engine or games on top of it.
- It is writtent in C but has a very nice C++ bindings. So you can start development in C++.
- See its examples. Some interesting examples:
- Raylib wiki. For example tutorial on getting started on linux:
- You could also later integrate it with libraries like OpenCV for image processing and computer vision or Dlib or any other libraries for any functionalities you would require in future.
Description : The G3D Innovation Engine is a commercial-grade C++ 3D engine available as Open Source. Its design emphasizes rapid prototyping and innovation, particularly of rendering and game algorithms. G3D provides a set of routines and structures so common that they are needed in almost every graphics program. G3D is a carefully designed, feature-rich base on which to prototype your 3D application. It includes contributions from professional game developers, CAD and DCC developers, students, industry researchers, and professors. Any 3D graphical application imaginable is possible with The G3D.
- Here is a nice overview of G3D. Here are the features of G3D. Some external overview resource.
- Source code is available via svn repositories. A minimal download is also available with just the engine and without sample game assets.
- Here you will find description on contents of this library.
- G3D is well documented with :
- API documentation.
- Here is an overview of API concepts, which also has got nice paragraph on saying how to get started with a sample starter project. See this section and this section on getting started with sample project.
- Installation instructions for Linux.
- You can also get started with the Graphics Programming Projects which uses G3D as the source code to get started with.
- You can surf the projects listed in the library.
- Here is an example project - Cubes.
- To see in which order the projects should be completed see these dependencies description. Looks like there are no strict dependencies.
- You can surf the projects listed in the library.
-
Setup OpenGL environment on Linux:
- Follow the instructions documented here for setting up OpenGL environment on Linux.
-
Setup an OpenGL application Software Development Kit (SDK) on Linux:
- Follow the instruction documented here to compile, build and use the libraries mentioned in learnopengl.com to develop OpenGL application SDK framework in Linux.
-
How to build this OpenGL application :
- It should be already noted that we use
cmake
andmake
to compile and build our application. Following easy to follow steps guide the same:- Create a
build
folder in root directory of our project :mkdir build
- Enter this
build
folder :cd build
- Run
cmake
pointing the correct CMakeLists.txt file in root directory of our project to compile it :cmake ..
- Run
make
to build our project :make
- You will get the executables built in this
build
folder.
- Create a
- You can also use Glitter to get started with OpenGL, it is is a dead simple boilerplate for OpenGL, intended as a starting point for the tutorials on learnopengl.com and open.gl. See its sample usage on how to use Glitter.
- Alternatively, you could use GFX - a minimalist and easy to use graphics API.
- Learn building rendering engine : related project
- Learn building physics engine : related project and this as well
- Learn building math engine
- Learn building AI for your game : related project
- Build a simple game with it
- Implement catlikecoding tutorials by using only shaders in the basic OpenGL framework you built here. If it is possible to do this just using shaders, why don't you give it a try as well.
- Basically use the environment created in this project to work on this project.
- Do all of this OpenGL project to display graphics in Android (mobile) platform using Android Studio.