0

我有以下代码在 Opengl 中显示图像/纹理。该方法应该以正确的纵横比显示图像并放大/缩小。

图像似乎没有在水平轴上保持其纵横比。为什么?

(注意:OpenGL 的查看宽度从 -1 到 0,高度从 1 到 -1)。

private void renderImage(Rectangle dst, float magnification) {
        float width, height;
        float horizontalOffset, verticalOffset;

        // Default: Fill screen horizontally
        width = 1f;
        height = dst.getHeight()/(float) dst.getWidth();


        // magnification
        width *= magnification;
        height *= magnification;

        // Offsets
        horizontalOffset = width/2f;
        verticalOffset = height/2f;

        // Do the actual OpenGL rendering
        glBegin (GL_QUADS);
        // Right top
        glTexCoord2f(0.0f, 0.0f);
        glVertex2f(-0.5f + horizontalOffset, verticalOffset);

        // Right bottom
        glTexCoord2f(0.0f, 1.0f);
        glVertex2f(-0.5f + horizontalOffset, -verticalOffset);

        // Left bottom
        glTexCoord2f(1.0f,1.0f);
        glVertex2f(-0.5f - horizontalOffset, -verticalOffset);

        // Left top
        glTexCoord2f(1.0f, 0.0f);
        glVertex2f(-0.5f - horizontalOffset, verticalOffset);
        glEnd();

    }
4

1 回答 1

0

我对 OpenGL 没有任何经验,但从查看您的代码来看,您的默认填充似乎有些可疑。

// Default: Fill screen horizontally
width = 1f;
height = dst.getHeight()/(float) dst.getWidth();

这是将您的“宽度”变量设置为恒定值 1,而“高度”变量依赖于您传入的矩形的高度和宽度,然后用于计算偏移量

// Offsets
horizontalOffset = width/2f;
verticalOffset = height/2f;

根据我的经验,这可能会导致您所说的问题,首先尝试在调试器中逐步执行此函数以分析宽度和高度变量所持有的值,或尝试更改

// Default: Fill screen horizontally
width = 1f;
height = dst.getHeight()/(float) dst.getWidth();

// Default: Fill screen horizontally
width = 1f;
height = 1f;

并重新运行它以查看它是否对您的输出产生了影响

于 2013-10-03T17:27:51.843 回答