OpenGL显示窗口重定形函数
    在介绍性的OpenGL程序中,我们讨论了建立初始显示窗口的函数。但是在生成图形后,常需要用鼠标将显示窗口拖到屏幕的另一位置或改变其形状。改变显示窗口的尺寸可能改变其纵横比并引起对象形状的改变。
    为了允许对显示窗口尺寸的改变做出反应,GLUT库提供下面的函数:

glutReshapeFunc(winReshapeFcn);

该函数可和其他GLUT函数一起放在程序的主过程中,它在显示窗口尺寸输入后立即激活。该GLUT函数的变量是接受新窗口宽度和高度的过程名。我们可以接着使用新尺寸去重新设置投影参数并完成任何其他操作,包括改变显示窗口颜色。另外,我们可以保存宽度和高度给程序中的其他 过程使用。

作为一个例子,下列程序展示了怎样构造winReshapeFcn过程。命令glLoadIdentity包含在重定形函数中,从而使前面任意的投影参数值对新的投影设置不起作用。该程序显示了讨论的规则六边形。尽管本例中的六边形中心(在圆的中心位置)用显示窗口参数的概念描述,但是该六边形的位置不受显示窗口尺寸的任何改变的影响。这是因为六边形在显示表中定义,并且仅仅是最初的中心坐标存储在表中。如果希望在改变显示窗口尺寸时改变六边形的位置,则需要使用另一种方法来定义六边形或改变显示窗口的坐标参考。图3.64给出了该程序的输出。

#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>const double TWO_PI = 6.2831853;/* Intial display-window size.*/
GLsizei winWidth = 400, winHeight = 400;
GLuint regHex;class screenPt
{private:GLint x,y;public:/* Default Constructor: initializes coordinate position to (0, 0).*/screenPt ( ) {x = y = 0;}void setCoords (GLint xCoord, GLint yCoord) {x = xCoord;y = yCoord;}GLint getx () const {return x;}GLint gety () const {return y;}
};
static void init (void)
{screenPt hexVertex, circCtr;GLdouble theta;GLint k;/* Set circle center coordinates.*/circCtr.setCoords (winWidth / 2, winHeight/2);glClearColor (1.0, 1.0, 1.0, 0.0);//Display-window color = white./* Set up a display list for a red regular hexagon.* Vertices for the hexagon are Six equally spaced* points around the circumference of a circle.*/regHex = glGenLists (1); // Get an identifier for the display list.glNewList (regHex, GL_COMPILE);glColor3f (1.0, 0.0, 0.0); // Set fill color for hexagon to red.glBegin (GL_POLYGON);for (k = 0; k < 6; k++){theta = TWO_PI * k / 6.0;hexVertex.setCoords (circCtr.getx () + 150 * cos (theta), circCtr.gety () + 150 * sin (theta));    glVertex2i (hexVertex.getx (), hexVertex.gety ());}glEnd ();glEndList ();
}
void regHexagon (void)
{glClear (GL_COLOR_BUFFER_BIT);glCallList (regHex);glFlush();
}void winReshapeFcn (int newWidth, int newHeight)
{glMatrixMode (GL_PROJECTION);glLoadIdentity ( );gluOrtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble) newHeight);glClear (GL_COLOR_BUFFER_BIT);
}void main (int argc, char** argv)
{glutInit (&argc, argv);glutInitDispayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition (100, 100);glutInitWindowSize (winWidth, winHeight);glutCreateWinow ("Reshape-Function & Display-List Example");init ( );glutDisplayFunc (regHexagon);glutReshapeFunc (winReshapeFcn);glut MainLoop ();
}

