[video output=day092 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Filling Rotated and Scaled Rectangles" vod_platform=youtube id=kVU_QIxm3AA annotator=Miblo annotator=dspecht annotator=ZedZull]
[0:23][Recap of people egging Casey on to do some weird sine-cosine-theta stuff][quote 50]
[1:36][Blackboard: Introduce effects]
[4:39][Blackboard: How do we do this rotation and scaling?]
[5:29][Run the game]
[5:51][Clip away all this ridiculousness]
[6:32][Look at the coordinate system]
[7:13][Blackboard: We need to know which pixels will be included as a result of rotating a rectangle]
[8:35][Blackboard: How the collision detection system may be applicable to pixel filling]
[9:51][Blackboard: Ignoring rotation and scaling for now]
[12:34][Blackboard: Iterating over the pixels]
[13:44][Look at the DrawRectangle routine]
[14:22][Write a function, DrawRectangleSlowly, that does DrawRectangle in the least efficient way possible]
[16:43][Draw a rectangle that's at the origin of the CoordinateSystem]
[18:11][See the results in-game]
[18:23][Stop it rotating for the moment]
[18:41][Check the scaling of the axes]
[19:54][DrawRectangle after the fact in a different Color]
[20:31][Note that the rectangle is not properly clipping to its max bounds, and rectify this]
[21:11][Moment of realisation: We were adding Entry->Origin twice]
[21:27][We're filling correctly but inefficiently]
[21:58][Consider restricting the area that DrawRectangleSlowly marches over]
[22:21][Blackboard: How does that help us do our rotation and scaling?]
[23:25][Blackboard: Can't we just test against four corners of our rectangle?]
[24:35][Blackboard: How we could have done that without Casey's help]
[28:55][Implement one of these edge tests]
[29:50][Make DrawRectangleSlowly take all of the coordinate system information]
[30:57][Make DrawRectangleSlowly do the edge tests using the dot product]
[32:18][Blackboard: Rephrase these edge tests]
[32:57][Turn the test around]
[34:03][Notice that, because we're not doing the dot product, the sign doesn't flip]
[34:33][Make greater-than be our standard]
[35:03][Blackboard: Think of the surface normals pointing outwards]
[35:20][Change all of those edge functions to be negative]
[36:10][Get the dot product in there]
[36:43][Blackboard: What are the vectors of those perpendiculars?]
[37:29][Implement those vectors]
[38:40][Now we're doing the full test, see how it looks in-game]
[38:59][Consider changing the edge tests to use the edges of the rotating coordinate system]
[39:20][Blackboard: How to use those edges]
[39:42][Get rid of vMin and vMax in readiness to use those edges]
[39:57][Blackboard: Our tests]
[40:35][Implement those tests]
[42:11][Compile and view the results in-game]
[42:48][Change the scale over time]
[43:04][Blackboard: Optimising these tests]
[44:12][Implement optimised exclusion tests]
[50:20][Fix a couple of things, but not before filling everywhere in the bounding region]
[50:58][Check the code]
[51:40][Find our typo and restore our buffer pre-step]
[52:15][Re-enable our edge test and consider further work]
[53:08][Q&A][:speech]
[53:54][@d7samurai][What are your computer specs?]
[55:14][@powerc9k][Is it weird that I got really excited once the rotated fill got faster?]
[56:06][@wardinsc][Would skewing the axes still work?]
[57:37][Implement a proper perpendicular]
[59:38][Blackboard: How we want the Perp to work]
[1:00:26][Make that Perp work]
[1:01:13][@ttbjm][Is downscaling bitmaps correctly slower than upscaling (more colour points to blend)?]
[1:01:45][Blackboard: Downsampling and upsampling bitmaps]
[1:04:05][Blackboard: Mipmaps]
[1:05:33][@cubercaleb][Eventually, will you implement anti-aliasing into the rendering of the rectangle, or is that too much for the CPU?]
[1:06:07][Blackboard: Texture sampling handles anti-aliasing for the alpha'd bitmaps]
[1:07:57][Check out our hilarious little shape and review our progress]
[1:09:37][@garlandobloom][Historically, did we ever do anti-aliasing with CPU rendering?]
[1:11:52][Postpone anything more until tomorrow, with a potential plan of action][:speech]
[/video]
