我有一个屏幕对齐的四边形,我想放大那个四边形中的任意一个矩形,但我的数学不对。
我想我已经完成了翻译,而不是缩放。基本上,我的代码如下:
//
// 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]传递给我的渲染对象,其中这些值是视口宽度和高度的百分比。
答案 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)
当我需要这样做时,我总是只更改传递给glOrtho
,glFrustrum
,gluPerspective
或其他任何内容的参数(无论我使用哪个)。
答案 2 :(得分:0)
从你的评论中看起来你想要绘制相同的四边形(RenderQuad())作为完整图像和PIP模式。
假设你有PIP窗口的widthPIP和heightPIP以及startXY位置,那么使用widthPIP / totalWidth,heightPIP / totalHeight缩放原始四边形并在给定的startXY重新渲染。
这是你在找什么?