【问题标题】:OPENGL - Maintain object's original aspect ratioOPENGL - 保持对象的原始纵横比
【发布时间】:2014-11-22 21:48:22
【问题描述】:

我正在读取和加载 .obj 文件,我想拥有 4 个不同的视口,它们都具有不同的视角,我的主要问题是试图保持对象的原始纵横比并防止它随着窗口重新大小而改变或旋转等变换。

这就是我想要得到的:

这就是我得到的(全屏):

我的显示代码的一部分:

GL2 gl = drawable.getGL().getGL3bc();
        gl.glEnable(GL_DEPTH_TEST);
        gl.glDepthFunc(GL_LEQUAL);
        gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        gl.glOrtho(xMin - (0.1 * (xMax - xMin)), xMax
                + (0.1 * (xMax - xMin)), yMin - (0.1 * (yMax - yMin)), yMax
                + (0.1 * (yMax - yMin)), zMin - (0.1 * (zMax - zMin)), zMax
                + (0.1 * (zMax - zMin)));
        gl.glMatrixMode(GL_PROJECTION);
        gl.glViewport(0, 0, width / 2, height / 2);
        gl.glLoadIdentity();
        gl.glPushMatrix();
        gl.glRotatef(-90f, 1f, 0f, 0f);
        draw(gl);
        gl.glPopMatrix();
        gl.glViewport(width / 2, height / 2, width / 2, height / 2);
        gl.glLoadIdentity();
        gl.glPushMatrix();
        gl.glRotated(-90, 0, 1, 0);
        draw(gl);
        gl.glPopMatrix();
        gl.glViewport(0, height / 2, width / 2, height / 2);
        gl.glLoadIdentity();
        gl.glPushMatrix();
        draw(gl);
        gl.glPopMatrix();

xMax,yMin 是 .obj 文件中给定点中 x 轴的最大值和最小值。 高度和宽度是窗口的当前尺寸。

【问题讨论】:

  • 该代码取决于您未显示其定义的变量。对于其中一个轴,这听起来像是正交视图参数中的一个简单错误。
  • xMax,yMin 是 .obj 文件中给出的点中 x 轴的最大值和最小值。高度和宽度是窗口的当前尺寸。

标签: java opengl scale


【解决方案1】:

xMax,yMin 是 .obj 文件中给定点中 x 轴的最大值和最小值。高度和宽度是窗口的当前尺寸。

嗯,这很可能是您的问题。通过设置依赖于每个坐标的最小值和最大值的正交视图,您实际上会扭曲对象,因为这样的区域与窗口的纵横比不同。为了更清楚起见,如果您将整个模型放在一个盒子里并拍照,应用程序会拉伸它,以便 Y 和 X 坐标(假设 Y 为上下轴)成为整个模型的一部分视口。这将被视为扩大“图片”的宽度,或挤压高度。

因此您应该调整这些参数以消除失真。由于模型很高(Y 大于 X),我建议在设置正交视图之前应用此技巧:

xMin = xMin * width / height;
xMax = xMax * width / height;

【讨论】:

  • yMin 和 yMax、zMin 和 zMax 呢?
  • 唯一的问题是视图框在 X 轴上太窄了。使用此修复程序,无需修改其他变量。
猜你喜欢
  • 2012-08-25
  • 2018-04-02
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
相关资源
最近更新 更多