Difference between revisions of "3D Fundamentals Tutorial 9"
From Chilipedia
(→Video) |
(→Video) |
||
| Line 43: | Line 43: | ||
:* Coding the scene class </code>CubeVertexColorScene.h</code> [https://youtu.be/pef2405M-os?t=14m13s 14:13] | :* Coding the scene class </code>CubeVertexColorScene.h</code> [https://youtu.be/pef2405M-os?t=14m13s 14:13] | ||
* Making a new <code>Effect</code>: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47] | * Making a new <code>Effect</code>: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47] | ||
| + | :* Need to address the issue: we can't store color data in the 8 unique cube vertices | ||
| + | :* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22] | ||
| + | ::- This requires 6 faces x 4 vertices per face = 24 vertices | ||
| + | :* Definition of <code>SolidEffect.h</code> (without interpolation of colors) | ||
| + | :* Adding a static function <code>GetPlainIndependentFaces()</code> to <code>Cube.h</code> to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15] | ||
| + | |||
| + | |||
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20] | * ... [https://youtu.be/pef2405M-os?t=0m20s 0:20] | ||
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20] | * ... [https://youtu.be/pef2405M-os?t=0m20s 0:20] | ||
Revision as of 20:18, 1 June 2020
In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).
Video
The tutorial video is on YouTube here.
- What is a Pixel Shader and why is it used? 0:20
- We want to make color mapping of the triangles in the rendering pipeline configurable
- One way is to use templated function objects (functors) as "plug-in" code
- These functors determine the color of the pixel based on their input
- Refactoring of the
gfx.PutPixel(...)function inPipeline.h2:04
- This is where we are ultimately determining the color of the pixel
- Inside the PutPixel function, we want to call a shader object that defines the coloring behavior
- Implementation of the programmable pixel shader stage in the pipeline 3:11
- We template the pipeline class on an
<class Effect> - We will adjust the definition of the
Vertexclass depending on what effect we are using - We adjust
gfx.PutPixel(...)to take a pixel shader object, and call the function operator with the interpolated Vertex data:
gfx.PutPixel( x,y,effect.ps( iLine ) );
- Changes to the
Pipelineclass 5:37
- - The
Pipelineobject now holds anEffectobject (which holds all shader data and methods) - - Coding the
Effectclass 6:03 - - Coding the
PixelShaderclass 6:22
- Putting it all together in a new
CubeSkinScene.hclass 7:26
- - The code now renders the same scene, but has become completely configurable
- We template the pipeline class on an
- Making a new
Effect: Color Blending 8:31
- The
VertexColorEffectfunctor will not hold a texture and return interpolated texture coordinates - Instead, it interpolates colors operating on a
Vec3object that holds RGB values (we encode the Vertex colors as floats) - Cube definition now needs to hold color data of each Vertex 10:07
- We need a conversion operator and a conversion constructor to translate between the
Vec3andColorrepresentation of colors 11:12 - Changes to the
Pipelineclass: generalizing Vertex transformations (independent of the pixel shader effect) 11:45 - Adding a static function
GetPlain()inCube.hto get the Vertex colors 13:39
template<class V> static IndexedTriangleList<V> GetPlain(float size = 1.0f) {...}
- Coding the scene class </code>CubeVertexColorScene.h</code> 14:13
- The
- Making a new
Effect: Solid Colors 14:47
- Need to address the issue: we can't store color data in the 8 unique cube vertices
- Solution: make the faces of the cube independent (no shared vertices) 16:22
- - This requires 6 faces x 4 vertices per face = 24 vertices
- Definition of
SolidEffect.h(without interpolation of colors) - Adding a static function
GetPlainIndependentFaces()toCube.hto get the 24 vertices 18:15
Downloads
The GitHub repository for the tutorial code is here.