Difference between revisions of "Advanced C++ Programming Tutorial 2"
From Chilipedia
(→Video Timestamp Index) |
(→Video Timestamp Index) |
||
Line 17: | Line 17: | ||
== Video Timestamp Index == | == Video Timestamp Index == | ||
[https://youtu.be/8_U_pake6J0 Tutorial 2.1] | [https://youtu.be/8_U_pake6J0 Tutorial 2.1] | ||
+ | <div class="mw-collapsible mw-collapsed"><br /> | ||
* What are transformations? [https://youtu.be/8_U_pake6J0?t=0m26s 0:26] | * What are transformations? [https://youtu.be/8_U_pake6J0?t=0m26s 0:26] | ||
* Storing vertices and drawing polygons/polylines [https://youtu.be/8_U_pake6J0?t=1m00s 1:00] | * Storing vertices and drawing polygons/polylines [https://youtu.be/8_U_pake6J0?t=1m00s 1:00] | ||
+ | <div class="mw-collapsible-content"> | ||
:* Implementing <code>Graphics::DrawClosedPolyline()</code> [https://youtu.be/8_U_pake6J0?t=2m30s 2:30] | :* Implementing <code>Graphics::DrawClosedPolyline()</code> [https://youtu.be/8_U_pake6J0?t=2m30s 2:30] | ||
:* Introducing a <code>Star</code> polygon generator class [https://youtu.be/8_U_pake6J0?t=3m40s 3:40] | :* Introducing a <code>Star</code> polygon generator class [https://youtu.be/8_U_pake6J0?t=3m40s 3:40] | ||
+ | </div> | ||
* Clipping (trivial implementation) [https://youtu.be/8_U_pake6J0?t=4m33s 4:22] | * Clipping (trivial implementation) [https://youtu.be/8_U_pake6J0?t=4m33s 4:22] | ||
+ | <div class="mw-collapsible-content"> | ||
:* For more advanced line clipping, you can use the Cohen-Sutherland line clipping algorithm | :* For more advanced line clipping, you can use the Cohen-Sutherland line clipping algorithm | ||
+ | </div> | ||
* Translation: moving your model on the screen [https://youtu.be/8_U_pake6J0?t=6m13s 6:13] | * Translation: moving your model on the screen [https://youtu.be/8_U_pake6J0?t=6m13s 6:13] | ||
* Coordinate systems: screen vs. world (/math model) coordinates [https://youtu.be/8_U_pake6J0?t=7m09s 7:09] | * Coordinate systems: screen vs. world (/math model) coordinates [https://youtu.be/8_U_pake6J0?t=7m09s 7:09] | ||
+ | <div class="mw-collapsible-content"> | ||
:* Implementing a Coordinate Transformer class [https://youtu.be/8_U_pake6J0?t=8m25s 8:25] | :* Implementing a Coordinate Transformer class [https://youtu.be/8_U_pake6J0?t=8m25s 8:25] | ||
::- Essentially this is a "screen translator"; a structured way to apply transformations | ::- Essentially this is a "screen translator"; a structured way to apply transformations | ||
::- analogy of an "assembly line", this will be developed into a Pipeline system | ::- analogy of an "assembly line", this will be developed into a Pipeline system | ||
+ | </div> | ||
* Implementing a persistant <code>Entity</code> class to hold models [https://youtu.be/8_U_pake6J0?t=13m37s 13:37] | * Implementing a persistant <code>Entity</code> class to hold models [https://youtu.be/8_U_pake6J0?t=13m37s 13:37] | ||
* Integrating Entity control <code>Game::UpdateModel()</code> (the game loop) [https://youtu.be/8_U_pake6J0?t=16m06s 16:06] | * Integrating Entity control <code>Game::UpdateModel()</code> (the game loop) [https://youtu.be/8_U_pake6J0?t=16m06s 16:06] | ||
+ | <div class="mw-collapsible-content"> | ||
:* Reasons for keeping a static model: avoid floating point calculation drift [https://youtu.be/8_U_pake6J0?t=16m30s 16:30] | :* Reasons for keeping a static model: avoid floating point calculation drift [https://youtu.be/8_U_pake6J0?t=16m30s 16:30] | ||
+ | </div> | ||
* Scaling polylines [https://youtu.be/8_U_pake6J0?t=18m36s 18:36] | * Scaling polylines [https://youtu.be/8_U_pake6J0?t=18m36s 18:36] | ||
+ | <div class="mw-collapsible-content"> | ||
:* Note: Rotations will be covered in a later tutorial | :* Note: Rotations will be covered in a later tutorial | ||
:* Note: Scaling sprites requires more advanced techniques | :* Note: Scaling sprites requires more advanced techniques | ||
− | + | </div> | |
+ | </div> | ||
[https://youtu.be/ARCytFIwis8 Tutorial 2.2] | [https://youtu.be/ARCytFIwis8 Tutorial 2.2] |
Revision as of 07:38, 29 March 2020
In this tutorial we learn how to transform our shit. Move it around, make it bigger (no pills or pumps required), flip it and reverse it. And later on we make a camera system to scroll our shit in the world. You're gonna like it.
Topics
Part 1
- Polyline drawing
- Vertices
- Trivial line clipping
- Translation
- Flipping across an axis
- Screen coordinate transformation
- Scaling
Part 2
- Camera scrolling
- Concatenating (combining) transforms
-
Drawable
packet design
Video Timestamp Index
- Clipping (trivial implementation) 4:22
- For more advanced line clipping, you can use the Cohen-Sutherland line clipping algorithm
- Translation: moving your model on the screen 6:13
- Coordinate systems: screen vs. world (/math model) coordinates 7:09
- Implementing a Coordinate Transformer class 8:25
- - Essentially this is a "screen translator"; a structured way to apply transformations
- - analogy of an "assembly line", this will be developed into a Pipeline system
- Implementing a persistant
Entity
class to hold models 13:37 - Integrating Entity control
Game::UpdateModel()
(the game loop) 16:06
- Reasons for keeping a static model: avoid floating point calculation drift 16:30
- Scaling polylines 18:36
- Note: Rotations will be covered in a later tutorial
- Note: Scaling sprites requires more advanced techniques
- WORK-IN-PROGRESS
Links
Homework
- Create random starfield in large rectangular region with randomized positions, sizes, and shapes. Stars should not overlap.
- Implement scrolling via mouse dragging.
- Process vertices in-place (don't use a buffered polyline copy).
- Only draw models that appear in the viewport.
- Animate the scale (size) and color of stars so that they pulsate.
The Homework solution is here.