[PDF] Learn OpenGL Graphics Programming





Previous PDF Next PDF



Learn OpenGL Graphics Programming

Therefore a decent knowledge of the C++ programming language is required for these learnopengl.com/demo/autotools_tutorial.txt: an autotools tutorial by.



OpenGL® Programming Guide: The Official Guide to Learning

(GLSL)) a special language very similar to C++ for constructing OpenGL shaders. GLSL is used for all shaders in OpenGL



Introduction à OpenGL et GLUT

Le rendu des primitives dépend de nombreuses variables d'état (matrice de transformation couleur



offline learnopengl.pdf

Since OpenGL is a graphics API and not a platform of its own As you might recall from the OpenGL tutorial



Computer Graphics Programming in OpenGL with C++ Second

Paul Baker's bump-mapping tutorial Using OpenGL with C++ requires configuring several libraries. ... org/registry/OpenGL/specs/gl/glspec44.core.pdf.



Beginners Tutorials

7 juin 2017 Shaders are programmed in a language called GLSL : GL Shader Language which is part of OpenGL. Unlike C or Java



Initiation à OpenGL

L'infographie consiste par calcul



OpenGL Tutorial

28 févr. 2013 OpenGL Tutorial Release 1.0. Source code1. The guide is available in the following formats: PDF2. ePub3 for ebook readers.



