A couple years ago, Bananmos expressed disappointment that my Russian Roulette tech demo was text-based. Around the same time, I started learning to use Blender. So lately I've been doing some 3D modeling for a graphical refresh, when I noticed this:
The video chips in several classic consoles from the ColecoVision through the Super NES all output pixels at 315/88*3/2 = 5.37 MHz. At this dot rate, the BT.601 clean aperture* is 280x240 dots, making each dot an 8:7 rectangle (source).
The right triangle with legs 1 and 2 units has a hypotenuse √5 = 2.236 units, and the smallest angle θ is arctan(1/2) = 26.565°.
Now take an orthographic projection of 3D space into 2D and rotate it so that the camera points 26.565 degrees down. Adding the plane of the camera to the diagram produces this view, seen from the left side:
At this angle, a vector two units back and a second vector one unit up would project to the same length. This length is slightly smaller than the length of a vector along the plane, just as the long leg of the triangle is slightly smaller than the hypotenuse.
How much smaller? For an angle with tangent t and cosine c, it is a trigonometric identity 1 + t² = 1/c². But the above triangle was designed such that tan θ = 1/2. So if the hypotenuse of the above triangle is 1 unit, the long leg is 2√5/5 = 0.8944. This is just 2% longer than 0.875, the height of a scanline in pixel-widths. So at this angle, 16 pixels to the right, 16 pixels up, and 8 pixels front to back represent very close to the same distance.
And this is how the viewpoint works in a lot of "isometric" games for these consoles, such as Snake Rattle 'n Roll, Solstice, and the Genesis version of Viewpoint.
Should I also run the analysis for a different angle that might work better for the 320x224 mode of the Genesis and PS1 (clean aperture is 350x240) and quarter D1 (352x240)?
And this is what I came up with in Blender:
* In before kyuusaku mentions pre-BT.601 standards.
The video chips in several classic consoles from the ColecoVision through the Super NES all output pixels at 315/88*3/2 = 5.37 MHz. At this dot rate, the BT.601 clean aperture* is 280x240 dots, making each dot an 8:7 rectangle (source).
The right triangle with legs 1 and 2 units has a hypotenuse √5 = 2.236 units, and the smallest angle θ is arctan(1/2) = 26.565°.
Code:
_,o
_,-' |
_,-' |
_,-' θ) |
o-------o-------o
_,-' |
_,-' |
_,-' θ) |
o-------o-------o
Now take an orthographic projection of 3D space into 2D and rotate it so that the camera points 26.565 degrees down. Adding the plane of the camera to the diagram produces this view, seen from the left side:
Code:
\
\
\
_,o
_,-' |\
_,-' | \
_,-' θ) | \
o-------o-------o
\
\
_,o
_,-' |\
_,-' | \
_,-' θ) | \
o-------o-------o
At this angle, a vector two units back and a second vector one unit up would project to the same length. This length is slightly smaller than the length of a vector along the plane, just as the long leg of the triangle is slightly smaller than the hypotenuse.
How much smaller? For an angle with tangent t and cosine c, it is a trigonometric identity 1 + t² = 1/c². But the above triangle was designed such that tan θ = 1/2. So if the hypotenuse of the above triangle is 1 unit, the long leg is 2√5/5 = 0.8944. This is just 2% longer than 0.875, the height of a scanline in pixel-widths. So at this angle, 16 pixels to the right, 16 pixels up, and 8 pixels front to back represent very close to the same distance.
And this is how the viewpoint works in a lot of "isometric" games for these consoles, such as Snake Rattle 'n Roll, Solstice, and the Genesis version of Viewpoint.
Should I also run the analysis for a different angle that might work better for the 320x224 mode of the Genesis and PS1 (clean aperture is 350x240) and quarter D1 (352x240)?
And this is what I came up with in Blender:
* In before kyuusaku mentions pre-BT.601 standards.