ROAM vs. Quadtrees

Started by
8 comments, last by kill 23 years, 8 months ago
Hi. I''ve been looking into different terrain rendering algorithms with realtime LOD. I got ROAM to work(to some extent), but now I''m looking into Quadtrees. Can someone compare and contrast ROAM and Quadtrees, and list comparative advantages and disadvantages of each? Another words, we have two ways: subdivide based on equaletiral triangles and subdivide based on squares. Which way gives us what?
Advertisement
Anyone?
It seems like the same stuff to me. One just uses squares, the other triangles. ROAM seems like it is as powerful as any quadtree method, but simpler becasue of triangles.

I looked at Lindstrom''s quadtree method a while back and concluded I preferred ROAM.

_______________________________
"To understand the horse you'll find that you're going to be working on yourself. The horse will give you the answers and he will question you to see if you are sure or not."
- Ray Hunt, in Think Harmony With Horses
ALU - SHRDLU - WORDNET - CYC - SWALE - AM - CD - J.M. - K.S. | CAA - BCHA - AQHA - APHA - R.H. - T.D. | 395 - SPS - GORDIE - SCMA - R.M. - G.R. - V.C. - C.F.
The quadtrees seem to be easier organize(at least it seems this way to me)... When I looked at both, for some reason I thought they are the same, and it''s just a matter of preference.

Please correct me if I am wrong.
What is easier to organize about the quadtrees vs. bintrees?

_______________________________
"To understand the horse you'll find that you're going to be working on yourself. The horse will give you the answers and he will question you to see if you are sure or not."
- Ray Hunt, in Think Harmony With Horses
ALU - SHRDLU - WORDNET - CYC - SWALE - AM - CD - J.M. - K.S. | CAA - BCHA - AQHA - APHA - R.H. - T.D. | 395 - SPS - GORDIE - SCMA - R.M. - G.R. - V.C. - C.F.
It''s completely a matter of personal preference. For me it''s easier to visualize a landscape subdivided in quads then the landscape subdivided in triangles.

Plus, quadtrees actually automatically give you the ability to render triangle strips, it''s a huge optimization.
I have had the ROAM algo in my engine for a while now and I must say It is not really the best.

1) It eats processing time.
It takes half the time to process the variance and tesselate
The landscape

2) Limited to Triangle Lists (very slow)

I am now implimenting the Quadtree algo I will write back when I have it tested



To continue this discussion, how do u guys deal with huge landscapes? I had a bunch of ideas...

1. Save the entire tree(a quadtree or a roam tree) to a harddrive, and stream the data as needed. This is a good idea, but I didn''t look into it, and I frankly don''t think it''s doable.
2. Break the original landscape up into a bunch of landscapes. Sure, u could do that, but I''m wondering if u could avoid that.
3. Allow a certain "radius" around the camera. Say the landscape is 100x100, and you allow a radius of 10 around the camera. That way u have a "view window" of 20x20. You base your ROAM or a Quadtree on that, or something a little bigger then that, and when the camera leaves that region, you rebuild it on the new "view".

Which idea is better? Is there anything else I could do that I''m missing? I mean, if the landscape is really huge(10000x10000) you won''t be able to keep all the data in RAM...
Well I just feel that my engine is good for this topic. I use quadtrees, but I started out with roam. I hated roam because it takes something simple and totally screws it up. As for the data saving. I save my maps run length encoded for certain kinds which provide over 10x reduction in save size. But to dynamically have 10000x10000 maps, I would suggest storing all the height information in the quadtrees at a certain level, that way it can be cached when needed or emptied. Ah well, this is really a plug for my engine so :

Here is my demo. Stop by the page, download the demo and give me feedback. Here is a screenshot since you probably want one. Click on it to go to my page.

lxnyce: that is nice! I didn''t get to download the demo, ''cause I''m at work, I''ll do that later. But the screenshots look wonderful. I have two questions for you:

1. How do you implement the error algorithm? I mean how do u check if the vertex should be enabled or not, and how do u check if the quadrant should be enabled or not? Please give as much detail as possible.
2. So you would recommend saving the heightmap in a quadtree on a harddrive? I didn''t get that one, would u be more specific?

Thanx a lot for your time!

This topic is closed to new replies.

Advertisement