openGl重塑功能

时间:2017-03-21 14:16:04

标签: c++ opengl graphics reshape

有人能告诉我这段代码中if-else语句的意义是什么吗?它到底是做什么的? 特别是它在glOrtho中将宽度除以宽度的部分。

*如果该方法对任何人都不明确,这个引用可能有帮助.. “这种重塑通过使视口和世界窗口具有相同的宽高比来保留形状”

void myReshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
        glOrtho(-50.0, 50.0, -50.0*(GLfloat)h / (GLfloat)w,
            50.0*(GLfloat)h / (GLfloat)w, -1.0, 1.0);
    else
        glOrtho(-50.0*(GLfloat)w / (GLfloat)h,
            50.0*(GLfloat)w / (GLfloat)h, -50.0, 50.0, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

提前Thanx!

2 个答案:

答案 0 :(得分:3)

基本上,我们的想法是保持投影的正方形宽高比(这是wh的划分) XY平面中的正方形在所选XY原点(0,0)周围的边长100(世界空间单位)适合窗口的大小(这是if的用途,以决定,窗口的两种尺寸中的哪一种是短尺寸的。)

答案 1 :(得分:2)

宽高比可以通过两种不同的方式指定:

  1. width/height
  2. height/width
  3. 如果宽度大于高度,则为width/height > 1height/width < 1

    同样,如果高度大于宽度width/height < 1height/width > 1

    如果屏幕尺寸不相等,我们无法将投影的宽度和高度设置为相同的值。否则,一切都会显得拉长:

    enter image description here

    因此,我们将其中一个维度与纵横比相乘。

    如果纵横比大于1,则应将其乘以更大的维度。

    同样,如果纵横比小于1,则应将其乘以较小的维度。

    您的示例,确保宽高比始终大于1

    因此,它总是必须乘以更大的维度,这可能会有所不同。 那是if-else案例的原因:

    • 如果w <= h高度是更大的维度),则将宽高比乘以glOrtho(); top / bottom 参数
    • 否则(h < w宽度是更大的维度),宽高比乘以glOrtho(); <的左/右参数/ LI>

    有效,X和Y维度(使用if-else案例)不能低于100个单位( -50到+) 50 ) - ,因为宽高比总是大于1