计算机图形学(二)输出图元_19_显示窗口重定形函数相关推荐

  1. 输出图元---OpenGL显示窗口重定形函数

    2019独角兽企业重金招聘Python工程师标准>>> 为了允许对显示窗口尺寸的改变做出反应,GLUT提供了下面的函数: 该函数可以和其他GLUT函数一起放在程序的主过程中,它在显示 ...

  2. OpenGL显示窗口重定形函数

    我们在建立初始显示窗口后,需要在其后改变位置与形状.窗口尺寸的改变可能改变其纵横比并引起对象形状的改变.所以GLUT库提供glutReshapeFunc(winReshapeFcn)函数.和其他GLU ...

  3. OpenGl学习之显示窗口重定形函数

    通过上面一个程序我们可以发现一个问题或者说是一个优点,就是随着显示窗口的增大,显窗口中显示的图像也会随之增大,这个在很多界面语言中的需要完成的一个功能,现在OpenGL中提出了一个问题,我们不想随着窗 ...

  4. 计算机图形学二维变换知识点,计算机图形学 二维变换及二维.ppt

    计算机图形学 二维变换及二维 第三章 二维变换及二维观察 本章主要内容 3.1二维图形的基本变换 3.2窗口视图变换 3.3复合变换 3.4二维图形裁剪 3.5本章小结 3.1 二维图形的基本变换 3 ...

  5. 计算机图形学-二维图形变换 笔记总结与代码实战

    文章目录 1.向量基础知识 2.图形坐标系 3.二维图形变换原理 4.二维图形几何变换 5.窗口视区变换 基本二维几何变换代码 二维复合变换实战-五星红旗绘制 1.向量基础知识 为什么向量如此重要:在 ...

  6. 用计算机图形学如何输出字符,计算机图形学复习题1

    计算机图形学作业题 1. 什么是计算机图形学?计算机图形学有哪些应用领域? 2. 试举例说明你所见到过的计算机图形学的应用实例. 3. 图形系统中常见的输入.输出设备有哪些? 4. 图形软件分为哪两类 ...

  7. 计算机图形学二维图形基本变换实验原理,计算机图形学实验:二维图形变换.docx...

    计算机图形学实验:二维图形变换.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验三 二维图形变换一.实验任务1. 通 ...

  8. 计算机图形学 学习笔记 图元的属性

    目录 OpenGL状态变量 颜色和灰度 RGB颜色分量 颜色表 灰度 OpenGL颜色函数 OpenGL的RGB和RGBA颜色模型 OpenGL颜色索引模式 OpenGL颜色调和 OpenGL颜色数组 ...

  9. 【计算机图形学】【OpenGL】基于窗口的Liang-Barsky的折线段裁剪的实现

    计算机图形学课程实验,出于记录和分享学习过程的目的写下此博客.由于是第一次写博客,不足之处还望指出. 目录 实验要求: 实现效果: 头文件: Liang-Barsky算法部分: 实现部分: 全局变量定 ...

最新文章

  1. 三本毕业后,我进入了世界五百强
  2. MySQL数据库从windows迁移到linux
  3. Leetcode 55.跳跃游戏 (每日一题 20210706)
  4. linux进程故障如何修复,33.Linux开机过程及启动故障修复
  5. cocos2d-x初探学习笔记(7)--CCProgressTimer
  6. JavaScript初学者必看“new”
  7. 【主席树】更为厉害(P3899)
  8. php 创建数据库并填充,php操作mysql--连接数据库创建表填充表
  9. sql server中同时执行select和update语句死锁问题
  10. Github Star 8.4K,超级好用的OCR数据合成与半自动标注工具,强烈推荐!
  11. Session丢失的解决办法小结(转)
  12. 一个 38 岁程序员的中年危机
  13. logstash+elasticsearch +kibana 日志管理系统
  14. SPC-Light显示正常的日期与时间
  15. C#中如何跨窗体传值
  16. 屏幕录像专家录制视频时不能全屏
  17. 毕业论文答辩ppt怎么做?
  18. 大气数据计算机英语,大气数据计算机(ADC)
  19. QQ抢车位助手(结尾)
  20. 飞鹅WiFi打印机配置,php调用接口

热门文章

  1. Web3.0世界知识体系分享-Web3.0基本载体(NFT)
  2. 如何在Python编码面试中脱颖而出
  3. IPD解读——从核心思想分析IPD体系
  4. OSV 智能桌面虚拟化_教育桌面云解决方案
  5. 【学习笔记】min-height、max-height、line-height
  6. QT5 隐藏系统标题栏,自己编写个性靓丽标题栏
  7. 五种常见的电子商务模式:B2B、B2C、C2B、C2C、O2O
  8. UVA之11462 - Age Sort
  9. 15.2 Content-Length 实体的大小
  10. 【论文翻译】HCL2000—A Handwritten Chinese Character Database