The OpenGL R Graphics System: A Specification (Version 4.5 (Core

1 mai 2022 available at www.khronos.org/files/member agreement.pdf. Khronos grants a con- ... Languages such as C++ and Javascript which allow passing.



Programmation C/C++ et OpenGL

28 oct. 2020 2 Introduction rapide au C/C++ & Visual Studio. 5. 2.1 Le saviez-vous? ... Introduction à l'architecture OpenGL [KSS16] : les données et les.



[PDF] [PDF] Learn OpenGL Graphics Programming

Since OpenGL is a graphics API and not a platform of its own it requires a language to operate create an additional C++ file with the following code:



[PDF] OpenGL® Programming Guide - UT Computer Science

''If you are looking for the definitive guide to programming with the very latest version of OpenGL look no further The authors of this book have been deeply 



[PDF] Computer Graphics Programming in OpenGL with C++

All of the C++/OpenGL programs and related utility class files and GLSL shader code presented in the book • The models and texture files used in the 



[PDF] Initiation à OpenGL - CNU 27 Marseille

OpenGL est une librairie graphique 3D disponible sur de nombreuses plateformes désignation de la fonction d'affichage (1) dans la fenêtre courante



[PDF] Introduction à OpenGL et GLUT

“le “bleu” : OpenGL Reference Manual An interactive introduction to OpenGL programming Cours Tutorial Transformation de Nate Robins 



[PDF] OpenGL Programming Guide - FEI

The format for transmitting OpenGL commands (called the protocol) from the client to implementation in C++ or Ada for example wouldn't need to



[PDF] 14 Introduction to C++ and OpenGL

C++ relies on the #include prepro- cessor directive which treats all of the text in the included header file as though it were part of the including source 



[PDF] Introduction à OpenGL

1 OGL : Open Graphic Language 2 références 3 Pipeline OpenGL •Tutorial et exemples OpenGL Reference Manual 3rd edition ISBN 0-201-65675-1



[PDF] Beginners Tutorials

7 jui 2017 · You will see a Tutorials sln file : open it with Visual Studio Example for tutorial 2 : ~/opengl-tutorial/tutorial02_red_triangle/



Computer graphics programming in OpenGL with C++ [2 

By purchasing or using this book and its companion files (the “Work”) 1 1 Languages and Libraries 1 1 1 C++ 1 1 2 OpenGL / GLSL 1 1 3 Window Management 

  • Can you use C++ in OpenGL?

    Since OpenGL is a graphics API and not a platform of its own, it requires a language to operate in and the language of choice is C++ .
  • How much C++ is required for OpenGL?

    You don't need to be a master in C++ to start learning OpenGL. As a matter of fact, you don't even need to know C++. If you know a decent amount of C, you should be fine to start working with OpenGL. OpenGL is not a programming language, it is an API.
  • Is OpenGL for C or C++?

    The OpenGL libraries are written in C and allows for many derivations in other languages, but in its core it remains a C-library.
  • So let's get started

    1Install and Setup MSYS. Head over to this link https://www.msys2.org/ and download the mysy2 installer. 2Open MSYS2. 3Install Pacman in the MSYS2. 4Install MinGW package via CLI. 5Install Freeglut. 6Install Glew. 7Download Code Blocks. 8Set up the compiler in Code Blocks.
The online version of this text lives atlearnopengl.com.

Copyright

c

2020 by Joey de Vries

ALL RIGHTS RESERVEDThe layout and styling of this book is based on the public "Legrand Orange Book" LaTeX template

by Vel.First printing, June 2020

ISBN: 978-90-90-33256-7

Contents

1Introduction.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 IGetting started

2OpenGL.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3Creating a window.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4Hello Window.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5Hello Triangle.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

6Shaders.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

7Textures.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

8Transformations.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

9Coordinate Systems.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

10Camera.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

11Review.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 IILighting

12Colors.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

13Basic Lighting.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

14Materials.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

15Lighting Maps.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

16Light Casters.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

17Multiple lights.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

18Review.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 IIIModel Loading

19Assimp.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

20Mesh.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

21Model.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

IVAdvanced OpenGL

22Depth Testing.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

23Stencil testing.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

24Blending.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

25Face culling.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

26Framebuffers.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

27Cubemaps.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

28Advanced Data.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

29Advanced GLSL.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

30Geometry Shader.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

31Instancing.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

32Anti Aliasing.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 VAdvanced Lighting

33Advanced Lighting.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

34Gamma Correction.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

35Shadow Mapping.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

36Point Shadows.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

37Normal Mapping.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

38Parallax Mapping.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

39HDR.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

40Bloom.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

41Deferred Shading.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

42SSAO.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 VIPBR

43Theory.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

44Lighting.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

45Diffuse irradiance.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

46Specular IBL.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

5

VIIIn Practice

47Debugging.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436

48Text Rendering.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 VIII2D Game

49Breakout.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

50Setting up.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

51Rendering Sprites.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

52Levels.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

53Ball.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476

54Collision detection.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479

55Collision resolution.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

56Particles.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491

57Postprocessing.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497

58Powerups.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502

59Audio.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

60Render text.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511

61Final thoughts.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

Index.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 First of all, a warm thank you for purchasing this book. The content of this book originally started out as digital letters on the online platform at learnopengl.com. LearnOpenGL quickly evolved from a series of tutorials, to a full online book with years of continuous feedback and improvements that are now finally aggregated into the physical copy you hold in your hands. The online version at learnopengl.com is free, and will always be free, and for the most up to

date content and questions from readers it is still advised to search up articles on the online platform.

However, a physical copy makes it easy to read during travel, write notes, and we should never forget

that certain charm of printed paper. And not to forget, purchasing a physical copy helps support me as an author for which I again thank you from the bottom of my heart. The book is structured similarly to the online platform, with a few minor differences to account for the book being offline. Think of a large reduction of hyperlinks, hyperlinks being fully written out, videos now showing static images, and the lack of function hover pop-ups. The content has however been thoroughly revised, and reviewed multiple times, to ensure the book is a first-class citizen that"s up to the professional standards you"d expect. If you"d like to start your journey into graphics programming you"ve got a great path ahead of you. This book will teach you, step by step, the foundation and skills of becoming a graphics programmer. You"ll learn 3D fundamentals, basic and advanced lighting, model loading, blending, post-processing, shadows, debugging, PBR, and so much more; and we"ll even walk you through

the process of creating a full 2D game. If you"re as excited as I amx I will now stop talking and see

you in the first chapter. // Joey

1. IntroductionSince you came here you probably want to learn the inner workings of computer graphics and do all

the stuff the cool kids do by yourself. Doing things by yourself is extremely fun and resourceful and

gives you a great understanding of graphics programming. However, there are a few items that need to be taken into consideration before starting your journey. 1.1

Pr erequisites

Since OpenGL is a graphics API and not a platform of its own, it requires a language to operate in and the language of choice isC++. Therefore a decent knowledge of theC++programming language is required for these tutorials. However, I will try to explain most of the concepts used, including advancedC++topics where required so it is not required to be an expert inC++, but you should be able to write more than just a"Hello World"program. If you don"t have much experience withC++I can recommend the free tutorials atwww.learncpp.com. Also, we will be using some math (linear algebra, geometry, and trigonometry) along the way and I will try to explain all the required concepts of the math required. However, I"m not a mathematician by heart so even though my explanations may be easy to understand, they will most likely be incomplete. So where necessary I will provide pointers to good resources that explain the material in a more complete fashion. Don"t be scared about the mathematical knowledge required before starting your journey into OpenGL; almost all the concepts can be understood with a basic mathematical background and I will try to keep the mathematics to a minimum where possible. Most of the functionality doesn"t even require you to understand all the math as long as you know how to use it. 1.2

Str ucture

LearnOpenGL is broken down into a number of general sections. Each section contains several chapters that each explain different concepts in large detail. The subjects are taught in a linear

fashion (so it is advised to start from start to finish, unless otherwise instructed) where each chapter

explains the background theory and the practical aspects. To make the concepts easier to follow, and give them some added structure, the book contains boxes,code blocks, andcolor hints. 1.2.1

Bo xesGreen

boxes encompasses some notes or useful features/hints about OpenGL or the

subject at hand.Redboxes will contain warnings or other features you have to be extra careful with.1.2.2Code

You will find plenty of small pieces of code in the book that are located in dark-gray boxes with syntax-highlighted code as you can see below://This box contains code Since these provide only snippets of code, wherever necessary you"ll find a path to the full source code of the chapter demo(s). The source code paths are relative to the root of the LearnOpenGL repository on GitHub which you can find at:github.com/JoeyDeVries/learnopengl. The repository contains full source code samples for every chapter. It"s recommended to download

8Chapter 1. Introductionthe repository and review the full source code samples at the end of each chapter to see how

everything fits together as a whole. 1.2.3

Color hints

Some words are displayed with a different color to make it extra clear these words portray a special meaning:

Definition

: green words specify a definition i.e. an important aspect/name of something you"re likely to hear more often. Program structure: red words specify function names or class names. Variables: blue words specify variables including all OpenGL constants. Now that you got a bit of a feel of the structure of the book, hop over to the Getting Started section to start your journey in OpenGL! I

2OpenGL.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3Creating a window.. . . . . . . . . . . . . . . . . . . . 12

4Hello Window.. . . . . . . . . . . . . . . . . . . . . . . . . 18

5Hello Triangle.. . . . . . . . . . . . . . . . . . . . . . . . . 24

6Shaders.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

7Textures.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

8Transformations.. . . . . . . . . . . . . . . . . . . . . . . 65

9Coordinate Systems.. . . . . . . . . . . . . . . . . . . 80

10Camera.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

11Review.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Getting started

2. OpenGLBefore starting our journey we should first define what OpenGL actually is. OpenGL is mainly

considered an API (an

Application Programming Interf ace

) that provides us with a large set of functions that we can use to manipulate graphics and images. However, OpenGL by itself is not an API, but merely a specification, developed and maintained by thewww.khronos.org/. The OpenGL specification specifies exactly what the result/output of each function should be and how it should perform. It is then up to the developersimplementingthis specification to come up with a solution of how this function should operate. Since the OpenGL specification does not give us implementation details, the actual developed versions of OpenGL are allowed to have different

implementations, as long as their results comply with the specification (and are thus the same to the

user). The people developing the actual OpenGL libraries are usually the graphics card manufacturers. Each graphics card that you buy supports specific versions of OpenGL which are the versions of OpenGL developed specifically for that card (series). When using an Apple system the OpenGL library is maintained by Apple themselves and under Linux there exists a combination of graphic suppliers" versions and hobbyists" adaptations of these libraries. This also means that whenever OpenGL is showing weird behavior that it shouldn"t, this is most likely the fault of the graphics cards manufacturers (or whoever developed/maintained the library). Since most implementations are built by graphics card manufacturers. Whenever there is a bug in the implementation this is usually solved by updating your video card drivers; those drivers include the newest versions of OpenGL that your card supports. This is one of the reasons why it"s always advised to occasionally update your graphic drivers. Khronos publicly hosts all specification documents for all the OpenGL versions. The interested reader can find the OpenGL specification1of version 3.3 (which is what we"ll be using), which is a good read if you want to delve into the details of OpenGL (note how they mostly just describe results and not implementations). The specifications also provide a great reference for finding the exactworkings of its functions. 2.1

Cor e-profilevs Immedia temode

In the old days, using OpenGL meant developing in

immediate m ode (often referred to as the fixed function pipeline ) which was an easy-to-use method for drawing graphics. Most of the functionality of OpenGL was hidden inside the library and developers did not have much control over how OpenGL does its calculations. Developers eventually got hungry for more flexibility and over time the specifications became more flexible as a result; developers gained more control over their graphics. The immediate mode is really easy to use and understand, but it is also extremely

inefficient. For that reason the specification started to deprecate immediate mode functionality from

version 3.2 onwards and started motivating developers to develop in OpenGL"s core-profile mode, which is a division of OpenGL"s specification that removed all old deprecated functionality. When using OpenGL"s core-profile, OpenGL forces us to use modern practices. Whenever we try to use one of OpenGL"s deprecated functions, OpenGL raises an error and stops drawing. The1

2.2 Extensions 11advantage of learning the modern approach is that it is very flexible and efficient. However, it"s

also more difficult to learn. The immediate mode abstracted quite a lot from theactualoperations OpenGL performed and while it was easy to learn, it was hard to grasp how OpenGL actually operates. The modern approach requires the developer to truly understand OpenGL and graphics

programming and while it is a bit difficult, it allows for much more flexibility, more efficiency and

most importantly: a much better understanding of graphics programming. This is also the reason why this book is geared at core-profile OpenGL version 3.3. Although it is more difficult, it is greatly worth the effort. As of today, higher versions of OpenGL are available to choose from (at the time of writing

4.6) at which you may ask: why do I want to learn OpenGL 3.3 when OpenGL 4.6 is out? The

answer to that question is relatively simple. All future versions of OpenGL starting from 3.3 add extra useful features to OpenGL without changing OpenGL"s core mechanics; the newer versions

just introduce slightly more efficient or more useful ways to accomplish the same tasks. The result is

that all concepts and techniques remain the same over the modern OpenGL versions so it is perfectly valid to learn OpenGL 3.3. Whenever you"re ready and/or more experienced you can easily use specific functionality from more recent OpenGL versions. When using functionality from the most recent version of OpenGL, only the most modern graphics cards will be able to run your application. This is often why most develop- ers generally target lower versions of OpenGL and optionally enable higher version functionality.In some chapters you"ll find more modern features which are noted down as such. 2.2

Extensions

A great feature of OpenGL is its support of extensions. Whenever a graphics company comes up with a new technique or a new large optimization for rendering this is often found in an e xtension implemented in the drivers. If the hardware an application runs on supports such an extension the developer can use the functionality provided by the extension for more advanced or efficient graphics. This way, a graphics developer can still use these new rendering techniques without having to wait for OpenGL to include the functionality in its future versions, simply by checking if the extension is supported by the graphics card. Often, when an extension is popular or very useful it eventually becomes part of future OpenGL versions. The developer has to query whether any of these extensions are available before using them (or use an OpenGL extension library). This allows the developer to do things better or more efficient, based on whether an extension is available:if(GL_ARB_extension_name) Do cool new and modern stuff supported by hardware else

Extension

not supported do it the old way With OpenGL version 3.3 we rarely need an extension for most techniques, but wherever it is necessary proper instructions are provided.

12Chapter 2. OpenGL2.3Sta temachine OpenGL is by itself a large state machine: a collection of variables that define how OpenGL should

currently operate. The state of OpenGL is commonly referred to as the OpenGL conte xt . When using OpenGL, we often change its state by setting some options, manipulating some buffers and then render using the current context. Whenever we tell OpenGL that we now want to draw lines instead of triangles for example, we change the state of OpenGL by changing some context variable that sets how OpenGL should draw. As soon as we change the context by telling OpenGL it should draw lines, the next drawing commands will now draw lines instead of triangles. When working in OpenGL we will come across several state-changing functions that change the context and several state-using functions that perform some operations based on the current state of OpenGL. As long as you keep in mind that OpenGL is basically one large state machine, most of its functionality will make more sense. 2.4

Objects

The OpenGL libraries are written in C and allows for many derivations in other languages, but in its

core it remains a C-library. Since many of C"s language-constructs do not translate that well to other

higher-level languages, OpenGL was developed with several abstractions in mind. One of those abstractions are objects in OpenGL. An object in OpenGL is a collection of options that represents a subset of OpenGL "sstate. F or example, we could have an object that represents the settings of the drawing window; we could then

set its size, how many colors it supports and so on. One could visualize an object as a C-like struct:structobject_name {

float option1; int option2; char [] name; Whenever we want to use objects it generally looks something like this (with OpenGL"s context visualized as a large struct)://The State of OpenGL struct

OpenGL_Context {

object_name *object_Window_Target;... create object unsigned int objectId = 0; glGenObject(1, &objectId); bind assign object to context glBindObject(GL_WINDOW_TARGET, objectId); set options of object currently bound to

GL_WINDOW_TARGET

glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800); glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600); set context target back to default glBindObject(GL_WINDOW_TARGET, 0); This little piece of code is a workflow you"ll frequently see when working with OpenGL. We

first create an object and store a reference to it as an id (the real object"s data is stored behind the

2.5 Let"s get started 13scenes). Then we bind the object (using its id) to the target location of the context (the location of

the example window object target is defined asGL_WINDOW_TARGET). Next we set the window options and finally we un-bind the object by setting the current object id of the window target to0. The options we set are stored in the object referenced byobjectIdand restored as soon as we bind the object back toGL_WINDOW_TARGET. The code samples provided so far are only approximations of how OpenGL operates; throughout the book you will come across enough actual examples. The great thing about using these objects is that we can define more than one object in our application, set their options and whenever we start an operation that uses OpenGL"s state, we bind

the object with our preferred settings. There are objects for example that act as container objects for

3D model data (a house or a character) and whenever we want to draw one of them, we bind the

object containing the model data that we want to draw (we first created and set options for these objects). Having several objects allows us to specify many models and whenever we want to draw a specific model, we simply bind the corresponding object before drawing without setting all their options again. 2.5

Let" sget star ted

You now learned a bit about OpenGL as a specification and a library, how OpenGL approximately operates under the hood and a few custom tricks that OpenGL uses. Don"t worry if you didn"t get all of it; throughout the book we"ll walk through each step and you"ll see enough examples to really get a grasp of OpenGL. 2.6

Additional r esources

www.opengl.org/: official website of OpenGL. www.opengl.org/registry/ : hosts the OpenGL specifications and extensions for all

OpenGL versions.

3. Creating a windowThe first thing we need to do before we start creating stunning graphics is to create an OpenGL

context and an application window to draw in. However, those operations are specific per operating system and OpenGL purposefully tries to abstract itself from these operations. This means we have to create a window, define a context, and handle user input all by ourselves. Luckily, there are quite a few libraries out there that provide the functionality we seek, some specifically aimed at OpenGL. Those libraries save us all the operation-system specific work and give us a window and an OpenGL context to render in. Some of the more popular libraries are GLUT, SDL, SFML and GLFW. On LearnOpenGL we will be usingGLFW. Feel free to use any of the other libraries, the setup for most is similar to GLFW"s setup. 3.1 GLFW GLFW is a library, written in C, specifically targeted at OpenGL. GLFW gives us the bare necessities

required for rendering goodies to the screen. It allows us to create an OpenGL context, define window

parameters, and handle user input, which is plenty enough for our purposes. The focus of this and the next chapter is to get GLFW up and running, making sure it properly creates an OpenGL context and that it displays a simple window for us to mess around in. This chapter takes a step-by-step approach in retrieving, building and linking the GLFW library. We"ll use Microsoft Visual Studio 2019 IDE as of this writing (note that the process is the same on the more recent visual studio versions). If you"re not using Visual Studio (or an older version) don"t worry, the process will be similar on most other IDEs. 3.2

Building GLFW

GLFW can be obtained from their webpage atwww.glfw.org/download.html. GLFW already has pre-compiled binaries and header files for Visual Studio 2012 up to 2019, but for completeness" sake we will compile GLFW ourselves from the source code. This is to give you a feel for the process of compiling open-source libraries yourself as not every library will have pre-compiled binaries available. So let"s download theSource package. We"ll be building all libraries as 64-bit binaries so make sure to get the 64-bit binaries if you"re using their pre-compiled binaries. Once you"ve downloaded the source package, extract it and open its content. We are only interested in a few items:

The resulting library from compilation.

Theincludefolder.

Compiling the library from the source code guarantees that the resulting library is perfectly tailored for your CPU/OS, a luxury pre-compiled binaries don"t always provide (sometimes, pre- compiled binaries are not available for your system). The problem with providing source code to the open world however is that not everyone uses the same IDE or build system for developing their application, which means the project/solution files provided may not be compatible with other people"s setup. So people then have to setup their own project/solution with the given .c/.cpp and .h/.hpp files, which is cumbersome. Exactly for those reasons there is a tool called CMake. 3.2.1

CMak e

CMake is a tool that can generate project/solution files of the user"s choice (e.g. Visual Studio, Code::Blocks, Eclipse) from a collection of source code files using pre-defined CMake scripts. This allows us to generate a Visual Studio 2019 project file from GLFW"s source package which we can

3.2 Building GLFW 15use to compile the library. First we need to download and install CMake which can be downloaded

from their download page1. Once CMake is installed you can choose to run CMake from the command line or through their GUI. Since we"re not trying to overcomplicate things we"re going to use the GUI. CMake requires aquotesdbs_dbs44.pdfusesText_44
[PDF] repérage pavé droit exercices

[PDF] reperage espace 4eme

[PDF] oxydoréduction cuivre zinc

[PDF] motion blur photoshop traduction

[PDF] oxydoréduction pile

[PDF] la république expliquée ? ma fille extrait

[PDF] la république expliquée ? ma fille pdf

[PDF] la chose dans la clarté lunaire analyse

[PDF] autoportrait michel leiris

[PDF] les apports du judaïsme du christianisme et de l'islam ? la pensée occidentale

[PDF] gorgias platon résumé

[PDF] gorgias platon pdf

[PDF] animaux fables symbole

[PDF] quel est l'animal le plus souvent cité dans les fables de jean de la fontaine

[PDF] quel est l'animal le plus cité dans les fables