当我的窗口调整大小时,我不希望内容扩展,只是为了增加视图端口大小。我在stackoverflow(http://stackoverflow.com/questions/5894866/resize-viewport-crop-scene)上搜索时发现了这个问题,这与我的问题非常相似。但是我很困惑如何设置缩放到哪里,我用1.0f尝试了但是后来什么都没有显示:s
此时调整大小的功能代码:缩放:
void GLRenderer::resize() {
RECT rect;
int width, height;
GLfloat aspect;
GetClientRect(hWnd, &rect);
width = rect.right;
height = rect.bottom;
if (height == 0) {
height = 1;
}
aspect = (GLfloat) width / height;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, aspect, 0.1, 100.0);
glMatrixMode(GL_MODELVIEW);
}
我的功能是渲染一个简单的三角形:
void GLRenderer::render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslated(0, 0, -20);
glBegin(GL_TRIANGLES);
glColor3d(1, 0, 0);
glVertex3d(0, 1, 0);
glVertex3d(1, -1, 0);
glVertex3d(-1, -1, 0);
glEnd();
SwapBuffers(hDC);
}
答案 0 :(得分:2)
您可以使用“视野”参数将缩放y(高度)更改为gluPerspective。代码中45度的那个。由于它目前始终为45度,因此您将始终获得相同的视角(以y为单位)。如何根据窗口的高度更改此值并不明显。对于较大的值(180度及以上),线性关系将失败。我会尝试使用arctan(height / k),其中'k'就像是500。
另请注意,当您在x中扩展窗口时,您将获得所需内容(源代码当前的方式)。也就是说,您可以获得更广阔的视野。这是因为您根据x和y之间的比率将方面(第二个参数)更改为值。
高度和宽度以像素为单位测量,因此值1不佳。
请注意,您使用的是旧版OpenGL。有关详细信息,请参阅Legacy OpenGL。