[Freeciv-Dev] perspectives, tiles, and views
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
The freeciv drawing code is rather monolithic and hard to change.
However within that framework there is a lot of flexibility to allow for
different perspectives. Most of these have never been tested (there are
only 3 perspectives that we've ever used AFAIK), but I believe they
should all be possible.
All perspectives must be orthogonal. This means there is no dimension
of distance; things far away look just the same size as things close.
By comparison a true 3d game usually does not have an orthogonal
perspective, it presents a "true" perspective where far away things are
smaller.
There are two basic perspectives.
* Overhead perspective. Here the perspective is orthogonal (of course)
of an observer directly above the tiles. In this case the graphics are
usually drawn as from a side view (since an overhead view of a unit, for
instance, would be pretty useless).
* Isometric perspective. Here the perspective is orthogonal (of course)
of an observer a a 30-degree (pi/6) angle above the ground (60 degrees
away from on overhead view). The effect of this perspective is that
things are quashed by a factor of 2 in the vertical direction. Of
course angles other than 30 degrees are possible...in theory we could
give any angle and simply take the sine of it to find the quashing
factor for the Y direction.
And there are four basic tile shapes that we can support (really these
are just different rotations of 2 different tile shapes, and triangles -
the third possible shape - are ignored).
* Square. Each tile is a square, view head-on. (It could be a
rectangle as well). This will look best in overhead view because, well,
it's a square.
* Diamond. Each tile is a diamond - a rotated square with all 90-degree
angles and all sides equal. (It can be squashed in one direction to
make it a rhombus with equal angles along opposite corners.) This will
look best in isometric view because there's a lot of vertical overlap
between tiles (each tile is wide but not very tall along most of its
width, so an isometric perspective allows 3d effects of one tile to
cover just the extremeties of the adjacent tiles behind it).
* Hex 1, aka "hex", aka "flat hex". Each tile is a hexagon with flat
edges along the top and bottom and two angled edges along each side.
The hexagon can be regular or it can be not-quite-regular. A regular
hexagon will have irrational dimensions (which will just be rounded off
of course). Good choices for irregular hexagons have their top/bottom
"base" edges taking up either 1/3 (as in isophex) or 1/2 (as in wesnoth)
of the total width of the hexagonal area. A wider base is better for an
overhead perspective (as in wesnoth and isophex) since it makes the
hexagon more square-like. A narrower base is better for an isometric
perspective since it gives more vertical overlap between tiles.
* Hex 2, aka "hex", aka "iso-hex". Each tile is again a hexagon, but
now there are vertical edges along the left and right and two angled
edges each on top and bottom. Again there is the choice of regular or
irregular hexagons. Because there is more vertical overlap it is better
for an isometric perspective.
Now, what can we do with this information? Currently we have three
different "views" (combinations of perspective and tiling).
* Classic view is a rectangle with overhead perspective.
* Iso-view is a diamond with isometric perspective.
* Hex-view (isophex) is an irregular hex1 with an overhead (?) perspective.
First of all, I think hex-view (isophex) should not use the 1/3 base
width (hex_side is 1/4 of tile width). It should either have a 1/2 base
width like in wesnoth (hex_side is 1/3 of tile width) or it should be a
regular hexagon. Possibilities for a 1/2 base width are a 54x36 tileset
with a hex_size of 18 (972 pixels/tile, comparable to trident), a 72x48
tileset with hex_side or 24 (1728 pixels/tile) or a 108x72 tileset with
hex_side of 36 (3888 pixels/tile, same as wesnoth). For a regular
hexagon the tile width must be 3w and the height is sqrt(3)w and the
hex_side is w. This is made complicated because width and height
"should" be a multiple of 4. Possibilities here include a 48x28 tileset
with a hex_side of 16 (672 pixels/tile, bigger than tinydent), a 56x32
tileset with a hex_side of 19 (896 pixels/tile, equivalent to trident),
or a 96x56 tileset with a hex_side of 32 (2688 pixels/tile, equivalent
to freim96).
Next, I think a new view using hex2 tiles should have isometric
perspective. This means the exact same logic is followed as in the
hex-view but at the end we halve the tile height - units and such are
then drawn with an isometric (3d) perspective.
-jason
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Freeciv-Dev] perspectives, tiles, and views,
Jason Dorje Short <=
|
|