Sign in to follow this  
BornToCode

OpenGL What is the better way to do to this.

Recommended Posts

u know in video games when you go into a cutscene and you see the screen get cut, where you have two black parts on the top and in the bottom of the screen. I was wondering how they do this and one idea that comes to mind is to clear the entire backbuffer to black and draw my scene to a texture quad which i would scale and apply to the center of the screen. But the thing is that i am not sure if this is the best way to do it or they could be an easier way. By the way i am doing this in OpenGL. I try to set the glviewport and glScissor but no luck. So can someone help.

Share this post


Link to post
Share on other sites
I think scissor test would be the easy option, while changing camera to a panoramic view and resizing the viewport would look better.

There's a good tutorial on glScissor on NeHe. What problems are you experiencing?

Share this post


Link to post
Share on other sites
glScissor is what you want. Depending on how you want to cut the scene, there are some options to calculate the scissor box and maybe a new viewport aswell.

I'm assuming you simply want to add black boxes to the existing scene without changing anything else. That will preserve aspect ratio, but will hide parts of the scene, so make sure you don't have anything important near the top/bottom.

First calculate the height of a 16:9 viewport give the current window width. Change aspect ratio as you like. ww and wh means window width and window height.

nh = ww / (16/9)

Now we know that the new viewport should be nh pixels high given the current width of the viewport. So if we want the viewport centered, calculate how much to offset the viewport.

offset = (wh-nh) / 2

And set the scissor box to cut anything outside the wanted region.

glScissor(0, offset, ww, nh)
glEnable(GL_SCISSOR)

Other options are to widen the scene horizontally. That would involve changing the viewport and the projection matrix to something with a wider field of view. But I leave it up to you to figure that out yourself.

Share this post


Link to post
Share on other sites
Grain, i see what you mean and i was thinking about that, but i know that it is possible to achieve without having to render two additiona piece of geometries.
The problem that i have with glScissor is that when i set it up and clear the backbuffer it still clear the entire screen backbuffer instead of the location i specify in glScissor and glViewport.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this