1.glViewport()  用来设置视口大小

void glViewport(GLint x,GLint y,GLsizei width,GLsizei height);

对于一个OpenGL坐标(xnd,ynd),它变换后的坐标为(Xw,Yw),那么变换公式为

解释一下这个公式的意义:视口变换也就是glViewport()做的工作,它是把OpenGL的标准化设备坐标转换为屏幕空间坐标,而OpenGL的标准化设备坐标是(-1,1),视口变换需要将该坐标变换到glViewport()参数指定的坐标范围内,所以就出现了上面的公式。它就是将经过了MVP矩阵变换后的三维坐标转换为二维空间的屏幕坐标,缺少的“第三维”就是深度信息,会被存储在z-buffer

2.glViewport()的使用

视口变换通常要出现在调整OpenGL窗口大小的时候,如果改变了窗口大小,但是没有进行视口变换是肯定会出错的,比如你在屏幕中心绘制了一个三角形,如果没有进行视口变换,那么当年改变窗口大小的时候,发现这个三角形没有任何变换。但是如果进行了视口变换,它就会自动根据窗口的大小去调整三角形的位置,三角形永远在窗口的正中心。

这个是通过glfwSetFramebufferSizeCallback()设置对应的回调函数来实现的。

glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);

函数原型:glfwSetFramebufferSizeCallback(GLFWwindow* window,GLFWframebuffersizefun),第一个是指定当前窗口,第二个是一个函数指针类型,其定义如下 typedef void(* GLFWframebuffersizefun)(GLFWwindow *,int ,int);

所以我们可以注册一个回调函数

void framebuffer_size_callback(GLFWwindow* window, int width, int height) {glViewport(0,0,width,height);
}

这样,当改变窗口的大小以后,也能进行正确的视口变换了。

OpenGL glViewport()函数相关推荐

  1. OpenGL之glViewPort函数的用法

    其函数原型为:glViewport(GLint x,GLint y,GLsizei width,GLsizei height) x,y 以像素为单位,指定了视口的左下角位置. width,height ...

  2. glViewport()函数和glOrtho()函数的理解

    在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体. 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况.比如,常用的工 ...

  3. glViewport()函数和glOrtho()函数的理解(转)

    在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体. 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况.比如,常用的工 ...

  4. glViewport函数和glOrtho函数的理解

    在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体. 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况.比如,常用的工 ...

  5. OpenGL gluLookat()函数的实现

    OpenGL gluLookat()函数的实现 函数形式: gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble center ...

  6. OpenGL画矩形函数:glRectf,四个参数分别表示了位于对角线(左下到右上)上的两个点的横纵坐标

    OpenGL画矩形函数:glRectf glRectf:画一个矩形,四个参数分别表示了位于对角线(左下到右上)上的两个点的横纵坐标(并且以窗口的中心点为原点,相当于以它为原点建立了一个二维坐标系) 例 ...

  7. OpenGL的函数(GL)

    目前OpenGL的函数主要包含在3个库中  1.GL 函数库  2.GLU 函数库  3.GLUT 函数库 1.GL 库函数  颜色编辑  -------------------  glShadeMo ...

  8. glViewport函数用法

    一. 其函数原型为glViewport(GLint x,GLint y,GLsizei width,GLsizei height) x,y 以像素为单位,指定了窗口的左下角位置. width,heig ...

  9. OpenGL QT glViewport 函数的作用

    函数原型: void glViewport(GLintx, GLinty, GLsizeiwidth, GLsizei height) 函数作用: 改变OpengL描绘结果原点在屏幕的位置及尺寸 参数 ...

最新文章

  1. springmvc集成oracle,SpringMVC整合druid
  2. PS如何批量生成缩略图(方法可以通用其他重复劳动)
  3. 推荐系统炼丹笔记:阿里边缘计算+奉送20个推荐系统强特
  4. jpa添加索引的几种方式
  5. ES6+mocha+istanbul,针对ES6语法的带覆盖率检查的mocha测试
  6. python3 类实例化流程
  7. 从 TFS 迁移源代码到 git
  8. cma检测_CMA检测方法
  9. Redis——持久化RDB和AOF
  10. 解决Chrome浏览器不能访问https网站的问题
  11. RabbitMQ 概念
  12. 几个清华和交大学霸的公众号,值得学习
  13. 清华刘知远:教你用HowNet在深度学习时代搞事情(附论文下载)
  14. win10 安装redis 解压版
  15. 2017兰州高中计算机考试时间,兰州2017年中考考试时间安排
  16. 百度mip推送工具_链接提交主动推送(实时)、熊掌号天级/周级提交、MIP提交
  17. DS二叉树—二叉树构建与遍历(不含框架)
  18. 22(线性方程组求解)高斯赛德尔迭代法
  19. Google Map API 使用总结
  20. flash保存html,如何把网页上的flash动画保存为swf格式文件(缓存提取)

热门文章

  1. Android 开发 必会的框架和库
  2. md5 加盐原理和常用的加盐方法
  3. log4j2配置说明
  4. ES生产集群部署之必须根据自己的集群设置的一些重要参数
  5. Android Activity栈管理 制定关闭某一个Activity,关闭所有Activity
  6. docker inspect命令查看镜像详细信息
  7. MySQL——用IDEA连接数据库
  8. Jquery实现广告滚动
  9. FFMPEG转换视频格式amv
  10. oralce 查看表空间使用情况