Question submitted by (05 January 2000)
|Return to The Archives|
|I'm coding currently on a landscape-engine with Direct3D and all landscape-tiles (4-point-polygons) around the player of a radius are drawn. So polygons are drawn too if they are lying behind the players view! (invisible). How could I find out which landscape-tile is visible and which's not? Do you have some sourcecode examples for me? I've tried to code some stuff with the player-vector etc. ...but I failed!|
Often times, clipping takes care of this. During the clipping process,
each vertex is "coded". This coding involves determining the binary value
of a few bits that represent if a vertex is on- or off-screen in any
direction. These bits are later ANDed together to quickly determine if the
polygon is on- or off-screen. This explanation is certainly not good
enough to learn from. But you can start with a document on 3D
clipping I wrote a while ago.
Since you're doing a terrain-based engine, you can take advantage of the 2-dimensional grid that you're working with. You might want to read up on quad-trees. Quad-trees are a popular way of storing your terrain data so that you can quickly cull out large clumps of land in the time it takes to cull a single polygon. They do this by storing the data heirarchically. If a polygon node in the tree is not visible, then all of the polygons in that node can be considered not visible. Quad-trees are certainly a viable option even for beginners, yet powerful enough to yield great results.
Response provided by Paul Nettle
This article was originally an entry in flipCode's Fountain of Knowledge, an open Question and Answer column that no longer exists.