试图在屏幕对齐的四边形中放大任意矩形

时间:2010-06-08 21:00:42

标签: c++ opengl zoom

我有一个屏幕对齐的四边形,我想放大那个四边形中的任意一个矩形,但我的数学不对。

我想我已经完成了翻译,而不是缩放。基本上,我的代码如下:

//
// render once zoomed in
glPushMatrix();
glTranslatef(offX, offY, 0);
glScalef(?wtf?, ?wtf?, 1.0f);

RenderQuad();

glPopMatrix();

//
// render PIP display
glPushMatrix();
glTranslatef(0.7f, 0.7f, 0);
glScalef(0.175f, 0.175f, 1.0f);

RenderQuad();

glPopMatrix();

任何人有任何提示吗?用户选择一个矩形区域,然后将这些值作为[x,y,w,h]传递给我的渲染对象,其中这些值是视口宽度和高度的百分比。

3 个答案:

答案 0 :(得分:1)

鉴于您的值传递为[x,y,w,h],我认为您希望首先向负方向平移以使左上角为0,0,然后按1 / w和1进行缩放/ h将其填入屏幕。像这样:

//
// render once zoomed in
glPushMatrix();
glTranslatef(-x, -y, 0);
glScalef(1.0/w, 1.0/h, 1.0f);

RenderQuad();

glPopMatrix();

这有用吗?

答案 1 :(得分:0)

当我需要这样做时,我总是只更改传递给glOrthoglFrustrumgluPerspective或其他任何内容的参数(无论我使用哪个)。

答案 2 :(得分:0)

从你的评论中看起来你想要绘制相同的四边形(RenderQuad())作为完整图像和PIP模式。

假设你有PIP窗口的widthPIP和heightPIP以及startXY位置,那么使用widthPIP / totalWidth,heightPIP / totalHeight缩放原始四边形并在给定的startXY重新渲染。

这是你在找什么?