OpenGL 中的 MyReshape 函数不起作用
MyReshape function in OpenGL is not working
我曾尝试在 OpenGL 中执行重塑功能来调整图形大小,但是当我调整 window 图形大小时,图形变形了,我不知道为什么。
代码如下:
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) 定义了一个 "box",它由 OpenGL 内部调整以适应视口(宽度,高度)。也就是说,"dx" 将拟合到 "width",而 "dy" 将拟合到 "height"。
如果你想要不变形,只是一个简单的比例,那么三围比例一定要遵守: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
如果您不想在视口更改时调整图形大小,请使用与视口相同的距离:
GLfloat dx = (GLfloat)width / 2;
GLfloat dy = (GLfloat)heigth / 2;
glOrtho(-dx, dx, -dy, dy, -1, 1);
我曾尝试在 OpenGL 中执行重塑功能来调整图形大小,但是当我调整 window 图形大小时,图形变形了,我不知道为什么。
代码如下:
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) 定义了一个 "box",它由 OpenGL 内部调整以适应视口(宽度,高度)。也就是说,"dx" 将拟合到 "width",而 "dy" 将拟合到 "height"。
如果你想要不变形,只是一个简单的比例,那么三围比例一定要遵守: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
如果您不想在视口更改时调整图形大小,请使用与视口相同的距离:
GLfloat dx = (GLfloat)width / 2;
GLfloat dy = (GLfloat)heigth / 2;
glOrtho(-dx, dx, -dy, dy, -1, 1);