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

Java 我的自定义缩放方法不起作用,java,c++,opengl,Java,C++,Opengl,我有以下代码在Opengl中显示图像/纹理。该方法应以正确的纵横比显示图像,并进行放大/缩小 图像似乎无法在水平轴上保持其纵横比。为什么? (注意:OpenGL的查看宽度从-1到0,高度从1到-1) 我对OpenGL没有任何经验,但从您的代码来看,您的默认填充似乎有些可疑 // Default: Fill screen horizontally width = 1f; height = dst.getHeight()/(float) dst.getWidth(); 这是将“宽度”变量设置为常量

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

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

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


我对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();


然后重新运行它,看看它是否对输出有影响

我想你需要考虑观察区域的纵横比。如果查看宽度从-1到0,高度从1到-1,则仅当查看区域的高度是其宽度的两倍时,此计算才会起作用;结果更令人满意,但并不完美。不过我猜你是对的。与其简单地乘以2,不如尝试
verticalOffset*=2.0*屏幕宽度/屏幕高度,其中screen_width和screen_height是您所绘制区域的大小(以像素为单位)。
// Default: Fill screen horizontally
width = 1f;
height = dst.getHeight()/(float) dst.getWidth();
// Default: Fill screen horizontally
width = 1f;
height = 1f;