Jump to content
  • Advertisement
Sign in to follow this  
Expandable

OpenGL Portal based visibility checks

This topic is 4519 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello everybody, I need your help. I've been working on this problem for two days now and I still didn't even get closer to a solution. I use portals for visibility determination (very similar to DOOM 3's system). So I have an area, where the camera is in. I draw that area. I extract the 3d view frustum from the OpenGL matrices. If a portal of the current area is within the frustum, I also draw the portal's other area. That works fine. My problem is: In that other area, I have to check if any other portals are visible. Now how do I do that? I can't use the OpenGL matrices for that, but I have to recalculate the frustum. Now the near clipping plane is the portal itself. I thought it would'nt be too difficult to geometrically construct the frustum, but I never got that working. So I searched for some tutorials, and I read that it would be easier to transform the portal's vertices into 2D coordinates on the screen. I came up with my own solution do to this, after that I found out that gluProject() would've done the same thing for me. But oddly enough, my own solution as well as gluProject() produce the same output - which can't be right, though. Or did I missunderstand what gluProject does? I thought that a vertex, let's say it's positioned at (22, 11, -33) and drawn as a point, has specific 2D coordinates, let's say (443, 222). So if I let gluProject() calculate the 2D coordinates of (22, 11, -33), shouldn't the output be (443, 222)? Meaning that, if I draw the vertex (22, 11, -33) in 3D first, and after that I draw the vertex (443, 222) in 2D, only the 2D vertex should be visible as it overdraws the 3D vertex? I really need some help here, so thanks a lot in advance!

Share this post


Link to post
Share on other sites
Advertisement
I think you're overthinking things. Create each plane from the cameras position, and the 2 vertices of an edge from your portal.

Share this post


Link to post
Share on other sites
This is not gonna to do the trick,since the vertexes might be outside the frustum while some part of,containing no vertexes might be inside and not obscured by any occluder.
I do portal checking by combined frustum test(for Bounding box of the portal) and Occlusion Queries.Works like silk.

Share this post


Link to post
Share on other sites
By the way,gluProject//UnProject yields quite strange results sometimes...my own experience.
Read specification for more detail.

Share this post


Link to post
Share on other sites
Quote:
Original post by DarkMessiaH
This is not gonna to do the trick,since the vertexes might be outside the frustum while some part of,containing no vertexes might be inside and not obscured by any occluder.
I do portal checking by combined frustum test(for Bounding box of the portal) and Occlusion Queries.Works like silk.


Edit: Nonsense... I thought about occlusion queries. But the problem is that I do NOT want to draw the portal itself... and I'm already drawing my geometry while still performing portal visiblity checks... how do you do that?

Furthermore, if you use frustum culling, how do you calculate the frustum? I mean, the current view frustum can easily be extracted from the OpenGL matrices, but all other frustums, where the near plane is the portal itself, have to be geometrically constructed. I had the problem that I didn't know how to verify that all normals are facing inwards... but anyway, I'm more into the 2d approach now, I think I might get it to work correctly... but any help would still be appreciated!

[Edited by - Expandable on March 7, 2006 7:29:20 PM]

Share this post


Link to post
Share on other sites
Quote:
Original post by DarkMessiaH
I do portal checking by combined frustum test(for Bounding box of the portal) and Occlusion Queries.Works like silk.


You're right.

I just implemented the portal visibility checking by using occulsion queries . The code is extremly elegant and it works perfectly. In fact, it works by far better than I expected, because if you draw the area you're currently in and then
check the visibility of the portals of that area with occlusion queries you also don't draw the portal if it's behind your geometry... and that check is basically for free if you use occlusion queries anyways... If you repeat these steps for every visible area/portal you have an extremly good culling mechanism!

So thanks for your help!

The only problem I have now is that when you are too close to a portal, the portal seems to be outside the view frustum (between the camera and the near clipping plane), so the next area is not rendered. Hmm... any ideas?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!