
图形图像
超频化石鱼
这个作者很懒,什么都没留下…
展开
-
图像放缩以及亚像素显示
设图像大小100*100。图像中1个单位代表实际1mm。原比例显示,此时显示在设备坐标上是100像素*100像素。若要在设备坐标上画一条直线,该直线代表了实际10mm,那么体现在设备坐标上就是10个像素。也就是要在屏幕上画一条10像素长的直线才能满足要求。若图像的显示放大10倍,图像的大小依然是100*100,图像中1个单位代表实际1mm,这一点不会受到放缩显示的影响。此时图像显示在设备坐标上原创 2018-02-05 08:24:43 · 1652 阅读 · 0 评论 -
OpenGL加速渲染:顶点数组
加速渲染主要有两种方法:显示列表与顶点数组。 其中,显示列表是通过预编译方式加速,而顶点数组是通过优化实时编译方式加速。但是,不需要同时使用两种加速方式。如果把顶点数组放在预编译中,然后通过显示列表来显示,这样做所耗时间与直接使用顶点数组所耗时间基本相同。 使用顶点数组,也就是把所有点存储在一个数组中,然后将该数组的地址属性通知给OpenGL,然后...原创 2018-02-10 08:26:28 · 1587 阅读 · 0 评论 -
OpenGL自定义相机与模型:GLFrame
GLFrame叫参考帧,其中存储了1个世界坐标点和2个世界坐标下的方向向量,也就是9个glFloat值,分别用来表示:当前位置点,向前方向向量,向上方向向量。GLFrame可以表示世界坐标系中任意物体的位置与方向。无论是相机还是模型,都可以使用GLFrame来表示。对任意一个使用GLFrame来表示的物体而言,涉及到的坐标系有两个:永远不变的世界坐标系,针对于自身的物体坐标系(即绘图坐标系)。...原创 2018-02-10 08:26:26 · 2658 阅读 · 3 评论 -
OpenGL视图变换及gluLookAt
视图变换,即相机变换,其作用是把相机放在指定位置并使其对准场景。该变换是针对相机的变换,不会影响到模型。视图变换决定了相机的位置与方向,因此可以通过视图变换来改变相机位置与方向,从而达到从各个不同的位置与角度来观察同一个物体的情形。进行视图变换使用的函数为:void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdoub...原创 2018-02-10 08:26:23 · 1786 阅读 · 0 评论 -
OpenGL物体显示被截断:视景体与相机的运动与作用
OpenGL中,成功显示了一个图形,然后图形不动,仅仅移动照相机,将照相机拉远,渐渐地会发现图形开始被某个平面截断了,显示不全。 相应地,如果照相机不动,移动物体,随着物体朝某个方向一直持续移动,会发现物体也开始被某个平面截断。这种情况很好解释,这是因为物体平移出了视景体区域,视景体的边界就会把物体截断。虽然视景体没有移动,但是物体移动了。 实际上...原创 2018-02-10 08:26:21 · 2072 阅读 · 0 评论 -
OpenGL投影变换:视景体及glFrustum、gluPerspective 与glOrtho、gluOrtho2D
一. 视景体视景体是指成像景物所在空间的集合。它是一个空间集合体。 注意视景体指的是一个空间集合。一般来说,集合中的每个空间都是个立方体。然后所有的这些空间堆在一起,在外侧取一个最大的外接立方体,就是可显示的区域,该可显示区域也是一个视景体。在这个可显示区域内,放置着可以显示的物体。注意,可以显示的物体仅仅是拥有显示权限,但是不一定显示,这取决于相机等其他因素...原创 2018-02-10 08:26:18 · 5106 阅读 · 0 评论 -
OpenGL目标场景产生的变换过程
一般而言,OpenGL目标场景产生的变换过程分为5步:① 将未安装镜头的相机固定在指定位置上,并调整好镜头的朝向(视图变换)② 对场景进行安排,将各个物体摆放在指定位置(模型变换)③ 选择照相机镜头并安装,同时整放大倍数,使得3D场景可以在照相机的CCD上形成一个清晰的平面图像(投影变换)④ 确定最终照片的大小。(视口变换)⑤ 进行拍照。(绘制场景) 如...原创 2018-02-10 08:26:16 · 477 阅读 · 0 评论 -
与窗口大小无关的图像滤波算法
问题:一幅24位彩色图像,其上有一些红色区域。这些区域都是相连的。为了将图像中红色且相连的部分分离出来,使用如下算法:对单个像素进行判断,若满足R-10>G且R-10>B,那么就认为该像素呈红色。 因为图像原因,可能在某个位置孤立的单个像素也满足上述条件。所以,既要考虑颜色因素又要考虑相邻因素。于是使用以下滤波算法:对于每个像素,取一个m×m的窗口,该像素位于窗口中心。对于该窗原创 2018-02-05 13:37:58 · 1196 阅读 · 0 评论 -
Glut键盘控制
在Glut中,键盘按键分两种:普通按键与特殊按键。其中:① 普通按键为:字母+数字,以及其他可以用ASCII表示的字母。注意ESC(对应ASCII码27)属于普通按键② 特殊按键为:↑↓←→,PageUp,PageDown,Home,End等普通按键所使用的按键响应函数为:void glutKeyboardFunc(void(*func)(unsigned char key, int x, i...原创 2018-02-09 15:32:30 · 1820 阅读 · 0 评论 -
OpenGL加速渲染:显示列表glGenLists
在OpenGL中,可能要用非常多的点、线、面来构成一幅图。若进行实时渲染,无疑对显示效率有非常大的影响。比如要画几百万个三角形,那么很可能旋转一下图片需要响应很久。为了加速渲染,可以将需要绘制的部分放在显示列表glGenLists中。每一个绘制的部分都是一个显示列表成员。然后将该列表进行预编译,编译完后并不显示。当需要显示的时候,直接调用显示列表,由于已经经过了预编译,所以此时会不经编译直接显示,...原创 2018-02-09 15:26:13 · 4089 阅读 · 0 评论 -
OpenGL加速渲染:顶点数组的索引模式
使用顶点数组时,往往要将所有需要使用的顶点放入数组中,以便于统一调用。 比如一条折线:GLfloat vPoints[] = { 0.0, 0.0, 0.0, //折线端点0 1.0, 0.0, 0.0, //折线端点1 1.0, 0.0, 0.0, //折线端点1 1.0, 1.0, 0.0 //折线端点2}; ...原创 2018-02-10 08:26:30 · 1906 阅读 · 0 评论