Shadows + basic skybox + water
BIN
Debug/grk-cw10.exe
Normal file
BIN
Debug/grk-cw10.pdb
Normal file
BIN
Debug/grk-cw4.exe
Normal file
BIN
Debug/grk-cw4.pdb
Normal file
BIN
Debug/grk-cw5.exe
Normal file
BIN
Debug/grk-cw5.pdb
Normal file
BIN
Debug/grk-cw7.exe
Normal file
BIN
Debug/grk-cw7.pdb
Normal file
BIN
Debug/grk-cw8.exe
Normal file
BIN
Debug/grk-cw8.pdb
Normal file
BIN
Debug/grk-cw9.exe
Normal file
BIN
Debug/grk-cw9.pdb
Normal file
BIN
Release/grk-cw8.exe
Normal file
BIN
Release/grk-cw8.pdb
Normal file
BIN
Release/grk-cw9.exe
Normal file
BIN
Release/grk-cw9.pdb
Normal file
BIN
assimp-vc141-mt.dll
Normal file
BIN
assimp-vc141-mtd.dll
Normal file
BIN
cw 9/Debug/Box.obj
Normal file
BIN
cw 9/Debug/Camera.obj
Normal file
BIN
cw 9/Debug/Render_Utils.obj
Normal file
BIN
cw 9/Debug/SOIL.obj
Normal file
BIN
cw 9/Debug/Shader_Loader.obj
Normal file
BIN
cw 9/Debug/Texture.obj
Normal file
11
cw 9/Debug/grk-cw9.exe.recipe
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project>
|
||||||
|
<ProjectOutputs>
|
||||||
|
<ProjectOutput>
|
||||||
|
<FullPath>C:\Users\jedrz\Desktop\grk\Debug\grk-cw9.exe</FullPath>
|
||||||
|
</ProjectOutput>
|
||||||
|
</ProjectOutputs>
|
||||||
|
<ContentFiles />
|
||||||
|
<SatelliteDlls />
|
||||||
|
<NonRecipeFileRefs />
|
||||||
|
</Project>
|
47
cw 9/Debug/grk-cw9.log
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
main.cpp
|
||||||
|
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h(130,1): warning C4005: "APIENTRY": ponowna definicja makra
|
||||||
|
C:\Users\jedrz\Desktop\grk\dependencies\glfw-3.3.8.bin.WIN32\include\GLFW\glfw3.h(123): message : zobacz poprzednią definicję „APIENTRY”
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(100,30): warning C4305: "inicjowanie": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(114,17): warning C4101: "data": lokalna zmienna, do której nie istnieje odwołanie
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(139,38): warning C4305: "=": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(168,16): warning C4305: "inicjowanie": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(228,13): warning C4244: "inicjowanie": konwersja z "double" do "float", możliwa utrata danych
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(244,98): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(247,68): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(290,13): warning C4244: "inicjowanie": konwersja z "double" do "float", możliwa utrata danych
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(298,108): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(307,87): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(307,223): warning C4305: "argument": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(310,59): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(311,37): warning C4305: "argument": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(343,2): warning C4305: "argument": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(387,108): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(460,21): warning C4305: "-=": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(462,21): warning C4305: "+=": obcięcie z "double" do "float"
|
||||||
|
Box.obj : warning LNK4075: zignorowano opcję „/EDITANDCONTINUE” z powodu określenia opcji „/INCREMENTAL:NO”
|
||||||
|
LINK : warning LNK4098: domyślna biblioteka „MSVCRT” powoduje konflikt z innymi bibliotekami; użyj opcji /NODEFAULTLIB:biblioteka
|
||||||
|
grk-cw9.vcxproj -> C:\Users\jedrz\Desktop\grk\Debug\grk-cw9.exe
|
BIN
cw 9/Debug/grk-cw9.tlog/CL.command.1.tlog
Normal file
BIN
cw 9/Debug/grk-cw9.tlog/CL.read.1.tlog
Normal file
BIN
cw 9/Debug/grk-cw9.tlog/CL.write.1.tlog
Normal file
2
cw 9/Debug/grk-cw9.tlog/grk-cw9.lastbuildstate
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0:
|
||||||
|
Debug|Win32|C:\Users\jedrz\Desktop\grk\|
|
BIN
cw 9/Debug/grk-cw9.tlog/link.command.1.tlog
Normal file
BIN
cw 9/Debug/grk-cw9.tlog/link.read.1.tlog
Normal file
BIN
cw 9/Debug/grk-cw9.tlog/link.write.1.tlog
Normal file
BIN
cw 9/Debug/image_DXT.obj
Normal file
BIN
cw 9/Debug/image_helper.obj
Normal file
BIN
cw 9/Debug/main.obj
Normal file
BIN
cw 9/Debug/stb_image_aug.obj
Normal file
BIN
cw 9/Debug/vc142.idb
Normal file
BIN
cw 9/Debug/vc142.pdb
Normal file
BIN
cw 9/Release/Box.obj
Normal file
BIN
cw 9/Release/Camera.obj
Normal file
BIN
cw 9/Release/Render_Utils.obj
Normal file
BIN
cw 9/Release/SOIL.obj
Normal file
BIN
cw 9/Release/Shader_Loader.obj
Normal file
BIN
cw 9/Release/Texture.obj
Normal file
BIN
cw 9/Release/TriangleSoup.obj
Normal file
11
cw 9/Release/grk-cw9.exe.recipe
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project>
|
||||||
|
<ProjectOutputs>
|
||||||
|
<ProjectOutput>
|
||||||
|
<FullPath>C:\Users\jedrz\Desktop\grk\Release\grk-cw9.exe</FullPath>
|
||||||
|
</ProjectOutput>
|
||||||
|
</ProjectOutputs>
|
||||||
|
<ContentFiles />
|
||||||
|
<SatelliteDlls />
|
||||||
|
<NonRecipeFileRefs />
|
||||||
|
</Project>
|
BIN
cw 9/Release/grk-cw9.iobj
Normal file
BIN
cw 9/Release/grk-cw9.ipdb
Normal file
50
cw 9/Release/grk-cw9.log
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
main.cpp
|
||||||
|
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h(130,1): warning C4005: "APIENTRY": ponowna definicja makra
|
||||||
|
C:\Users\jedrz\Desktop\grk\dependencies\glfw-3.3.8.bin.WIN32\include\GLFW\glfw3.h(123): message : zobacz poprzednią definicję „APIENTRY”
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(96,30): warning C4305: "inicjowanie": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(110,17): warning C4101: "data": lokalna zmienna, do której nie istnieje odwołanie
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(135,38): warning C4305: "=": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(164,16): warning C4305: "inicjowanie": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(224,13): warning C4244: "inicjowanie": konwersja z "double" do "float", możliwa utrata danych
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(240,98): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(243,68): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(303,13): warning C4244: "inicjowanie": konwersja z "double" do "float", możliwa utrata danych
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(311,108): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(319,87): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(319,223): warning C4305: "argument": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(322,59): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(323,37): warning C4305: "argument": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(355,2): warning C4305: "argument": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(403,108): warning C4305: "argument": obcięcie z "double" do "T"
|
||||||
|
with
|
||||||
|
[
|
||||||
|
T=float
|
||||||
|
]
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(479,21): warning C4305: "-=": obcięcie z "double" do "float"
|
||||||
|
C:\Users\jedrz\Desktop\grk\cw 9\src\ex_9_1.hpp(481,21): warning C4305: "+=": obcięcie z "double" do "float"
|
||||||
|
Trwa generowanie kodu
|
||||||
|
65 of 605 functions (10.7%) were compiled, the rest were copied from previous compilation.
|
||||||
|
18 functions were new in current compilation
|
||||||
|
18 functions had inline decision re-evaluated but remain unchanged
|
||||||
|
Zakończono generowanie kodu
|
||||||
|
grk-cw9.vcxproj -> C:\Users\jedrz\Desktop\grk\Release\grk-cw9.exe
|
BIN
cw 9/Release/grk-cw9.tlog/CL.command.1.tlog
Normal file
BIN
cw 9/Release/grk-cw9.tlog/CL.read.1.tlog
Normal file
BIN
cw 9/Release/grk-cw9.tlog/CL.write.1.tlog
Normal file
2
cw 9/Release/grk-cw9.tlog/grk-cw9.lastbuildstate
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0:
|
||||||
|
Release|Win32|C:\Users\jedrz\Desktop\grk\|
|
BIN
cw 9/Release/grk-cw9.tlog/link.command.1.tlog
Normal file
BIN
cw 9/Release/grk-cw9.tlog/link.read.1.tlog
Normal file
BIN
cw 9/Release/grk-cw9.tlog/link.write.1.tlog
Normal file
BIN
cw 9/Release/image_DXT.obj
Normal file
BIN
cw 9/Release/image_helper.obj
Normal file
BIN
cw 9/Release/main.obj
Normal file
BIN
cw 9/Release/stb_image_aug.obj
Normal file
BIN
cw 9/Release/vc142.pdb
Normal file
183
cw 9/Zadania 9.html
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="generator" content="pandoc" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||||
|
<title>Zadania 9</title>
|
||||||
|
<style>
|
||||||
|
code{white-space: pre-wrap;}
|
||||||
|
span.smallcaps{font-variant: small-caps;}
|
||||||
|
span.underline{text-decoration: underline;}
|
||||||
|
div.column{display: inline-block; vertical-align: top; width: 50%;}
|
||||||
|
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
||||||
|
ul.task-list{list-style: none;}
|
||||||
|
pre > code.sourceCode { white-space: pre; position: relative; }
|
||||||
|
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
|
||||||
|
pre > code.sourceCode > span:empty { height: 1.2em; }
|
||||||
|
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
||||||
|
div.sourceCode { margin: 1em 0; }
|
||||||
|
pre.sourceCode { margin: 0; }
|
||||||
|
@media screen {
|
||||||
|
div.sourceCode { overflow: auto; }
|
||||||
|
}
|
||||||
|
@media print {
|
||||||
|
pre > code.sourceCode { white-space: pre-wrap; }
|
||||||
|
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
||||||
|
}
|
||||||
|
pre.numberSource code
|
||||||
|
{ counter-reset: source-line 0; }
|
||||||
|
pre.numberSource code > span
|
||||||
|
{ position: relative; left: -4em; counter-increment: source-line; }
|
||||||
|
pre.numberSource code > span > a:first-child::before
|
||||||
|
{ content: counter(source-line);
|
||||||
|
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
||||||
|
border: none; display: inline-block;
|
||||||
|
-webkit-touch-callout: none; -webkit-user-select: none;
|
||||||
|
-khtml-user-select: none; -moz-user-select: none;
|
||||||
|
-ms-user-select: none; user-select: none;
|
||||||
|
padding: 0 4px; width: 4em;
|
||||||
|
color: #aaaaaa;
|
||||||
|
}
|
||||||
|
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
||||||
|
div.sourceCode
|
||||||
|
{ }
|
||||||
|
@media screen {
|
||||||
|
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
||||||
|
}
|
||||||
|
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
|
||||||
|
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
|
||||||
|
code span.at { color: #7d9029; } /* Attribute */
|
||||||
|
code span.bn { color: #40a070; } /* BaseN */
|
||||||
|
code span.bu { } /* BuiltIn */
|
||||||
|
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
|
||||||
|
code span.ch { color: #4070a0; } /* Char */
|
||||||
|
code span.cn { color: #880000; } /* Constant */
|
||||||
|
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
|
||||||
|
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
|
||||||
|
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
|
||||||
|
code span.dt { color: #902000; } /* DataType */
|
||||||
|
code span.dv { color: #40a070; } /* DecVal */
|
||||||
|
code span.er { color: #ff0000; font-weight: bold; } /* Error */
|
||||||
|
code span.ex { } /* Extension */
|
||||||
|
code span.fl { color: #40a070; } /* Float */
|
||||||
|
code span.fu { color: #06287e; } /* Function */
|
||||||
|
code span.im { } /* Import */
|
||||||
|
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
|
||||||
|
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
|
||||||
|
code span.op { color: #666666; } /* Operator */
|
||||||
|
code span.ot { color: #007020; } /* Other */
|
||||||
|
code span.pp { color: #bc7a00; } /* Preprocessor */
|
||||||
|
code span.sc { color: #4070a0; } /* SpecialChar */
|
||||||
|
code span.ss { color: #bb6688; } /* SpecialString */
|
||||||
|
code span.st { color: #4070a0; } /* String */
|
||||||
|
code span.va { color: #19177c; } /* Variable */
|
||||||
|
code span.vs { color: #4070a0; } /* VerbatimString */
|
||||||
|
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
|
||||||
|
</style>
|
||||||
|
<link rel="stylesheet" href="style.css" />
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 id="shadow-mapping">Shadow mapping</h1>
|
||||||
|
<p>Cienie są ważnym elementem oświetlenie. Dodają realizmu do sceny i dzięki nim łatwiej jest graczowi zorientować się w przestrzennym rozłożeniu obiektów. <img src="./img/shadows1.bmp" /> Na powyższym obrazku możesz zobaczyć, że dużo łatwiej jest okreśłić położenie kostek, gdy rzucają one cienie. Podstawową techniką generowania cieni jest <strong>shadow mapping</strong> i wiele bardziej zaawansowanych technik na niej bazuje.</p>
|
||||||
|
<p>Składa się on z dwóch kroków. W pierwszym obliczamy mapy głębokości z perspektywy źródła światła i zapisaniu do tekstury (tą teksturę nazywamy <em>shadowmap</em>), w drugim przy rysowaniu fragmentu porównujemy jego odległość do źródła światła z odległością zapisaną w teksturze.</p>
|
||||||
|
<p>Celem tych zajęć będzie dodanie cieni do początkowej sceny. W obecnym projekcie są 3 źródła światła: światło słoneczne, reflektor samolociku i lampa planetarna. W trakcie zajęć skupimy się na świetle słonecznym.</p>
|
||||||
|
<h2 id="mapa-głębokości---framebuffers">Mapa głębokości - Framebuffers</h2>
|
||||||
|
<p>Framebuffer to obiekt, do którego rednerowana jest scena w postaci tekstury. Do tej pory korzystaliśmy z domyślnego Famebuffora, który był wyświetlany na ekranie. Teraz potrzebujemy dodatkowy, który będzie przechwytywał mapę głębokości. Tworzymy go w następujący sposób</p>
|
||||||
|
<div class="sourceCode" id="cb1"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>glGenFramebuffers(<span class="dv">1</span>, &depthMapFBO); </span></code></pre></div>
|
||||||
|
<p>Zmienna <code>depthMapFBO</code> jest jak to typu <code>unsignet int</code> i powinna być dostępna globalnie. Kolejnym krokiem jest stworzenie tekstury głębokości</p>
|
||||||
|
<div class="sourceCode" id="cb2"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>glGenTextures(<span class="dv">1</span>, &depthMap);</span>
|
||||||
|
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>glBindTexture(GL_TEXTURE_2D, depthMap);</span>
|
||||||
|
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>glTexImage2D(GL_TEXTURE_2D, <span class="dv">0</span>, GL_DEPTH_COMPONENT, </span>
|
||||||
|
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> SHADOW_WIDTH, SHADOW_HEIGHT, <span class="dv">0</span>, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);</span>
|
||||||
|
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);</span>
|
||||||
|
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a>glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);</span>
|
||||||
|
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a>glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); </span>
|
||||||
|
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a>glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); </span></code></pre></div>
|
||||||
|
<p>Również zmienna <code>depthMap</code> jest jak to typu <code>unsignet int</code> i powinna być dostępna globalnie. Tworzymy teksturę, zaznaczamy, że jest to tekstura głębokości nadając jej format <code>GL_DEPTH_COMPONENT</code>. Parametry <code>SHADOW_WIDTH</code>, <code>SHADOW_HEIGHT</code> są ustalone globalnie i oba wynoszą 1024.</p>
|
||||||
|
<p>I w końcu podpinamy teksturę pod FBO.</p>
|
||||||
|
<div class="sourceCode" id="cb3"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a></span>
|
||||||
|
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);</span>
|
||||||
|
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthMap, <span class="dv">0</span>);</span>
|
||||||
|
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a>glDrawBuffer(GL_NONE);</span>
|
||||||
|
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>glReadBuffer(GL_NONE);</span>
|
||||||
|
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a>glBindFramebuffer(GL_FRAMEBUFFER, <span class="dv">0</span>); </span></code></pre></div>
|
||||||
|
<h3 id="zadanie">Zadanie</h3>
|
||||||
|
<p>Utwórz funkcję <code>initDepthMap</code>, w której zainicjalizujesz mapę głębokości. Wywołaj ją w funkcji <code>init</code>.</p>
|
||||||
|
<h3 id="renderowanie-mapy-głębokości">Renderowanie mapy głębokości</h3>
|
||||||
|
<p>W tej części będziemy uzupełniać funkcję <code>renderShadowapSun</code>. Funkcja ma za zadanie zapisać w FBO mapę głębokości z perspektywy słońca. Pierwsze co musimy mieć, to parę shaderów, która będzie renderować mapę. Ponieważ jedyne co potrzebujemy tylko rozmieścić obiekty w odpowiednich miejscach. Shader wierzchołków ustawia tylko pozycję w oparciu o przesyłanie macierze.</p>
|
||||||
|
<div class="sourceCode" id="cb4"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">version 430 core</span></span>
|
||||||
|
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||||
|
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a>layout(location = <span class="dv">0</span>) in vec3 vertexPosition;</span>
|
||||||
|
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a>layout(location = <span class="dv">1</span>) in vec3 vertexNormal;</span>
|
||||||
|
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a>layout(location = <span class="dv">2</span>) in vec2 vertexTexCoord;</span>
|
||||||
|
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a></span>
|
||||||
|
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a>uniform mat4 viewProjectionMatrix;</span>
|
||||||
|
<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a>uniform mat4 modelMatrix;</span>
|
||||||
|
<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a></span>
|
||||||
|
<span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> main()</span>
|
||||||
|
<span id="cb4-11"><a href="#cb4-11" aria-hidden="true" tabindex="-1"></a>{</span>
|
||||||
|
<span id="cb4-12"><a href="#cb4-12" aria-hidden="true" tabindex="-1"></a> gl_Position = viewProjectionMatrix * modelMatrix * vec4(vertexPosition, <span class="fl">1.0</span>);</span>
|
||||||
|
<span id="cb4-13"><a href="#cb4-13" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
|
||||||
|
<p>Natomiast shader fragmentów jest pusty, ponieważ nic nie wysyłamy a głębokość zapisywana jest automatycznie.</p>
|
||||||
|
<div class="sourceCode" id="cb5"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#</span><span class="er">version 430 core</span></span>
|
||||||
|
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a></span>
|
||||||
|
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> main()</span>
|
||||||
|
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a>{ </span>
|
||||||
|
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a>} </span></code></pre></div>
|
||||||
|
<h3 id="zadanie-1">Zadanie</h3>
|
||||||
|
<p>Dodaj utwórz parę shaderów jak powyżej, załaduj je do zmiennej globalnej o nazwie <code>programDepth</code> i aktywuj go w funkcji <code>renderShadowapSun</code>. Utwórz funkcję <code>drawObjectDepth</code>. która będzie przyjmować referencję do <code>RenderContext</code>, macierz <code>viewProjection</code> i macierz modelu oraz przesyłać macierze do GPU i rysować <code>RenderContext</code></p>
|
||||||
|
<p>Musimy zdefiniować macierz widoku i rzutowania, które mamy przesłać. Implementujemy cienie dla oświetlenia kierunkowego, gdzie dla każdego punktu kierunek światła jest taki sam. W takim wypadku skorzystamy z rzutowania prostopadłego. <img src="./img/shadow_mapping_projection.png" /></p>
|
||||||
|
<p>Do stworzenia macierzy rzutowania perspektywicznego wykorzystamy funkcję:</p>
|
||||||
|
<div class="sourceCode" id="cb6"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>glm::mat4 lightProjection = glm::ortho(</span>
|
||||||
|
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> left,</span>
|
||||||
|
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> right,</span>
|
||||||
|
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> bottom,</span>
|
||||||
|
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> top,</span>
|
||||||
|
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> zNear,</span>
|
||||||
|
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> zFar</span>
|
||||||
|
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div>
|
||||||
|
<p>Tworzy ona macierz rzutowania prostopadłego dla zadanych wymiarów. Musimy tak je dobrać, żeby rzutowanie zawierało całą interesującą scenę. Za małe wartości spowodują artefakty a za duże pogorszą jakość. Przykładowo możesz wziąć <code>glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 30.0f)</code>. Do stworzenia macierzy kamery wykorzystamy funkcję <code>glm::lookAt</code> z poniższymi argumentami argumentami</p>
|
||||||
|
<div class="sourceCode" id="cb7"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(<span class="dv">0</span>, <span class="dv">1</span>, <span class="dv">0</span>))</span></code></pre></div>
|
||||||
|
<h3 id="zadanie-2">Zadanie</h3>
|
||||||
|
<p>Uzupełnij funkcję <code>renderShadowapSun</code>. Wywołaj w niej instrukcje</p>
|
||||||
|
<div class="sourceCode" id="cb8"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a> <span class="co">//ustawianie przestrzeni rysowania </span></span>
|
||||||
|
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a> glViewport(<span class="dv">0</span>, <span class="dv">0</span>, SHADOW_WIDTH, SHADOW_HEIGHT);</span>
|
||||||
|
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a> <span class="co">//bindowanie FBO</span></span>
|
||||||
|
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a> glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);</span>
|
||||||
|
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a> <span class="co">//czyszczenie mapy głębokości </span></span>
|
||||||
|
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a> glClear(GL_DEPTH_BUFFER_BIT);</span>
|
||||||
|
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a> <span class="co">//ustawianie programu</span></span>
|
||||||
|
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a> glUseProgram(programDepth);</span></code></pre></div>
|
||||||
|
<p>Stwórz macierz <code>viewProjection</code></p>
|
||||||
|
<div class="sourceCode" id="cb9"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a> glm::mat4 lightVP = glm::ortho(-<span class="fl">10.</span><span class="bu">f</span>, <span class="fl">10.</span><span class="bu">f</span>, -<span class="fl">10.</span><span class="bu">f</span>, <span class="fl">10.</span><span class="bu">f</span>, <span class="fl">1.0</span><span class="bu">f</span>, <span class="fl">30.0</span><span class="bu">f</span>) * glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(<span class="dv">0</span>, <span class="dv">1</span>, <span class="dv">0</span>));</span></code></pre></div>
|
||||||
|
<p>następnie wywołaj <code>drawObjectDepth</code> dla każdego obiektu, który rysujemy w naszej scenie. wykorzystaj macierz <code>viewProjection</code> zdefiniowaną wyżej, użyj tej samej macierzy modelu co przy właściwym rysowaniu.</p>
|
||||||
|
<p>Zakończ funkcję linią <code>glBindFramebuffer(GL_FRAMEBUFFER, 0);</code>, która przywraca domyślny FBO.</p>
|
||||||
|
<h3 id="wizualizacja-mapy-głębokości">Wizualizacja mapy głębokości</h3>
|
||||||
|
<p>odkomentuj linie:</p>
|
||||||
|
<div class="sourceCode" id="cb10"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a> <span class="co">//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);</span></span>
|
||||||
|
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a> <span class="co">//glUseProgram(programTest);</span></span>
|
||||||
|
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a> <span class="co">//glActiveTexture(GL_TEXTURE0);</span></span>
|
||||||
|
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a> <span class="co">//glBindTexture(GL_TEXTURE_2D, depthMap);</span></span>
|
||||||
|
<span id="cb10-5"><a href="#cb10-5" aria-hidden="true" tabindex="-1"></a> <span class="co">//Core::DrawContext(models::testContext);</span></span></code></pre></div>
|
||||||
|
<p>znajdujące się w <code>renderScene</code>. Rysują one prostokąt z mapą głębokości jako teksturą. Jeżeli wszystko zostało wykonane poprawnie, to powinien on zawierać rzutowanie naszego pokoju.</p>
|
||||||
|
<h3 id="zadanie-3">Zadanie</h3>
|
||||||
|
<p>W tej chwili rzutowanie jest nieoptymalne. popraw je na lepsze. Zmodyfikuj wartości w <code>glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 30.0f)</code> do takich, żeby pokój wypełniał jak największą część tekstury.</p>
|
||||||
|
<h3 id="rysowanie-cieni">Rysowanie cieni</h3>
|
||||||
|
<p>Na tym etapie powinniśmy mieć poprawnie stworzoną mapę głębokości. Pozostaje wykorzystać ją w oświetleniu. ### Zadanie #### Przesłanie danych W funkcji <code>drawObjectPBR</code> prześlij teksturę za pomocą instrukcji:</p>
|
||||||
|
<div class="sourceCode" id="cb11"><pre class="sourceCode c++"><code class="sourceCode cpp"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a> glActiveTexture(GL_TEXTURE0);</span>
|
||||||
|
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a> glBindTexture(GL_TEXTURE_2D, depthMap);</span></code></pre></div>
|
||||||
|
<p>oraz macierz <code>LightVP</code>, która musi być taka sama jak w <code>drawObjectDepth</code>.</p>
|
||||||
|
<p>Następnie w shaderze wierzchołków odbierz <code>LightVP</code>.</p>
|
||||||
|
<h4 id="shader-wierzchołków">Shader wierzchołków</h4>
|
||||||
|
<p>Oblicz pozycję wierzchołka z perspektywy słońca <code>sunSpacePos=LightVP*modelMatrix*vec4(vertexPosition,1)</code>, wynik prześlij do shadera fragmentów #### Shader fragmentów odbierz <code>sunSpacePos</code> i napisz funkcję <code>calculateShadow</code>, która sprawdza czy obiekt jest zacieniony. Aby to zrobić kolejno w funkcji: * ujednorodnij zmienną <code>lightSpacePos</code> dzieląc ją przez współrzędną <strong>w</strong>, * przeskaluj ją, ma wartości od -1 do 1 a potrzebujemy wartości od 0 do 1 (pomnóż przez 0.5 i dodaj 0.5) wynik zapisz do zmiennej <code>lightSpacePosNormalized</code>, * pobierz głębokość z <code>depthMap</code> próbkuj za pomocą współrzędnych <strong>x</strong> i <strong>y</strong>. Pobierz tylko kanał <code>r</code>, zapisz go do zmiennej <code>closestDepth</code>, * porównaj <code>closestDepth</code> ze współrzędną <strong>z</strong> <code>lightSpacePosNormalized</code>. jeżeli <code>closestDepth</code> jest większa zwróć 1.0, w przeciwnym wypadku zwróć 0.0. * wynik funkcji przemnóż z <code>sunColor</code> w trakcie oblicznia.</p>
|
||||||
|
<pre><code> ilumination=ilumination+PBRLight(sunDir,sunColor,normal,viewDir);</code></pre>
|
||||||
|
<h4 id="shadow-acne">shadow acne</h4>
|
||||||
|
<p>Powinniśmy dostać cienie , jednak w niezacienionych strefach pojawiły się paski, które znane są jako <em>shadow acne</em> wynikają one z błędu przybliżenia liczb zmiennoprzecinkowych. Można się go pozbyć na dwa sposoby 1. dodać bias. zamiast sprawdzać <code>closestDepth<lightSpacePosNormalized</code> można wziąć <code>closestDepth+bias>lightSpacePosNormalized</code>, gdzie <code>bias</code> to mała wartość (np 0.01). 2. innym rozwiązaniem jest, żeby przy renderowaniu cieni włączyć front face culling. dzięki temu rysowane będą część modelu, które są dalej niż te, które odpytujemy.</p>
|
||||||
|
<h3 id="zadanie-4">Zadanie*</h3>
|
||||||
|
<p>Dodaj rysowane cieni również dla latarki doczepionej do statku. pamiętaj, że musisz wykorzystać tutaj macierz rzutowania perspektywicznego</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
158
cw 9/Zadania 9.md
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
# Shadow mapping
|
||||||
|
Cienie są ważnym elementem oświetlenie. Dodają realizmu do sceny i dzięki nim łatwiej jest graczowi zorientować się w przestrzennym rozłożeniu obiektów.
|
||||||
|
![](./img/shadows1.bmp)
|
||||||
|
Na powyższym obrazku możesz zobaczyć, że dużo łatwiej jest okreśłić położenie kostek, gdy rzucają one cienie. Podstawową techniką generowania cieni jest **shadow mapping** i wiele bardziej zaawansowanych technik na niej bazuje.
|
||||||
|
|
||||||
|
Składa się on z dwóch kroków. W pierwszym obliczamy mapy głębokości z perspektywy źródła światła i zapisaniu do tekstury (tą teksturę nazywamy *shadowmap*), w drugim przy rysowaniu fragmentu porównujemy jego odległość do źródła światła z odległością zapisaną w teksturze.
|
||||||
|
|
||||||
|
Celem tych zajęć będzie dodanie cieni do początkowej sceny. W obecnym projekcie są 3 źródła światła: światło słoneczne, reflektor samolociku i lampa planetarna. W trakcie zajęć skupimy się na świetle słonecznym.
|
||||||
|
|
||||||
|
## Mapa głębokości - Framebuffers
|
||||||
|
Framebuffer to obiekt, do którego rednerowana jest scena w postaci tekstury. Do tej pory korzystaliśmy z domyślnego Famebuffora, który był wyświetlany na ekranie. Teraz potrzebujemy dodatkowy, który będzie przechwytywał mapę głębokości. Tworzymy go w następujący sposób
|
||||||
|
|
||||||
|
```C++
|
||||||
|
glGenFramebuffers(1, &depthMapFBO);
|
||||||
|
```
|
||||||
|
Zmienna `depthMapFBO` jest jak to typu `unsignet int` i powinna być dostępna globalnie. Kolejnym krokiem jest stworzenie tekstury głębokości
|
||||||
|
```C++
|
||||||
|
glGenTextures(1, &depthMap);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, depthMap);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
|
||||||
|
SHADOW_WIDTH, SHADOW_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
```
|
||||||
|
Również zmienna `depthMap` jest jak to typu `unsignet int` i powinna być dostępna globalnie.
|
||||||
|
Tworzymy teksturę, zaznaczamy, że jest to tekstura głębokości nadając jej format `GL_DEPTH_COMPONENT`. Parametry `SHADOW_WIDTH`, `SHADOW_HEIGHT` są ustalone globalnie i oba wynoszą 1024.
|
||||||
|
|
||||||
|
I w końcu podpinamy teksturę pod FBO.
|
||||||
|
```C++
|
||||||
|
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthMap, 0);
|
||||||
|
glDrawBuffer(GL_NONE);
|
||||||
|
glReadBuffer(GL_NONE);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Zadanie
|
||||||
|
Utwórz funkcję `initDepthMap`, w której zainicjalizujesz mapę głębokości. Wywołaj ją w funkcji `init`.
|
||||||
|
|
||||||
|
### Renderowanie mapy głębokości
|
||||||
|
|
||||||
|
W tej części będziemy uzupełniać funkcję `renderShadowapSun`. Funkcja ma za zadanie zapisać w FBO mapę głębokości z perspektywy słońca.
|
||||||
|
Pierwsze co musimy mieć, to parę shaderów, która będzie renderować mapę. Ponieważ jedyne co potrzebujemy tylko rozmieścić obiekty w odpowiednich miejscach.
|
||||||
|
Shader wierzchołków ustawia tylko pozycję w oparciu o przesyłanie macierze.
|
||||||
|
```C++
|
||||||
|
#version 430 core
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 vertexPosition;
|
||||||
|
layout(location = 1) in vec3 vertexNormal;
|
||||||
|
layout(location = 2) in vec2 vertexTexCoord;
|
||||||
|
|
||||||
|
uniform mat4 viewProjectionMatrix;
|
||||||
|
uniform mat4 modelMatrix;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = viewProjectionMatrix * modelMatrix * vec4(vertexPosition, 1.0);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Natomiast shader fragmentów jest pusty, ponieważ nic nie wysyłamy a głębokość zapisywana jest automatycznie.
|
||||||
|
```C++
|
||||||
|
#version 430 core
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
```
|
||||||
|
### Zadanie
|
||||||
|
Dodaj utwórz parę shaderów jak powyżej, załaduj je do zmiennej globalnej o nazwie `programDepth` i aktywuj go w funkcji `renderShadowapSun`. Utwórz funkcję `drawObjectDepth`. która będzie przyjmować referencję do `RenderContext`, macierz `viewProjection` i macierz modelu oraz przesyłać macierze do GPU i rysować `RenderContext`
|
||||||
|
|
||||||
|
Musimy zdefiniować macierz widoku i rzutowania, które mamy przesłać. Implementujemy cienie dla oświetlenia kierunkowego, gdzie dla każdego punktu kierunek światła jest taki sam. W takim wypadku skorzystamy z rzutowania prostopadłego.
|
||||||
|
![](./img/shadow_mapping_projection.png)
|
||||||
|
|
||||||
|
Do stworzenia macierzy rzutowania perspektywicznego wykorzystamy funkcję:
|
||||||
|
```C++
|
||||||
|
glm::mat4 lightProjection = glm::ortho(
|
||||||
|
float left,
|
||||||
|
float right,
|
||||||
|
float bottom,
|
||||||
|
float top,
|
||||||
|
float zNear,
|
||||||
|
float zFar
|
||||||
|
)
|
||||||
|
```
|
||||||
|
Tworzy ona macierz rzutowania prostopadłego dla zadanych wymiarów. Musimy tak je dobrać, żeby rzutowanie zawierało całą interesującą scenę. Za małe wartości spowodują artefakty a za duże pogorszą jakość. Przykładowo możesz wziąć `glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 30.0f)`.
|
||||||
|
Do stworzenia macierzy kamery wykorzystamy funkcję `glm::lookAt` z poniższymi argumentami argumentami
|
||||||
|
```C++
|
||||||
|
glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(0, 1, 0))
|
||||||
|
```
|
||||||
|
### Zadanie
|
||||||
|
Uzupełnij funkcję `renderShadowapSun`. Wywołaj w niej instrukcje
|
||||||
|
```C++
|
||||||
|
//ustawianie przestrzeni rysowania
|
||||||
|
glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT);
|
||||||
|
//bindowanie FBO
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
|
||||||
|
//czyszczenie mapy głębokości
|
||||||
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
|
//ustawianie programu
|
||||||
|
glUseProgram(programDepth);
|
||||||
|
```
|
||||||
|
Stwórz macierz `viewProjection`
|
||||||
|
```C++
|
||||||
|
glm::mat4 lightVP = glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 30.0f) * glm::lookAt(sunPos, sunPos - sunDir, glm::vec3(0, 1, 0));
|
||||||
|
```
|
||||||
|
następnie wywołaj `drawObjectDepth` dla każdego obiektu, który rysujemy w naszej scenie. wykorzystaj macierz `viewProjection` zdefiniowaną wyżej, użyj tej samej macierzy modelu co przy właściwym rysowaniu.
|
||||||
|
|
||||||
|
Zakończ funkcję linią `glBindFramebuffer(GL_FRAMEBUFFER, 0);`, która przywraca domyślny FBO.
|
||||||
|
|
||||||
|
### Wizualizacja mapy głębokości
|
||||||
|
odkomentuj linie:
|
||||||
|
```C++
|
||||||
|
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
//glUseProgram(programTest);
|
||||||
|
//glActiveTexture(GL_TEXTURE0);
|
||||||
|
//glBindTexture(GL_TEXTURE_2D, depthMap);
|
||||||
|
//Core::DrawContext(models::testContext);
|
||||||
|
```
|
||||||
|
znajdujące się w `renderScene`. Rysują one prostokąt z mapą głębokości jako teksturą. Jeżeli wszystko zostało wykonane poprawnie, to powinien on zawierać rzutowanie naszego pokoju.
|
||||||
|
|
||||||
|
### Zadanie
|
||||||
|
W tej chwili rzutowanie jest nieoptymalne. popraw je na lepsze. Zmodyfikuj wartości w `glm::ortho(-10.f, 10.f, -10.f, 10.f, 1.0f, 30.0f)` do takich, żeby pokój wypełniał jak największą część tekstury.
|
||||||
|
|
||||||
|
### Rysowanie cieni
|
||||||
|
Na tym etapie powinniśmy mieć poprawnie stworzoną mapę głębokości. Pozostaje wykorzystać ją w oświetleniu.
|
||||||
|
### Zadanie
|
||||||
|
#### Przesłanie danych
|
||||||
|
W funkcji `drawObjectPBR` prześlij teksturę za pomocą instrukcji:
|
||||||
|
```C++
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, depthMap);
|
||||||
|
```
|
||||||
|
oraz macierz `LightVP`, która musi być taka sama jak w `drawObjectDepth`.
|
||||||
|
|
||||||
|
Następnie w shaderze wierzchołków odbierz `LightVP`.
|
||||||
|
|
||||||
|
#### Shader wierzchołków
|
||||||
|
Oblicz pozycję wierzchołka z perspektywy słońca `sunSpacePos=LightVP*modelMatrix*vec4(vertexPosition,1)`, wynik prześlij do shadera fragmentów
|
||||||
|
#### Shader fragmentów
|
||||||
|
odbierz `sunSpacePos` i napisz funkcję `calculateShadow`, która sprawdza czy obiekt jest zacieniony. Aby to zrobić kolejno w funkcji:
|
||||||
|
* ujednorodnij zmienną `lightSpacePos` dzieląc ją przez współrzędną **w**,
|
||||||
|
* przeskaluj ją, ma wartości od -1 do 1 a potrzebujemy wartości od 0 do 1 (pomnóż przez 0.5 i dodaj 0.5) wynik zapisz do zmiennej `lightSpacePosNormalized`,
|
||||||
|
* pobierz głębokość z `depthMap` próbkuj za pomocą współrzędnych **x** i **y**. Pobierz tylko kanał `r`, zapisz go do zmiennej `closestDepth`,
|
||||||
|
* porównaj `closestDepth` ze współrzędną **z** `lightSpacePosNormalized`. jeżeli `closestDepth` jest większa zwróć 1.0, w przeciwnym wypadku zwróć 0.0.
|
||||||
|
* wynik funkcji przemnóż z `sunColor` w trakcie oblicznia.
|
||||||
|
```
|
||||||
|
ilumination=ilumination+PBRLight(sunDir,sunColor,normal,viewDir);
|
||||||
|
```
|
||||||
|
#### shadow acne
|
||||||
|
Powinniśmy dostać cienie , jednak w niezacienionych strefach pojawiły się paski, które znane są jako *shadow acne* wynikają one z błędu przybliżenia liczb zmiennoprzecinkowych. Można się go pozbyć na dwa sposoby
|
||||||
|
1. dodać bias. zamiast sprawdzać `closestDepth<lightSpacePosNormalized` można wziąć `closestDepth+bias>lightSpacePosNormalized`, gdzie `bias` to mała wartość (np 0.01).
|
||||||
|
2. innym rozwiązaniem jest, żeby przy renderowaniu cieni włączyć front face culling. dzięki temu rysowane będą część modelu, które są dalej niż te, które odpytujemy.
|
||||||
|
|
||||||
|
### Zadanie*
|
||||||
|
Dodaj rysowane cieni również dla latarki doczepionej do statku. pamiętaj, że musisz wykorzystać tutaj macierz rzutowania perspektywicznego
|
BIN
cw 9/assimp-vc141-mt.dll
Normal file
BIN
cw 9/assimp-vc141-mtd.dll
Normal file
BIN
cw 9/cubemap.png
Normal file
After Width: | Height: | Size: 355 KiB |
BIN
cw 9/freeglut.dll
Normal file
BIN
cw 9/glew32.dll
Normal file
134
cw 9/grk-cw9.vcxproj
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="src\Box.cpp" />
|
||||||
|
<ClCompile Include="src\Camera.cpp" />
|
||||||
|
<ClCompile Include="src\main.cpp" />
|
||||||
|
<ClCompile Include="src\Render_Utils.cpp" />
|
||||||
|
<ClCompile Include="src\Shader_Loader.cpp" />
|
||||||
|
<ClCompile Include="src\SOIL\image_DXT.c" />
|
||||||
|
<ClCompile Include="src\SOIL\image_helper.c" />
|
||||||
|
<ClCompile Include="src\SOIL\SOIL.c" />
|
||||||
|
<ClCompile Include="src\SOIL\stb_image_aug.c" />
|
||||||
|
<ClCompile Include="src\Texture.cpp" />
|
||||||
|
<ClCompile Include="src\TriangleSoup.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\Camera.h" />
|
||||||
|
<ClInclude Include="src\ex_9_1.hpp" />
|
||||||
|
<ClInclude Include="src\objload.h" />
|
||||||
|
<ClInclude Include="src\Render_Utils.h" />
|
||||||
|
<ClInclude Include="src\Shader_Loader.h" />
|
||||||
|
<ClInclude Include="src\SOIL\image_DXT.h" />
|
||||||
|
<ClInclude Include="src\SOIL\image_helper.h" />
|
||||||
|
<ClInclude Include="src\SOIL\SOIL.h" />
|
||||||
|
<ClInclude Include="src\SOIL\stbi_DDS_aug.h" />
|
||||||
|
<ClInclude Include="src\SOIL\stbi_DDS_aug_c.h" />
|
||||||
|
<ClInclude Include="src\SOIL\stb_image_aug.h" />
|
||||||
|
<ClInclude Include="src\Texture.h" />
|
||||||
|
<ClInclude Include="src\TriangleSoup.hpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="shaders\shader_9_1.frag" />
|
||||||
|
<None Include="shaders\shader_9_1.vert" />
|
||||||
|
<None Include="shaders\shader_8_sun.frag" />
|
||||||
|
<None Include="shaders\shader_8_sun.vert" />
|
||||||
|
<None Include="shaders\shader_shadowap_sun.frag" />
|
||||||
|
<None Include="shaders\shader_shadowap_sun.vert" />
|
||||||
|
<None Include="shaders\shader_skybox.frag" />
|
||||||
|
<None Include="shaders\shader_skybox.vert" />
|
||||||
|
<None Include="shaders\shader_water.frag" />
|
||||||
|
<None Include="shaders\shader_water.vert" />
|
||||||
|
<None Include="shaders\test.frag" />
|
||||||
|
<None Include="shaders\test.vert" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{5BACD057-4B83-4CB6-A367-40A10BCE2149}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>grk-cw9</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
<ProjectName>grk-cw9</ProjectName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<LibraryPath>$(SolutionDir)dependencies\freeglut\lib;$(SolutionDir)dependencies\glew-2.0.0\lib\Release\Win32;$(SolutionDir)dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019;$(SolutionDir)dependencies\assimp;$(LibraryPath)</LibraryPath>
|
||||||
|
<IncludePath>$(SolutionDir)dependencies\freeglut\include\GL;$(SolutionDir)dependencies\glew-2.0.0\include\GL;$(SolutionDir)dependencies\glm;$(SolutionDir)dependencies\glfw-3.3.8.bin.WIN32\include;$(SolutionDir)dependencies\assimp\include;$(IncludePath)</IncludePath>
|
||||||
|
<ExecutablePath>$(ExecutablePath)</ExecutablePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<LibraryPath>$(SolutionDir)dependencies\freeglut\lib;$(SolutionDir)dependencies\glew-2.0.0\lib\Release\Win32;$(SolutionDir)dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019;$(SolutionDir)dependencies\assimp;$(LibraryPath)</LibraryPath>
|
||||||
|
<IncludePath>$(SolutionDir)dependencies\freeglut\include\GL;$(SolutionDir)dependencies\glew-2.0.0\include\GL;$(SolutionDir)dependencies\glm;$(SolutionDir)dependencies\glfw-3.3.8.bin.WIN32\include;$(SolutionDir)dependencies\assimp\include;$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>opengl32.lib;freeglut.lib;glew32.lib;$(SolutionDir)\dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019\glfw3.lib;$(SolutionDir)\dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019\glfw3dll.lib;zlibd.lib;assimp-vc141-mtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalDependencies>opengl32.lib;freeglut.lib;glew32.lib;$(SolutionDir)\dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019\glfw3.lib;$(SolutionDir)\dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019\glfw3dll.lib;zlibd.lib;assimp-vc141-mtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)dependencies\glfw-3.3.8.bin.WIN32\lib-vc2019;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
137
cw 9/grk-cw9.vcxproj.filters
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Shader Files">
|
||||||
|
<UniqueIdentifier>{0a247bb8-2e8e-4a90-b0ef-17415b0941ba}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files\SOIL">
|
||||||
|
<UniqueIdentifier>{0af44075-33f4-4953-b1d6-1d28d61d758f}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="src\Render_Utils.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\Shader_Loader.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\Box.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\Camera.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\main.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\Texture.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\SOIL\SOIL.c">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\SOIL\stb_image_aug.c">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\SOIL\image_DXT.c">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\SOIL\image_helper.c">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\TriangleSoup.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\objload.h">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\Render_Utils.h">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\Shader_Loader.h">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\Camera.h">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\Texture.h">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\SOIL\image_helper.h">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\SOIL\SOIL.h">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\SOIL\stb_image_aug.h">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\SOIL\stbi_DDS_aug.h">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\SOIL\stbi_DDS_aug_c.h">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\SOIL\image_DXT.h">
|
||||||
|
<Filter>Source Files\SOIL</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\ex_9_1.hpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\TriangleSoup.hpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="shaders\shader_8_sun.vert">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_8_sun.frag">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_9_1.frag">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_9_1.vert">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\test.frag">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\test.vert">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_skybox.frag">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_skybox.vert">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_shadowap_sun.frag">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_shadowap_sun.vert">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_water.frag">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="shaders\shader_water.vert">
|
||||||
|
<Filter>Shader Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
4
cw 9/grk-cw9.vcxproj.user
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup />
|
||||||
|
</Project>
|
BIN
cw 9/img/2.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
cw 9/img/3.webp
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
cw 9/img/384px-PerlinNoiseDotProducts.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
cw 9/img/384px-PerlinNoiseInterpolated.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
cw 9/img/4.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
cw 9/img/5.webp
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
cw 9/img/6.webp
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
cw 9/img/7.webp
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
cw 9/img/8.webp
Normal file
After Width: | Height: | Size: 34 KiB |
1254
cw 9/img/Figure_1.eps
Normal file
BIN
cw 9/img/PerlinNoiseDotProducts.png
Normal file
After Width: | Height: | Size: 178 KiB |
BIN
cw 9/img/PerlinNoiseGradientGrid.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
cw 9/img/PerlinNoiseInterpolated.png
Normal file
After Width: | Height: | Size: 144 KiB |
BIN
cw 9/img/blending1.webp
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
cw 9/img/camera.jpg
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
cw 9/img/capture.webm
Normal file
BIN
cw 9/img/coordinate_systems.jpg
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
cw 9/img/cubemaps_sampling.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
cw 9/img/gamma_correction_brightness.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
cw 9/img/lighting_result.png
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
cw 9/img/noise_examples.jpg
Normal file
After Width: | Height: | Size: 329 KiB |
BIN
cw 9/img/shadow_mapping_projection.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
cw 9/img/shadows1.bmp
Normal file
After Width: | Height: | Size: 978 KiB |
BIN
cw 9/img/spotlight.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
cw 9/img/stride_offest.jpg
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
cw 9/img/stride_offest_2_2.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
cw 9/img/struktura.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
cw 9/img/sun.png
Normal file
After Width: | Height: | Size: 2.0 MiB |