您所在的位置:读书频道 > 设计开发 > 其它开发 > 8.1.1 当前光栅位置

8.1.1 当前光栅位置

2008-09-02 11:42 (美)Dave Shreiner等著/徐波译 机械工业出版社 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

《OpenGL编程指南》第8章绘制像素、位图、字体和图像,这一章描述如何把像素数据(位图和图像)从内存绘制到帧缓冲区,以及如何把像素数据从帧缓冲区读取到内存,还描述了如何把像素数据从一个位置复制到另一个位置,即可以从一个缓冲区复制到另一个缓冲区,也可以在同一个缓冲区中进行复制。本小节为大家介绍当前光栅位置。

AD:

8.1.1 当前光栅位置

当前光栅位置就是开始绘制下一幅位图(或图像)的屏幕位置。在前面这个F例子中,光栅位置是通过以坐标(20,20)为参数调用glRasterPos*()函数而设置的,它就是屏幕左下角开始绘制F的地方:

glRasterPos2i(20, 20);
void glRasterPos{234}{sifd}(TYPE x, TYPE y, TYPE z, TYPE w);
void glRasterPos{234}{sifd}v(TYPE *coords);

设置当前的光栅位置。x、y、z和w参数指定了光栅位置的坐标。如果使用的是这个函数的向量形式,coords参数包含了光栅位置的各个光标。如果使用的是glRasterPos2*(),z被隐式设置为0,w被隐式设置为1。类似,如果使用的是glRaster3*(),w被设置为1。

光栅位置的坐标被变换为屏幕坐标,就像以它为参数调用了glVertex*()函数一样(也就是说,用模型视图和投影矩阵进行变换)。在变换之后,它或者定义了视口中一个有效的点,或者由于位于视景体的外部而被裁剪掉。如果经过变换的点被裁剪掉,当前的光栅位置就是无效的。

在1.4版本之前,如果我们想根据窗口坐标(屏幕坐标)来指定光栅位置,必须设置模型视图和投影矩阵来实现简单的2D渲染。我们使用类似下面这样的代码,其中width和height表示视口的大小(以像素为单位):

原书第306页
代码


在1.4版本中,glWindowsPos*()函数是作为glRasterPos*()函数的替代品被引入的。glWindowsPos*()用窗口坐标指定当前光栅位置,而不必把它的x和y坐标通过模型视图和投影矩阵进行变换,也不会被裁剪出视口区域。glWindowsPos*()使我们更容易混合使用2D文本和3D图形,而不必在各种变换状态之间反复切换。

 void glWindowsPos{23}{sifd}(TYPE x, TYPE y, TYPE z);
void glWindowsPos{23}{sifd}v(TYPE *coords);

设置当前光栅位置,以窗口坐标x和y为参数,不必进行矩阵变换、裁剪或纹理坐标生成。z值被变换为(并截取为)由glDepthRange()函数所设置的当前近侧平面值和远侧平面值。如果使用的是向量形式,coords数组包含了光栅位置的各个坐标。如果使用的是glWindowPos2*(),z被隐式设置为0。

为了获取当前的光栅位置(不管由glRasterPos*()设置还是由glWindowsPos*()设置),可以用GL_CURRENT_RASTER_POSITION为第一个参数调用查询函数glGetFloatv(),它的第二个参数应该是个指针,指向保存了(x,y,z,w)值(浮点数形式)的数组。以GL_CURRENT_RASTER_POSITION_VALID为第一个参数调用glGetBooleanv()可以确定当前的光栅位置是否有效。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

关于OpenGL  编程  像素数据  OpenGL编程指南的更多文章
Qt编程基础入门

本专题为Qt编程基础入门。Qt是诺基亚开发的一个跨平台的C++图形[详细]

网友评论TOP5

查看所有评论(

提交评论

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点专题

更多>>

读书

SUN Solaris 9/10系统管理员认证指南
本书专门根据SUN官方的SCSA for Solaris 9&10考试大纲撰写而成,全面覆盖了SCSA for Solaris 9/10的认证考点,除此之外本书还有

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone