有人能告诉我这段代码中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!
答案 0 :(得分:3)
基本上,我们的想法是保持投影的正方形宽高比(这是w
到h
的划分)和 XY平面中的正方形在所选XY原点(0,0)周围的边长100(世界空间单位)适合窗口的短大小(这是if
的用途,以决定,窗口的两种尺寸中的哪一种是短尺寸的。)
答案 1 :(得分:2)
宽高比可以通过两种不同的方式指定:
width/height
height/width
如果宽度大于高度,则为width/height > 1
和height/width < 1
。
同样,如果高度大于宽度width/height < 1
和height/width > 1
如果屏幕尺寸不相等,我们无法将投影的宽度和高度设置为相同的值。否则,一切都会显得拉长:
因此,我们将其中一个维度与纵横比相乘。
如果纵横比大于1,则应将其乘以更大的维度。
同样,如果纵横比小于1,则应将其乘以较小的维度。
您的示例,确保宽高比始终大于1 。
因此,它总是必须乘以更大的维度,这可能会有所不同。 那是if-else案例的原因:
w <= h
(高度是更大的维度),则将宽高比乘以glOrtho();的 top / bottom 参数h < w
,宽度是更大的维度),宽高比乘以glOrtho(); <的左/右参数/ LI>
有效,X和Y维度(使用if-else案例)不能低于100个单位( -50到+) 50 ) - ,因为宽高比总是大于1 。