gpt4 book ai didi

c - OpenGL 中的 MyReshape 函数不起作用

转载 作者:行者123 更新时间:2023-11-30 14:59:10 24 4
gpt4 key购买 nike

我尝试在 OpenGL 中执行 reshape 功能来调整图形大小,但是当我调整窗口大小时,图形变形,我不知道为什么。

代码如下:

void myReshape(int width, int height){
// Calculates the ratio
//
GLfloat ratio;

// We adjust viewport to new dimensions
//
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

// Checking dimensions
// Case 1: Width > Heigth
// Case 2: Height > Width
//
if (width > height)
{
ratio = (GLfloat) width / (GLfloat) height;
printf("Ratio1: %f\n", ratio);
glOrtho(-ratio, ratio, -1.0f, 1.0f, 0.0f, 0.0f);
}
else
{
ratio = (GLfloat) height / (GLfloat) width;
printf("Ratio2: %f\n", ratio);
glOrtho(-1.0f, 1.0f, -ratio, ratio, 0.0f, 0.0f);
}
glMatrixMode(GL_MODELVIEW);}

最佳答案

glOrtho(-dx,dx,-dy,dy,-dz,dz) 定义一个“盒子”,它由 OpenGL 内部调整以适应视口(viewport)(宽度,高度)。也就是说,“dx”将适合“宽度”,“dy”将适合“高度”。

如果您想要不变形,但想要简单的比例,则必须遵守测量中的比率:ratio = width/height = dx/dy。因此,避免基于比率的 if-else
用途:

ratio = (GLFloat)width / height;
glOrtho(-ratio, ratio, -1.0f, 1.0f, 0.0f, 0.0f); //this near and far, better -1, 1

如果您不想在视口(viewport)更改时调整图形大小,请使用与视口(viewport)相同的距离:

GLfloat dx = (GLfloat)width / 2;
GLfloat dy = (GLfloat)heigth / 2;
glOrtho(-dx, dx, -dy, dy, -1, 1);

关于c - OpenGL 中的 MyReshape 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42989028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com