我的自定义缩放方法不起作用

时间:2013-10-03 16:51:44

标签: java c++ opengl

我有以下代码在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();

    }

1 个答案:

答案 0 :(得分:0)

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

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

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

// 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;

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