Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 5 of 5

Thread: How to create basic scrolling display

  1. #1
    Junior Member Newbie
    Join Date
    Oct 2004
    Posts
    1

    How to create basic scrolling display

    I'm working on a scrolling type of display, where new objects will be added at the right side of the window, and continually progress to the left in real time. When an objects moves out of view on the left, I don't need to be able to recall it.

    How should I think of this in GL terms, regarding the modelview and projection? Do these need to change as the display scrolls?

    What is the basic sequence of GL actions that I would use to implement this?

    Because one can zoom and pan using scaling and translation commands, I'm guessing that GL is keeping all of the vertices (etc.) that have been sent to it. In a scrolling display like this, what keeps GL from eventually running out of space? Perhaps my understanding is flawed here?

    Thanks,
    Charlie

  2. #2
    Advanced Member Frequent Contributor
    Join Date
    Feb 2004
    Location
    Long Island, New York
    Posts
    586

    Re: How to create basic scrolling display

    OpenGL doesn't keep track of all vertices sent to it.

    In fact, it's quite the opposite : you give OpenGL some vertices, it transforms those vertices by the modelviewprojection composite matrix (these transformed values are what you eventually end up seeing on screen) and never even looks back on them. it performs absolutely no vertex management for you.

    the zooming and panning factors alter the modelview matrix which in turn produce different outputs for the final pixel resting place on screen after matrix transformations.

    all vertex data is either stored by your application in arrays (for vertex arrays) or sent in 'immediate' mode by issuing glVertex* commands.

    in your application your objects should be encapsulated in some object along wiht the vertex data that defines it. when finally the object is translated off screen you delete it. you can test if it's still on screen using an 'occlusion query' to count how many pixels of the object actually made it to the screen - if none, it's gone.

    you could store all of your objects in a list and each frame simply iterate the list rendering each object.

    hope at least some of that made sense.

  3. #3
    Junior Member Regular Contributor
    Join Date
    Mar 2000
    Location
    Germany
    Posts
    200

    Re: How to create basic scrolling display

    Aside from what has been said already, the fewer data you send to OpenGL the better.

    But I would not use the occlusion query the way Aeluned proposed, because it may give you false positives if a object is in view frustrum but completly covered by another object, plus in order to start a query you have to send the object down the pipe in the first place.

    Instead I would go for basic frustrum culling. Generate a simple bounding box around your objects and only send them to OpenGL if there are either completly or partialy inside the frustrum.

    There are a lot of articles on the net how to do frustrum culling. Its pretty simple and fast too.

  4. #4
    Advanced Member Frequent Contributor
    Join Date
    Feb 2000
    Location
    London
    Posts
    562

    Re: How to create basic scrolling display

    Followup to lgrosshennig's post - it's actually spelled "frustum" if you want to Google for it.

    (Although for some reason I always want to spell it with an extra 'R' too. Spent ages the first time I used it wondering why I kept getting linker errors. And judging by the 866 hits returned by Google for "frustum culling" we aren't the only ones.)

  5. #5
    Junior Member Regular Contributor
    Join Date
    Mar 2000
    Location
    Germany
    Posts
    200

    Re: How to create basic scrolling display

    Yeah, that is correct .

    One more bad habit to get rid off, I guess.

    Thanks to MikeC for pointing it out.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •