{"id":12480,"date":"2021-08-20T08:55:38","date_gmt":"2021-08-20T08:55:38","guid":{"rendered":"http:\/\/blog.bachi.net\/?p=12480"},"modified":"2022-11-22T10:08:53","modified_gmt":"2022-11-22T10:08:53","slug":"raytrace-raytracing","status":"publish","type":"post","link":"https:\/\/blog.bachi.net\/?p=12480","title":{"rendered":"Vulkan: Raytrace \/ Raytracing"},"content":{"rendered":"<h3>Peter Shirley<\/h3>\n<p><a href=\"https:\/\/raytracing.github.io\/\">raytracing.github.io\/<\/a><br \/>\n<a href=\"https:\/\/github.com\/RayTracing\/raytracing.github.io\">github.com\/RayTracing\/raytracing.github.io<\/a><br \/>\n<a href=\"https:\/\/raytracing.github.io\/books\/RayTracingInOneWeekend.html\">Ray Tracing in One Weekend<\/a><br \/>\n<a href=\"https:\/\/raytracing.github.io\/books\/RayTracingTheNextWeek.html\">Ray Tracing: The Next Week<\/a><br \/>\n<a href=\"https:\/\/raytracing.github.io\/books\/RayTracingTheRestOfYourLife.html\">Ray Tracing: The Rest of Your Life<\/a><\/p>\n<ul>\n<li>eye \/ camera<\/li>\n<li>image<\/li>\n<li>16:9 aspect ratio<\/li>\n<li>viewport = <code><\/code><\/li>\n<li>viewport&#8217;s aspect ratio == rendered image aspect ratio<\/li>\n<li>viewport: 2 units in height<\/li>\n<li>projection plane<\/li>\n<li>projection point<\/li>\n<li>distance between plane and point: 1 unit = focal length<\/li>\n<\/ul>\n<h4>C++<\/h4>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/1145022\/difference-between-global-operator-and-member-operator\">difference between global operator and member operator<\/a><\/p>\n<h4>Vector<\/h4>\n<p><a href=\"https:\/\/courses.cs.washington.edu\/courses\/csep557\/10au\/lectures\/triangle_intersection.pdf\">Ray-triangle intersection<\/a> (PDF)<br \/>\n<a href=\"https:\/\/cadxfem.org\/inf\/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf\">Fast Minimum Storage Ray-Triangle Intersection<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/31178874\/how-to-get-the-intersection-point-ray-triangle-intersection-c\">How to get the intersection point? Ray Triangle Intersection C++<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=OOqDkG035T0\">WebGL 2.0 : 044 : Ray to Triangle Intersection<\/a><\/p>\n<h4>Depends on<\/h4>\n<p><a href=\"https:\/\/github.com\/nothings\/stb\">github.com\/nothings\/stb<\/a>, stb single-file public domain libraries for C\/C++<br \/>\n<a href=\"https:\/\/casual-effects.com\/markdeep\/\">Markdeep<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>OpenGL Frameworks<\/h1>\n<p><a href=\"https:\/\/www.khronos.org\/opengl\/wiki\/OpenGL_Loading_Library\">OpenGL Loading Library<\/a><br \/>\nAn OpenGL Loading Library is a library that loads pointers to OpenGL functions at runtime, core as well as extensions. This is required to access functions from OpenGL versions above 1.1 on most platforms.<\/p>\n<ul>\n<li>GLEW (OpenGL Extension Wrangler)<\/li>\n<li>GL3W<\/li>\n<li>Galogen<\/li>\n<li>glad (Multi-Language GL\/GLES\/EGL\/GLX\/WGL Loader-Generator)<\/li>\n<li>Glatter<\/li>\n<li>glsdk (Unofficial OpenGL SDK)<\/li>\n<li>glbinding (C++)<\/li>\n<li>libepoxy<\/li>\n<li>GLee<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.glfw.org\/\">GLFW<\/a>, GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop<br \/>\n<a href=\"https:\/\/de.wikipedia.org\/wiki\/OpenGL_Utility_Toolkit\">GLUT (GL Utility Toolkit)<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/25708688\/what-is-the-difference-between-freeglut-vs-glfw\">What is the difference between FreeGLUT vs GLFW?<\/a><\/p>\n<h3>Web<\/h3>\n<p><a href=\"https:\/\/www.w3.org\/TR\/WGSL\/\">WGSL<\/a>, WebGPU Shading Language<\/p>\n<h3>Apple<\/h3>\n<p><a href=\"https:\/\/developer.apple.com\/documentation\/glkit\">GLKit<\/a>,<br \/>\n<a href=\"https:\/\/developer.apple.com\/metal\/\">Metal<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h3>GLUT v3<\/h3>\n<p><a href=\"https:\/\/www.opengl.org\/resources\/libraries\/glut\/spec3\/spec3.html\">The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3<\/a><br \/>\n<a href=\"https:\/\/www.opengl.org\/resources\/libraries\/glut\/spec3\/node45.html\">7 Callback Registration<\/a><\/p>\n<h3>Scratchapixel 2.0<\/h3>\n<p><a href=\"https:\/\/www.scratchapixel.com\/index.php?redirect\">Learn Computer Graphics From Scratch!<\/a><br \/>\n<a href=\"https:\/\/www.scratchapixel.com\/lessons\/3d-basic-rendering\/perspective-and-orthographic-projection-matrix\/\">The Perspective and Orthographic Projection Matrix<\/a><br \/>\n<a href=\"https:\/\/www.scratchapixel.com\/lessons\/3d-basic-rendering\/ray-tracing-rendering-a-triangle\/why-are-triangles-useful\">Ray Tracing: Rendering a Triangle &#8211; Why Are Triangles Useful?<\/a><br \/>\n<a href=\"https:\/\/www.scratchapixel.com\/lessons\/3d-basic-rendering\/ray-tracing-rendering-a-triangle\/ray-triangle-intersection-geometric-solution\">Ray Tracing: Rendering a Triangle &#8211; Ray-Triangle Intersection: Geometric Solution<\/a><br \/>\n<a href=\"https:\/\/www.scratchapixel.com\/lessons\/3d-basic-rendering\/minimal-ray-tracer-rendering-simple-shapes\/ray-sphere-intersection\">A Minimal Ray-Tracer: Rendering Simple Shapes &#8211; Ray-Sphere Intersection<\/a><br \/>\n<a href=\"https:\/\/www.scratchapixel.com\/lessons\/3d-basic-rendering\/rasterization-practical-implementation\">Rasterization: a Practical Implementation<\/a><\/p>\n<ul>\n<li>The Rasterization Algorithm<\/li>\n<li>Optimizing: 2D Triangles Bounding Box<\/li>\n<li>When Two Triangles Overlap the Same Pixel: The Depth Buffer (or Z-Buffer)<\/li>\n<\/ul>\n<table>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/01_Rasterization_Algorithm_figure1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/01_Rasterization_Algorithm_figure1.png\" alt=\"\" width=\"407\" height=\"422\" class=\"alignleft size-full wp-image-12793\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/01_Rasterization_Algorithm_figure1.png 407w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/01_Rasterization_Algorithm_figure1-289x300.png 289w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/02_Rasterization_Algorithm_figure2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/02_Rasterization_Algorithm_figure2.png\" alt=\"\" width=\"407\" height=\"569\" class=\"alignleft size-full wp-image-12794\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/02_Rasterization_Algorithm_figure2.png 407w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/02_Rasterization_Algorithm_figure2-215x300.png 215w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/03_Optimizing_figure3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/03_Optimizing_figure3.png\" alt=\"\" width=\"411\" height=\"390\" class=\"alignleft size-full wp-image-12795\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/03_Optimizing_figure3.png 411w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/03_Optimizing_figure3-300x285.png 300w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/04_Optimizing_figure4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/04_Optimizing_figure4.png\" alt=\"\" width=\"405\" height=\"384\" class=\"alignleft size-full wp-image-12796\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/04_Optimizing_figure4.png 405w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/04_Optimizing_figure4-300x284.png 300w\" sizes=\"auto, (max-width: 405px) 100vw, 405px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/05_depth_buffer_figure5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/05_depth_buffer_figure5.png\" alt=\"\" width=\"410\" height=\"534\" class=\"alignleft size-full wp-image-12797\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/05_depth_buffer_figure5.png 410w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/05_depth_buffer_figure5-230x300.png 230w\" sizes=\"auto, (max-width: 410px) 100vw, 410px\" \/><\/a><\/td>\n<\/tr>\n<\/table>\n<h3>OpenGLBook.com<\/h3>\n<p><a href=\"https:\/\/openglbook.com\/chapter-1-getting-started.html\">Chapter 1: Getting Started<\/a><br \/>\n<a href=\"https:\/\/github.com\/openglbook\/openglbook.com\">github.com\/openglbook\/openglbook.com<\/a><\/p>\n<h3>Nikita Voloboev<\/h3>\n<p><a href=\"https:\/\/wiki.nikitavoloboev.xyz\/computer-graphics\/ray-tracing\">Ray Tracing &#8211; Links<\/a><\/p>\n<h3>Canvas + WebGL<\/h3>\n<p><a href=\"https:\/\/www.mamboleoo.be\/articles\/how-to-render-3d-in-2d-canvas\">How to render 3D in 2D canvas<\/a><\/p>\n<h4>w3school<\/h4>\n<p><a href=\"https:\/\/www.w3schools.com\/html\/html5_canvas.asp\">HTML Canvas Graphics<\/a><br \/>\n<a href=\"https:\/\/www.w3schools.com\/tags\/ref_canvas.asp\">HTML Canvas Reference<\/a><\/p>\n<h4>MDN Web Docs<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/de\/docs\/Web\/API\/WebGL_API\/Tutorial\/Getting_started_with_WebGL\">Einf\u00fchrung in WebGL<\/a><br \/>\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/HTMLCanvasElement\/getContext\">HTMLCanvasElement.getContext()<\/a><br \/>\n<a href=\"https:\/\/developer.mozilla.org\/de\/docs\/Web\/API\/CanvasRenderingContext2D\">CanvasRenderingContext2D<\/a><br \/>\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Canvas_API\/Tutorial\">Canvas tutorial<\/a><\/p>\n<h3>VICTOR KESTEN<\/h3>\n<p><a href=\"https:\/\/kth.diva-portal.org\/smash\/get\/diva2:1106244\/FULLTEXT01.pdf\">Evaluating Different Spatial Anti Aliasing Techniques<\/a><\/p>\n<h3>Anti-Aliasing<\/h3>\n<p><a href=\"https:\/\/www.gamestar.de\/artikel\/kantenglaettung-anti-aliasing-erklaert-guide-wie-funktionieren-msaa-txaa-und-co,3085163.html\">Kantengl\u00e4ttung Anti-Aliasing erkl\u00e4rt &#8211; Guide: Wie funktionieren MSAA, TXAA und Co.?<\/a><br \/>\n<a href=\"https:\/\/www.vssmonitoring.com\/best-anti-aliasing\/\">Best Anti-Aliasing | Different Techniques to Get Clear Images<\/a><br \/>\n<a href=\"https:\/\/thegamingsetup.com\/guides\/what-is-anti-aliasing\">What is Anti-Aliasing: A definitive guide<\/a><br \/>\n<a href=\"https:\/\/www.hardwaretimes.com\/pc-graphics-settings-explained-mlaa-vs-msaa-vs-fxaa-vs-taa-vs-smaa\/\">PC Graphics Settings Explained: MLAA vs MSAA vs FXAA vs TAA vs SMAA<\/a><\/p>\n<h3>RayTracingInVulkan<\/h3>\n<p><a href=\"https:\/\/github.com\/GPSnoopy\/RayTracingInVulkan\">github.com\/GPSnoopy\/RayTracingInVulkan<\/a>, Implementation of Peter Shirley&#8217;s Ray Tracing In One Weekend book using Vulkan and NVIDIA&#8217;s RTX extension.<\/p>\n<h3>nvpro-samples<\/h3>\n<p><a href=\"https:\/\/nvpro-samples.github.io\/vk_mini_path_tracer\/\">nvpro-samples.github.io\/vk_mini_path_tracer\/<\/a><br \/>\n<a href=\"https:\/\/nvpro-samples.github.io\/vk_raytracing_tutorial_KHR\/\">nvpro-samples.github.io\/vk_raytracing_tutorial_KHR\/<\/a><br \/>\n<a href=\"https:\/\/github.com\/nvpro-samples\/vk_denoise\">github.com\/nvpro-samples\/vk_denoise<\/a>, Denoising a Vulkan ray traced image using OptiX denoiser<br \/>\n<a href=\"https:\/\/github.com\/nvpro-samples\/vk_raytrace\">github.com\/nvpro-samples\/vk_raytrace<\/a>, Ray tracing glTF scene with Vulkan<br \/>\n<a href=\"https:\/\/github.com\/nvpro-samples\/vk_raytracing_tutorial_NV\">github.com\/nvpro-samples\/vk_raytracing_tutorial_NV<\/a>, Vulkan ray tracing examples and tutorials using VK_NV_ray_tracing<\/p>\n<h3>Vulkan Tutorial<\/h3>\n<p><a href=\"https:\/\/vulkan-tutorial.com\/\">Vulkan Tutorial<\/a><\/p>\n<h3>PBRVulkan<\/h3>\n<p><a href=\"https:\/\/github.com\/Zielon\/PBRVulkan\/\">github.com\/Zielon\/PBRVulkan\/<\/a><\/p>\n<h3>Quartz<\/h3>\n<p><a href=\"https:\/\/github.com\/Nadrin\/Quartz\/\">github.com\/Nadrin\/Quartz\/<\/a><\/p>\n<h3>FlyCube<\/h3>\n<p><a href=\"https:\/\/github.com\/andrejnau\/FlyCube\">github.com\/andrejnau\/FlyCube<\/a>, Graphics API wrapper is written in C++ on top of Directx 12 and Vulkan. Provides main features including ray tracing.<\/p>\n<h3>Research Unit of Computer Graphics | TU Wien<\/h3>\n<p><a href=\"https:\/\/github.com\/cg-tuwien\/Gears-Vk\">github.com\/cg-tuwien\/Gears-Vk<\/a>, Powerful low-level C++20 rendering framework for Vulkan 1.2, including Real-Time Ray Tracing (RTX) support, built atop Auto-Vk.<br \/>\n<a href=\"https:\/\/github.com\/cg-tuwien\/Auto-Vk\">github.com\/cg-tuwien\/Auto-Vk<\/a>, Low-level convenience and productivity layer atop Vulkan-Hpp<\/p>\n<h1>Window System Integration (WSI)<\/h1>\n<p><a href=\"https:\/\/doc-snapshots.qt.io\/qt6-dev\/topics-graphics.html\">Qt Graphics<\/a><br \/>\n<a href=\"https:\/\/github.com\/KhronosGroup\/Vulkan-Guide\/blob\/master\/chapters\/wsi.md\">github.com\/KhronosGroup\/Vulkan-Guide\/blob\/master\/chapters\/wsi.md<\/a><br \/>\n<a href=\"https:\/\/xdc2019.x.org\/event\/5\/contributions\/313\/attachments\/414\/664\/xdc_2019_wsi_layer.pdf\">Introducing the Vulkan WSI Layer<\/a> (PDF)<\/p>\n<h3>NamePointer \/ carl-vbn<\/h3>\n<p><a href=\"https:\/\/github.com\/carl-vbn\/pure-java-raytracer\">github.com\/carl-vbn\/pure-java-raytracer<\/a><br \/>\n<a href=\"https:\/\/github.com\/carl-vbn\/opengl-raytracing\">github.com\/carl-vbn\/opengl-raytracing<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=zIzlsphGjkY\">Making a 3D Gravity Simulator with OpenGL (Part 1)<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=MWf--8wDD5A\">Adding Camera movement and User Interface to my 3D Gravity Simulator<\/a><br \/>\n<a href=\"https:\/\/github.com\/carl-vbn\/opengl-gravity-simulator\">github.com\/carl-vbn\/opengl-gravity-simulator<\/a><br \/>\n<a href=\"https:\/\/carl-vbn.dev\/\">carl-vbn.dev<\/a><br \/>\n<a href=\"https:\/\/www.linkedin.com\/in\/carl-von-bonin\/\">LinkedIn: Carl von Bonin<\/a><\/p>\n<h3>Daniel Elwell \/ frozein<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=OAF4RCS_pPc\">The First 3 Months Developing My VOXEL RAYTRACING Engine<\/a><br \/>\n<a href=\"https:\/\/github.com\/frozein\/DoonEngine\">github.com\/frozein\/DoonEngine<\/a><\/p>\n<h3>Dr. Anton Gerdelan<\/h3>\n<p><a href=\"https:\/\/antongerdelan.net\/opengl\/\">Anton&#8217;s OpenGL 4 Tutorials<\/a><br \/>\n<a href=\"https:\/\/github.com\/capnramses\/antons_opengl_tutorials_book\/\">github.com\/capnramses\/antons_opengl_tutorials_book\/<\/a><br \/>\n<a href=\"https:\/\/github.com\/capnramses\/antons_opengl_tutorials_book\/tree\/master\/06_vcam_with_quaternion\">github.com\/capnramses\/antons_opengl_tutorials_book\/tree\/master\/06_vcam_with_quaternion<\/a><br \/>\n<a href=\"https:\/\/github.com\/AidanDelaney\/antons_opengl_tutorials_book\/tree\/sdl2-port\/\">github.com\/AidanDelaney\/antons_opengl_tutorials_book\/tree\/sdl2-port\/<\/a><\/p>\n<h3>Foundations of Game Engine Development<\/h3>\n<p><a href=\"https:\/\/foundationsofgameenginedev.com\/\">Foundations of Game Engine Development<\/a><br \/>\n<a href=\"https:\/\/foundationsofgameenginedev.com\/figures.html\">Foundations of Game Engine Development: Figures<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>YouTube<\/h1>\n<h3>Brendan Galea<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PL8327DO66nu9qYVKLDmdLW_84-yE4auCR\">Vulkan (c++) Game Engine Tutorials<\/a><\/p>\n<h3>Vulkan vs. OpenGL<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=0R23npUCCnw\">GDC 2018 &#8211; Getting explicit: How Hard is Vulkan really?<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=dvioALNs_Bc\">What Is Vulkan &#038; Why Should Gamers CARE?<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=jsxn93Wb7vk\">DirectX 12 &#038; Vulkan as Fast As Possible<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=tOWm8E7ZV9E\">DCS: What is Vulkan API?<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=506Ux5OajOY\">Vulkan vs OpenGL | Getting into Computer Graphics | OpenGL CUDA Interop | Cuda Education<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=8Ov_qN2Oub0\">What is Vulkan?<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=5mq8y_z7BWQ\">Should you learn Vulkan(C++)? Can beginners learn it?<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/playlist?list=PLStQc0GqppuXgs6do23v_HKRrR32gJMm3\">Vulkan Tutorials [Deutsch]<\/a><\/p>\n<h3>Example<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=hvdAVsjrQRM\">OpenGL vs Vulkan<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=Vujdk-NLJlw\">Open GL (Default) VS Open GL (Skia) VS Vulkan (Skia) Antutu Benchmark<\/a><\/p>\n<h3>Window System Integration (WSI)<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=E0BRJEzM5u4\">XDC 2019 | Introducing the Vulkan WSI Layer &#8211; Rosen Zhelev<\/a><\/p>\n<h3>OpenGL<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLEETnX-uPtBXT9T-hD0Bj31DSnwio-ywh\">Intro To Modern OpenGL Tutorial<\/a> (2014)<\/p>\n<h3>Game Dev Academy<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=bFmxMGGdBrk\">What is a Graphics Pipeline? Featuring DirectX 11<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=TDZMSozKZ20\">hat is a Shader? | Pixel and Vertex Shaders<\/a><\/p>\n<h3>Shader<\/h1>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=sXbdF4KjNOc\">What Are Shaders?<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=71BLZwRGUJE\">Writing a Shader in OpenGL<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=5W7JLgFCkwI\">How Shaders Work in OpenGL<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=C1ZUeHLb0YU\">Vertex and Fragment Shaders &#8211; Interactive 3D Graphics<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=uQG0SWv5lbw\">What Is A Shader? UE4 Materials 101 &#8211; Episode 1<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=3sI9uip7QS0\">1. What is a shader? What is GLSL? Why are they useful in games &#8211; Shader Course<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=T-HXmQAMhG0\">Shaders 101 &#8211; Intro to Shaders<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=kfM-yu0iQBk\">Shader Basics, Blending &#038; Textures \u2022 Shaders for Game Devs [Part 1]<\/a> (Unity)<\/p>\n<h3>Anti-Aliasing<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=R3AgvpOA2qw\">Computer Graphics 2.7: Aliasing and Anti aliasing Techniques<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=GvLEAHRmPl0\">Antialiasing &#8211; Interactive 3D Graphics<\/a><\/p>\n<h3>SketchpunkLabs<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLMinhigDWz6emRKVkVIEAaePW7vtIkaIF\">Fun With WebGL 2.0<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=OOqDkG035T0\">WebGL 2.0 : 044 : Ray to Triangle Intersection<\/a><\/p>\n<h3>RuhrJS Conference<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=t4BnyWfK9FA\">RuhrJS 2018 &#8211; Martin Splitt &#8211; Creative experiments with WebGL shaders in JavaScript<\/a><\/p>\n<h3>thebennybox<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLEETnX-uPtBXT9T-hD0Bj31DSnwio-ywh\">Intro To Modern OpenGL Tutorial<\/a> (Playlist)<\/p>\n<h3>Reducible<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=eED4bSkYCB8\">Building Collision Simulations: An Introduction to Computer Graphics<\/a><\/p>\n<h3>The Cherno<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2\">OpenGL<\/a> (Playlist), last update 2020<br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=W3gAzLwfIP0\">Welcome to OpenGL<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=0p9VxImr7Y0\">Vertex Buffers and Drawing a Triangle in OpenGL<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=nVaQuNXueFw\">ImGui in OpenGL<\/a><\/p>\n<h3>freeCodeCamp.org<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=45MIykWJ-C4\">OpenGL Course &#8211; Create 3D and 2D Graphics With C++<\/a><\/p>\n<h3>Joshua Shucker<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLxNGvnKpZBcVyjXg7Ko9RcAy9Nt-SmS1J\">Planet Vulkan<\/a> (Playlist)<br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=Apjnf4KhgFI\">Episode 7.5 &#8211; Graphics Pipeline Overview<\/a><\/p>\n<h3>NamePointer<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=lKIytgt3KXM\">I created my own Ray Tracing Engine from scratch<\/a><\/p>\n<h3>NVIDIA Developer<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PL5B692fm6--sgm8Uiava0IIvUojjFOCSRRay Tracing Essentials\"><\/a><\/p>\n<h3>Arun Ravindran ArunRocks<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=KaCe63v4D_Q\">Building a Ray Tracer in Python &#8211; Part 1 (Points in 3D Space)<\/a><\/p>\n<h3>First Principles of Computer Vision<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PL2zRqk16wsdpyQNZ6WFlGQtDICpzzQ925\">Radiometry and Reflectance | Photometric Stereo | Shape from Shading<\/a> (Playlist)<\/p>\n<h3>media.ccc.de<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=fL957hgX9kA\">Introduction to OpenGLES and GLSL programming<\/a><br \/>\nNOT in this talk:<\/p>\n<ul>\n<li>Clipping<\/li>\n<li>Vendor Extensions<\/li>\n<li>Geometry Shaders<\/li>\n<li>Lightning<\/li>\n<li>Stencils<\/li>\n<li>Framebuffer Objects<\/li>\n<li>Culling<\/li>\n<li>Framerate<\/li>\n<li>Tesselation Shaders<\/li>\n<li>Quaternions<\/li>\n<li>Shading<\/li>\n<li>Blending<\/li>\n<\/ul>\n<p>OpenGL<\/p>\n<ul>\n<li>API for rendering 2D and 3D Computer Graphics<\/li>\n<li>Developed by SGI in 1992<\/li>\n<li>Open Standard, now maintained by Khronos Group consortium<\/li>\n<li>Used in CAD, Games, VR\/AR, etc&#8230;<\/li>\n<\/ul>\n<p>OpenGL ES<\/p>\n<ul>\n<li>OpenGL for Embedded Systems<\/li>\n<li>Implementations by nvidia, AMD, etc.<\/li>\n<li>Available on Windows, MacOSX, Linux, iOS, Android, etc.<\/li>\n<li>Bindings for C, C++, Java, C#, Python, Ruby, Go, etc.<\/li>\n<li>Latest version OpenGL ES 3.2 (2019)<\/li>\n<li>&#8230; but anything from OpenGL ES 2.0 onwards is cool!<\/li>\n<\/ul>\n<p>EGL<\/p>\n<ul>\n<li>Native Platform Interface<\/li>\n<li>Creates &#038; Configures OpenGL ES Context (view\/window\/fullscreen)<\/li>\n<li>Your platform might come with something else (Mesa, WGL, CGL, GLX, etc.)<\/li>\n<\/ul>\n<p>Rasterizer<\/p>\n<ul>\n<li>Describe our geomentry in world coordinates (3D)<\/li>\n<li>Rasterizer projects it onto a projection plane (2D) => your screen<\/li>\n<li>Geometry in projection plane are now called fragments<\/li>\n<li>For each of the triangles, we figure out how we wan to color them<\/li>\n<li>If we have a triangle on that surface with 3 colors, the rasterizer will interpolate the values between the colors (pixel by pixel)<\/li>\n<li>Vertex- and Fragment-Shader go the projection and the texture mapping<\/li>\n<li>When you render a scene, the vertex shader is responsible for taking all your geometry and transforms\/moves\/scales it. Then it&#8217;s passed to the Rasterizer stage that does the real projection, figuring out which vertices end up on the 2D surface (plane) => output: fragments.<\/li>\n<\/ul>\n<p>GLSL Shader Language<\/p>\n<ul>\n<li>C-like syntax<\/li>\n<li>Vector and Matrix types (float, vec2, vec3, vec4, mat4, etc.)<\/li>\n<li>Built-in math functions (sin, cos, exp, sqrt, dot, cross, etc.)<\/li>\n<li>No recursion<\/li>\n<li>Limited loops<\/li>\n<\/ul>\n<p>Vertex Shader<\/p>\n<ul>\n<li>Runs once for each vertex of each triangle of the geometry<\/li>\n<li>Get per-vertex input from <code>attribute<\/code><\/li>\n<li>Global parameters: get parameters from <code>uniform<\/code>: projection from camera<\/li>\n<li>Pass output to fragment shader in <code>varying<\/code><\/li>\n<li>Pass position vector to rasierizer pipeline in <code>gl_Position<\/code> (magic variable)<\/li>\n<\/ul>\n<p>Fragment Shader<\/p>\n<ul>\n<li>Runs once for each fragment of each rasterized triangle<\/li>\n<li>Sets the final color for each fragment<\/li>\n<li>Get per-vertex input from <code>varying<\/code><\/li>\n<li>Get parameters from <code>uniform<\/code>: get texture data from <code>uniform sample2D<\/code><\/li>\n<li>Pass color vector to fragment pipeline in <code>gl_FragColor<\/code><\/li>\n<\/ul>\n<p>Math<\/p>\n<ul>\n<li>Vectors describe coordinates<\/li>\n<li>Matrices describe transformations<\/li>\n<\/ul>\n<p>Vector Operations<\/p>\n<ul>\n<li>Scalar Multiplication \/ dot-product: <code>alpha = acos(dot(u,v))<\/code><\/li>\n<li>Vector Multiplication \/ cross-product: n = cross(u,v)<\/li>\n<\/ul>\n<p>Transformation Matrices<\/p>\n<ul>\n<li>Translate<\/li>\n<li>Rotate<\/li>\n<li>Scale<\/li>\n<\/ul>\n<p>Projection Matrix (perspective vs. orthographic)<\/p>\n<p>Matrix Operations<\/p>\n<ul>\n<li>Multiplication of a vector with a matrix: transformed vector<\/li>\n<li>Multiplication of a matric with a matrix: chained transformation<\/li>\n<\/ul>\n<p><a href=\"https:\/\/github.com\/neiser\/PiGLET\">github.com\/neiser\/PiGLET<\/a>, Raspberry PI OpenGL Epics Toolkit<br \/>\n<a href=\"https:\/\/epics.anl.gov\/\">Experimental Physics and<br \/>\nIndustrial Control System, EPICS Home at Argonne<\/a><br \/>\n<a href=\"https:\/\/epics-controls.org\/\">EPICS &#8211; Experimental Physics and Industrial Control System<\/a><\/p>\n<h3>GetIntoGameDev<\/h3>\n<p><a href=\"https:\/\/github.com\/amengede\/getIntoGameDev\">github.com\/amengede\/getIntoGameDev<\/a><\/p>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLn3eTxaOtL2PHxN8EHf-ktAcN-sGETKfw\">OpenGL with C++<\/a> (Playlist)<br \/>\n<a href=\"https:\/\/www.youtube.com\/playlist?list=PLn3eTxaOtL2NH5nbPHMK7gE07SqhcAjmk\">Vulkan with C++<\/a> (Playlist)<br \/>\n<a href=\"https:\/\/www.youtube.com\/playlist?list=PLn3eTxaOtL2PDnEVNwOgZFm5xYPr4dUoR\">OpenGL with Python<\/a> (Playlist)<br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=Rin5Cp-Hhj8\">OpenGL with Python &#8211; Vertex Buffer Objects and Vertex Array Objects<\/a><\/p>\n<h3>OGLdev &#8211; Modern OpenGL Tutorials<\/h3>\n<p><a href=\"https:\/\/ogldev.org\/\">OGLdev &#8211; Modern OpenGL Tutorials<\/a><\/p>\n<ul>\n<li>World Coordinate System<\/li>\n<li>Local Coordinate System<\/li>\n<li>Object Coordinate System<\/li>\n<li>Object Space<\/li>\n<\/ul>\n<ul>\n<li>View Transformation<\/li>\n<li>Camera Transformation<\/li>\n<li>Eye Transformation<\/li>\n<\/ul>\n<ul>\n<li>Camera Coordinate System<\/li>\n<li>View Coordinate System<\/li>\n<li>Camera Space<\/li>\n<li>View Space<\/li>\n<li>Eye Space<\/li>\n<\/ul>\n<ul>\n<li>Perspective Projection<\/li>\n<li>Perspective Projection Matrix<\/li>\n<li>= Clip Coordinate System<\/li>\n<li>= Clip Space<\/li>\n<\/ul>\n<ul>\n<li>Perspective Division<\/li>\n<li>Range -1 ro +1 on all axes<\/li>\n<li>= Normalized Device Coordinates (NDC)<\/li>\n<\/ul>\n<ul>\n<li>Viewport Transformation<\/li>\n<li>= Window coordinates (ex. 1920 x 1080)<\/li>\n<\/ul>\n<ul>\n<li>Multiply all matrices to a single matrix<\/li>\n<li>= WVP \/ MVP<\/li>\n<\/ul>\n<ul>\n<li>UVN camera<\/li>\n<li>Location \/ Position (x, y, z)<\/li>\n<li>Orientation in UVN axis system<\/li>\n<li>N vector = eye to world<\/li>\n<li>V vector = up-vector\/li>\n<li>U vector = right-vector\/li>\n<\/ul>\n<h3>David Parker (2011 &#8211; 2013)<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PL2330214740B33712\">OpenGL Screencasts and Tutorials<\/a><\/p>\n<h3>GamesWithGabe<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLtrSb4XxIVbodGYZZVzC1PAZfwckrXp_X\">How to Code Minecraft<\/a> (GLFW &#038; Glad)<\/p>\n<p><a href=\"https:\/\/github.com\/codingminecraft\/MinecraftCloneForYoutube\">github.com\/codingminecraft\/MinecraftCloneForYoutube<\/a><br \/>\n<a href=\"https:\/\/github.com\/codingminecraft\/StreamMinecraftClone\">github.com\/codingminecraft\/StreamMinecraftClone<\/a><\/p>\n<h3>Dustin Biser<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=NPNX6HxQqRA\">Quaternion Camera Demo &#8211; (C++, OpenGL)<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=XF30cLr_-V8\">Shadow Mapping Demo<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=fL8uB-VsNmc\">GPU Smoke Simulations<\/a><\/p>\n<h4>Ressource<\/h4>\n<p><a href=\"https:\/\/www.linkedin.com\/in\/dustinbiser\/\">LinkedIn Dustin Biser<\/a><br \/>\n<a href=\"https:\/\/github.com\/dustin-biser\/Rigid3D\">github.com\/dustin-biser\/Rigid3D<\/a> (Arcball)<\/p>\n<h3>Victor Gordan<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLPaoO-vpZnumdcb4tZc4x5Q-v7CkrQ6M-\">OpenGL Tutorials<\/a>, 13.08.2021 (Playlist)<\/p>\n<h4>Ressource<\/h4>\n<p><a href=\"https:\/\/www.linkedin.com\/in\/victorgordan\/\">LinkedIn Victor Gordan<\/a><br \/>\n<a href=\"https:\/\/github.com\/VictorGordan\/opengl-tutorials\">github.com\/VictorGordan\/opengl-tutorials<\/a><\/p>\n<h3>Michael Grieco<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLysLvOneEETPlOI_PI4mJnocqIpr2cSHS\">C++ OpenGL Tutorial<\/a> (Playlist)<br \/>\n<a href=\"https:\/\/www.youtube.com\/playlist?list=PLysLvOneEETMnZWk6fVusftDHV9duoazP\">2D Pong (C++ OpenGL)<\/a> (Playlist)<\/p>\n<h4>Ressource<\/h4>\n<p><a href=\"https:\/\/michaelg29.github.io\/\">michaelg29.github.io<\/a><br \/>\n<a href=\"https:\/\/github.com\/michaelg29\/glpong\">github.com\/michaelg29\/glpong<\/a><br \/>\n<a href=\"https:\/\/github.com\/michaelg29\/yt-tutorials\">github.com\/michaelg29\/yt-tutorials<\/a><br \/>\n<a href=\"https:\/\/github.com\/michaelg29\/yt-tutorials\/tree\/master\/CPP\/OpenGL\/OpenGLTutorial\">github.com\/michaelg29\/yt-tutorials\/tree\/master\/CPP\/OpenGL\/OpenGLTutorial<\/a><br \/>\n<a href=\"https:\/\/www.linkedin.com\/in\/michaelg15\/\">LinkedIn Michael Grieco<\/a><\/p>\n<h3>Thomas Sheppard (Galway-Mayo Institute of Technology, Ireland)<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=17kqhGRDHc8\">Introduction to perspective projection<\/a><\/p>\n<h3>Build Succeeded (Direct2D)<\/h3>\n<p><a href=\"http:\/\/blog.bachi.net\/?p=12908\">C++ Win32 Direct2D<\/a><\/p>\n<h4>Ressource<\/h4>\n<p><a href=\"https:\/\/github.com\/BuildSucceeded\/3D-Game-Engine\">github.com\/BuildSucceeded\/3D-Game-Engine<\/a><\/p>\n<h3>Pikuma<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=EqNcqBdrNyI\">Math for Game Developers: Perspective Projection Matrix<\/a><\/p>\n<h3>Danakorn<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=UNkQdoz6hN8\">Projection in Computer Graphics<\/a><\/p>\n<h3>Danakorn<\/h3>\n<h3>Pythonista_<\/h3>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=qw0oY6Ld-L0\">How to make a 3D projection in Python | Rendering a cube in 2D! (No OpenGL)<\/a><\/p>\n<h4>Ressource<\/h4>\n<p><a href=\"https:\/\/github.com\/Magoninho\/3D-projection-tutorial\">github.com\/Magoninho\/3D-projection-tutorial<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>Medium<\/h1>\n<p><a href=\"https:\/\/towardsdatascience.com\/parallelizing-heavy-gpu-workloads-via-multi-queue-operations-50a38b15a1dc\">Parallelizing GPU-intensive Workloads via Multi-Queue Operations using Kompute &#038; Vulkan<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>Udacity<\/h1>\n<p><a href=\"https:\/\/www.udemy.com\/course\/vulkan-gpu-computing\/\">GPU computing in Vulkan<\/a>, The ultimate way to parallel computing using Vulkan API.<br \/>\n<a href=\"https:\/\/www.udemy.com\/course\/learn-the-vulkan-api-with-cpp\/\">Learn the Vulkan API with C++<\/a>, Learn the fundamentals of the popular Vulkan API for modern graphics rendering using C++!<\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>Learn OpenGL<\/h1>\n<h3>Advanced Lightning<\/h3>\n<p><a href=\"https:\/\/learnopengl.com\/Advanced-Lighting\/Normal-Mapping\">Normal Mapping<\/a><\/p>\n<p>TBN matrix<\/p>\n<ul>\n<li>Tangent, <\/li>\n<li>Bitangent and <\/li>\n<li>Normal vector<\/li>\n<\/ul>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>GLEW<\/h1>\n<h3>GLEW linking<\/h3>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n1&gt;OpenGLBook_Chapter1.obj : error LNK2001: unresolved external symbol __imp__glewGetErrorString@4\r\n1&gt;OpenGLBook_Chapter1.obj : error LNK2001: unresolved external symbol __imp__glewInit@0\r\n1&gt;C:\\Users\\bacr\\source\\repos\\FreeGLUT_example2\\Release\\FreeGLUT_example2.exe : fatal error LNK1120: 2 unresolved externals\r\n\r\n#define GLEW_STATIC\r\n1&gt;OpenGLBook_Chapter1.obj : error LNK2001: unresolved external symbol _glewGetErrorString@4\r\n1&gt;OpenGLBook_Chapter1.obj : error LNK2001: unresolved external symbol _glewInit@0\r\n1&gt;C:\\Users\\bacr\\source\\repos\\FreeGLUT_example2\\Release\\FreeGLUT_example2.exe : fatal error LNK1120: 2 unresolved externals\r\n\r\n&gt;dumpbin -headers glew-2.1.0\\lib\\Release\\Win32\\glew32.lib | findstr \/c:&quot;  Symbol name  : _glewInit&quot;\r\n  Symbol name  : _glewInit@0\r\n<\/pre>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/488809\/tools-for-inspecting-lib-files\/488901\">Tools for inspecting .lib files?<\/a><br \/>\n<a href=\"https:\/\/forums.developer.nvidia.com\/t\/problems-with-glew-library-and-glewinit-function\/30381\">Problems with glew library and glewinit() function<\/a><br \/>\n<a href=\"https:\/\/titanwolf.org\/Network\/Articles\/Article?AID=bd6a40e8-5bca-4d6f-8ce8-d4350d1f652d\">About the use of glew library (unresolved external symbol __imp__glewInit @ 0)<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/4711113\/glew-in-vs-2010-unresolved-external-symbol-imp-glewinit\">Glew in VS 2010: unresolved external symbol __imp__glewInit<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/4715530\/opengl-how-to-compile-glew32-dll-from-source-file\/4716857#4716857\">OpenGL: How to compile glew32.dll from source file<\/a><\/p>\n<table>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/msbuild_project_output.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/msbuild_project_output-300x175.png\" alt=\"\" width=\"300\" height=\"175\" class=\"alignleft size-medium wp-image-12879\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/msbuild_project_output-300x175.png 300w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/msbuild_project_output-624x364.png 624w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/msbuild_project_output.png 743w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_cpp_general.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_cpp_general-300x208.png\" alt=\"\" width=\"300\" height=\"208\" class=\"alignleft size-medium wp-image-12880\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_cpp_general-300x208.png 300w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_cpp_general-768x532.png 768w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_cpp_general-624x432.png 624w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_cpp_general.png 786w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_general.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_general-300x208.png\" alt=\"\" width=\"300\" height=\"208\" class=\"alignleft size-medium wp-image-12881\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_general-300x208.png 300w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_general-768x532.png 768w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_general-624x432.png 624w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_general.png 786w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_input.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_input-300x208.png\" alt=\"\" width=\"300\" height=\"208\" class=\"alignleft size-medium wp-image-12882\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_input-300x208.png 300w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_input-768x532.png 768w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_input-624x432.png 624w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_linker_input.png 786w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_build_events_post_event.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_build_events_post_event-300x208.png\" alt=\"\" width=\"300\" height=\"208\" class=\"alignleft size-medium wp-image-12883\" srcset=\"https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_build_events_post_event-300x208.png 300w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_build_events_post_event-768x532.png 768w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_build_events_post_event-624x432.png 624w, https:\/\/blog.bachi.net\/wp-content\/uploads\/2021\/08\/config_build_events_post_event.png 786w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/td>\n<\/tr>\n<\/table>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nBuild started...\r\n1&gt;------ Build started: Project: FreeGLUT_example2, Configuration: Release Win32 ------\r\n1&gt;main.cpp\r\n1&gt;OpenGLBook_Chapter1.cpp\r\n1&gt;tutorial01.cpp\r\n1&gt;Generating code\r\n1&gt;Previous IPDB not found, fall back to full compilation.\r\n1&gt;All 16 functions were compiled because no usable IPDB\/IOBJ from previous compilation was found.\r\n1&gt;Finished generating code\r\n1&gt;FreeGLUT_example2.vcxproj -&gt; C:\\Users\\bacr\\source\\repos\\FreeGLUT_example2\\Release\\FreeGLUT_example2.exe\r\n1&gt;        1 Datei(en) kopiert.\r\n1&gt;        1 Datei(en) kopiert.\r\n========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========\r\n<\/pre>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>io7m<\/h1>\n<h3>r1<\/h3>\n<p><a href=\"https:\/\/io7m.github.io\/r1\/\">io7m-r1 0.10.0 Documentation<\/a><br \/>\n<a href=\"http:\/\/io7m.github.io\/r1\/p2s16.xhtml\">Normal Mapping<\/a><br \/>\n<a href=\"https:\/\/github.com\/io7m\/r1\">github.com\/io7m\/r1<\/a><\/p>\n<h3>r2<\/h3>\n<p><a href=\"https:\/\/io7m.github.io\/r2\/\">com.io7m.r2 0.3.0-SNAPSHOT Documentation<\/a><br \/>\n<a href=\"https:\/\/github.com\/io7m\/r2\">github.com\/io7m\/r2<\/a>, Aggressively minimalist deferred renderer<\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>Wikipedia<\/h1>\n<p><a href=\"https:\/\/de.wikipedia.org\/wiki\/Kategorie:Bildsynthese\">Kategorie:Bildsynthese<\/a><br \/>\n<a href=\"https:\/\/de.wikipedia.org\/wiki\/Framebuffer_Object\">Framebuffer Object (FBO)<\/a><br \/>\n<a href=\"https:\/\/de.wikipedia.org\/wiki\/Vertex_Buffer_Object\">Vertex Buffer Object (VBO)<\/a><br \/>\n<a href=\"https:\/\/de.wikipedia.org\/wiki\/Immediate_Mode_(Computergrafik)\">Immediate Mode<\/a><br \/>\n<a href=\"https:\/\/de.wikipedia.org\/wiki\/Retained_Mode\">Retained Mode<\/a><br \/>\n<a href=\"https:\/\/de.wikipedia.org\/wiki\/Z-Buffer\">Z-Buffering<\/a> (auch Depth Buffering, Tiefenpuffer)<br \/>\n<a href=\"https:\/\/de.wikipedia.org\/wiki\/Rasterung_von_Polygonen\">Rasterung von Polygonen<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>Microsoft Docs<\/h1>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/learnwin32\/retained-mode-versus-immediate-mode\">Retained Mode Versus Immediate Mode<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>OpenGL Documentation<\/h1>\n<h3>Khronos<\/h3>\n<p><a href=\"https:\/\/www.khronos.org\/registry\/OpenGL-Refpages\/gl2.1\/xhtml\/gluPerspective.xml\">gluPerspective \u2014 set up a perspective projection matrix<\/a><br \/>\n<a href=\"https:\/\/www.khronos.org\/registry\/OpenGL-Refpages\/gl2.1\/xhtml\/gluLookAt.xml\">gluLookAt \u2014 define a viewing transformation<\/a><\/p>\n<h3>docs.GL<\/h3>\n<p><a href=\"https:\/\/docs.gl\/\">docs.GL<\/a> (only OpenGL, no utility functions!)<\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>Arcball<\/h1>\n<p><a href=\"https:\/\/en.wikibooks.org\/wiki\/OpenGL_Programming\/Modern_OpenGL_Tutorial_Arcball\">OpenGL Programming\/Modern OpenGL Tutorial Arcball<\/a><br \/>\n<a href=\"https:\/\/asliceofrendering.com\/camera\/2019\/11\/30\/ArcballCamera\/\">How to implement a simple Arcball Camera<\/a><br \/>\n<a href=\"https:\/\/pixeladventuresweb.wordpress.com\/2016\/10\/04\/arcball-controller\/\">Arcball Controller<\/a><br \/>\n<a href=\"https:\/\/codereview.stackexchange.com\/questions\/51205\/user-controlled-rotation-with-arcball\">User controlled rotation with arcBall<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/23747013\/arcball-controls-with-qt-and-opengl\">arcball controls with Qt, and OpenGL<\/a><\/p>\n<h3>Mario Konrad<\/h3>\n<p><a href=\"http:\/\/www.mario-konrad.ch\/blog\/programming\/opengl\/tutorial-08.html\">OpenGL: Tutorial 8 &#8211; ArcBall<\/a><br \/>\n<a href=\"http:\/\/www.mario-konrad.ch\/blog\/programming\/opengl\/\">Tutorial: OpenGL<\/a><\/p>\n<h4>Ressource<\/h4>\n<p><a href=\"https:\/\/github.com\/mariokonrad\/qtnavigator\">github.com\/mariokonrad\/qtnavigator<\/a><br \/>\n<a href=\"https:\/\/github.com\/Jokymon\/qtnavigator\">github.com\/Jokymon\/qtnavigator<\/a><br \/>\n<a href=\"https:\/\/github.com\/mariokonrad\/glua\">github.com\/mariokonrad\/glua<\/a><\/p>\n<h4>YouTube<\/h4>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=WhGYZXvkrLE\">C# vs. OpenGL (Tao.Framework) &#8211; Arcball Rotation with zoom and pan<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=rWlEIxpIgWw\">OpenGL Arcball Test<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=KNV1AfUfeZM\">Arcball Test in C++ and OpenGL with a custom math library<\/a><\/p>\n<p><!-- ----------------------------------------------------------------------------------------------------------------------- --><\/p>\n<hr\/>\n<h1>Focal length<\/h1>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/30369572\/focallength-to-fov-formula-in-opengl\">FocalLength to Fov formula in OpenGl<\/a><br \/>\n<a href=\"https:\/\/community.khronos.org\/t\/how-to-set-focal-length-in-opengl\/46176\">How to set focal length in OpenGL^_^<\/a><br \/>\n<a href=\"https:\/\/computergraphics.stackexchange.com\/questions\/10593\/is-focal-length-equal-to-the-distance-from-the-optical-center-to-the-near-clippi\">is focal length equal to the distance from the optical center to the near clipping plane- openGL<\/a><br \/>\n<a href=\"https:\/\/computergraphics.stackexchange.com\/questions\/12246\/p2-vs-projection-plane\">P2 vs projection plane<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Peter Shirley raytracing.github.io\/ github.com\/RayTracing\/raytracing.github.io Ray Tracing in One Weekend Ray Tracing: The Next Week Ray Tracing: The Rest of Your Life eye \/ camera image 16:9 aspect ratio viewport = viewport&#8217;s aspect ratio == rendered image aspect ratio viewport: 2 units in height projection plane projection point distance between plane and point: 1 unit = [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-12480","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/12480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12480"}],"version-history":[{"count":76,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/12480\/revisions"}],"predecessor-version":[{"id":13639,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/12480\/revisions\/13639"}],"wp:attachment":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}