分享

20130111

 Tech-d 2013-01-11
1)glRectf(-10.0f, 10.0f, 10.0f, -10.0f); //(x1, y1, x2, y2)
注意的是参数其实不完全是实际的像素,更多的是跟窗口或裁剪区等的宽高的比例,用来定义裁剪区域的函数也是如此:
glOrtho(-30.0f, 30.0f, -30.0, 30.0, 1.0, -1.0); //左右,底顶,近远(x轴向,y轴向,z轴向)

所以,如果希望当改变窗口大小时绘制的方形形状不随之发生伸缩位移,需要在控制窗口变形时重置裁剪区的函数中,添加如下代码:
//建立裁剪区域
aspectRatio = (GLfloat)w / (GLfloat)h; //w, h 窗口的宽高
if(w <= h)
glOrtho(-30.0f, 30.0f, -30.0/aspectRatio, 30.0/aspectRatio, 1.0, -1.0);
else
glOrtho(-30.0 * aspectRatio, 30.0f * aspectRatio, -30.0, 30.0, 1.0, -1.0);

glOrtho韩式实际上并不建立裁剪区域,而只是修改原有的裁剪区域。


2)glLoadIdentity函数的目的是,在执行任何矩阵乘法操作之前,对当前的坐标系统进行“重置”。如果没有这种重置,在glOrto被调用后,每次调用glOrtho时,都会导致目标裁剪区被破坏,甚至图形无法显示。

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
这两行是告诉opengl,以后所有的变换都将影响这个模型(即我们所绘制的图形)。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多