java - OPENGL - 保持对象的原始纵横比

标签 java opengl scale

我正在读取和加载 .obj 文件,我想要 4 个不同的视口(viewport),全部具有不同的视角,我的主要问题是试图保持对象的原始长宽比并防止它随着窗口大小的调整而改变或旋转等变换。

这就是我想要得到的: enter image description here

这就是我得到的(全屏): enter image description here

我的显示代码的一部分:

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 are the maximum and minimum values of the x axis in the points given in the .obj file. height and width are the current dimensions of the window.

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

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

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

关于java - OPENGL - 保持对象的原始纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27082942/

相关文章:

opengl - 访问片段着色器中的顶点缓冲区(缓冲区数组)

objective-c - NSSplitView 中的 NSOpenGLView

android - 动画时比屏幕大的图像被裁剪

java - 充电困惑 : Google Code Jam [2014]

java - 使用JAVA执行多cmd命令

java - 线程 "main"java.lang.RuntimeException : Stub XmlPullParserFactory 中的异常

java - 在 LibGDX 中在 Sprite 像素级别而不是屏幕像素级别旋转 Sprite

java - 如何在Liferay中获取Layout实例的URL?什么是友好 URL 库?

opengl - 由 glEnableVertexArrayAttrib 生成的段错误

html - 构建与 IE8 兼容的可调整大小的图形/图表时出现问题