位置: 编程技术 - 正文

OpenGL编程逐步深入(二)在窗口中显示一个点(opengl csdn)

编辑:rootadmin
准备知识

推荐整理分享OpenGL编程逐步深入(二)在窗口中显示一个点(opengl csdn),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl编程宝典,opengl csdn,opengl编程语言,opengl例程,opengl编程语言,opengl 编程,opengl编程实例,opengl 编程,内容如对您有帮助,希望把文章链接给更多的朋友!

在本文中我们将会接触到OpenGl的扩展库GLEW( OpenGL Extension Wrangler Library),GLEW可以帮助我们处理OpenGl中繁琐的扩展管理。一旦初始化后可以查询当前平台中所有可用的扩展,能够动态的加载它们并通过一个单独的头文件来方便的使用这些扩展。 本教程中我们第一次使用的顶点缓存对象(VBOs),正如名字所暗示的,顶点缓存对象是用来存放顶点的。你能够想象到的3D世界中的所有对象,无论是怪物、城堡还是一个简单的旋转立方体,在计算机中都是通过一组顶点构成的。顶点缓存是將顶点加载到GPU最有效的方式,它是显存中的缓存数据,因此GPU能够使用较短的时间读取它们。 这一篇教程和下一篇是该系列教程中唯独的两篇使用固定渲染管道取代可编程管道。事实上这两篇教程中都没有任何变换操作,仅仅是將数据写入管道中。管道的概念将会在以后的教程介绍,现在需要掌握的是数据在到达光栅器之前,可见顶点的X/Y/Z坐标范围在[-1.0,1.0]之间就够了。光栅器会將这些坐标映射到屏幕中(例如屏幕的在水平方向是像素,那么-1.0对应屏幕的第0个像素,1.0对应屏幕的第个像素)。最后光栅器根据调用绘图函数时指定的绘图模式(例如GL_POINTS、GL_LINES)来绘制基本图形。由于我们没有为管线绑定任何着色器,所以我们的顶点并没有发生任何变换。这意味着我们只需要给顶点坐标一个在[-1.0,1.0]范围内的值,确保它能显示出来即可。如果將点的X/Y坐标值指定为0,该点就会显示在屏幕中央。

GLEW下载地址: 在上一篇文章中笔者提供的库文件压缩包中包含GLEW的库文件和头文件,使用方法请自行参考。

新建项目

1.在上一篇文章创建的解决方案中新建控制台项目。 2.在项目上点击右键,打开属性页在vc++目录中的包含目录中添加$(SolutionDir)Include路径;在库目录中添加$(SolutionDir)Lib路径。在链接器->输入->附加依赖项中添加freeglut.lib和glew.lib。

在窗口中显示一个点代码解读

这里包含GLEW头文件,为了能正确链接GLEW库文件,在链接器->输入->附加依赖项中添加glew.lib

创建顶点结构体,用来表示OpenGl中的顶点。

此处初始化GLEW并检查是否初始化成功,GLEW的初始化必须在GLUT之后。

创建Vector3f 结构数组,把X/Y/Z初始化为0,确保该点能显示在屏幕中央。

定义一个GLuint类型的全局变量用来存放顶点缓存对象的句柄,你將会看到大多数OpenGl对象都是通过GLuint类型的变量来访问的。

OpenGL编程逐步深入(二)在窗口中显示一个点(opengl csdn)

OpenGl定义了一些glGen*函数来产生各种类型的对象。这些函数通常有两个参数,第一个参数用来指定你想创建对象的个数,第二个参数是GLuints类型数组地址,用来存放为你分配的驱动句柄(请确保数组足够大来处理你的请求)。glGenBuffers用于产生缓冲区对象,之后再次调用该函数产生的句柄不会和先前的相同除非你有调用过glDeleteBuffers函数。需要注意的是此时你并没有说明如何使用该缓冲区,所以它被认为是“通用”的,这是为下一个函数的调用做准备工作。

OpenGl采用十分独特的方式使用句柄。在许多API中,句柄只是简单的传递给相关的函数,具体做什么操作由函数的其他参数指定。在OpenGl中我们將句柄和目标名绑定(GL_ARRAY_BUFFER为目标名,VBO为句柄),接着就会根据该目标名执行相应的命令。GL_ARRAY_BUFFER 表示该缓存区中包含一个顶点数组。另外一个有用的目标名为GL_ELEMENT_ARRAY_BUFFER,表示缓存区中数据为顶点在另一个缓存区的索引。其他目标名将会在以后的文章中见到。

在绑定我们的对象之后,我们需要向缓冲区对象中填充数据,该函数的参数分别是:目标名GL_ARRAY_BUFFER(需要和glBindBuffer函数绑定的一致),数据的大小,顶点数组的地址,数据使用模式标志。因为我们不会改变缓冲区内容,所以这里指定GL_STATIC_DRAW,和GL_STATIC_DRAW相反的是GL_DYNAMIC_DRAW。

在之后的着色器教程中,你会看到在着色器中使用顶点的属性,有一个索引映射到它们,使你能创建c/c++程序中的数据和着色程序中属性名之间的绑定。此外你还必须把每个顶点属性索引设置为允许状态,在本教程中我们没有使用着色器,顶点位置已经加载到缓存区,所以调用该函数將顶点属性索引设置为0。这个调用是必须的,否则管线无法访问缓存中的数据。

在这里我们再次绑定我们的缓冲准备进行绘制调用,在这个小程序我们只有一个顶点缓冲,但是在更复杂的程序中会用到更多的缓存来存储各种模型,还必须更新将要使用的缓冲对象的管线状态。

通过这个函数的调用告诉管线如何处理缓冲区中的数据,第一个参数指定属性索引,在这个例子中,我们知道它默认为0,但当我们使用着色器时,需要显式设置在着色程序中的索引值。第二个参数指定每个顶点属性的组件数量,必须为1、2、3或者4(本例中为3个,分别为X/Y/Z)。第三个参数是每个组件的数据类型。接下来的参数指定当被访问时,固定点数据值是否应该被归一化(GL_TRUE)或者直接转换为固定点值(GL_FALSE),这里我们设置为GL_FALSE。第五个参数指定连续顶点属性之间的偏移量,当只有一个属性或者数据紧密排列在一起时传入0。假如我们有一个包含位置和法线的结构体数组,该参数应该传入结构体所占字节数。最后一个参数非常有用,指定一个指针,指向数组中第一个顶点属性的第一个组件。

最后,我们调用该函数绘制几何图形。到目前为止我们看到的所有命令都很重要,但是它们只是为绘图命令做准备。直到此函数的调用,GPU才真正开始工作。结合第一个参数指定的绘制方式將图形渲染在屏幕上。 OpenGl为适应不同的情况提供了几种绘制方式。通常可以分为两类–顺序绘制和索引绘制。顺序绘制非常简单,GPU会遍历顶点缓冲区,然后根据指定的绘制方式生成几何图形,如果绘制方式指定为GL_TRIANGLES,第0~2个顶点构成第一个三角形, 第3~5 个顶点构成第二个三角形。如果你想要相同的顶点出现在不止一个三角形中,需要在顶点缓存中指定两次,这是很浪费空间的。 索引绘制相对复杂一些,会涉及到另一个缓存称为索引缓存。索引缓存中存放的是顶点在顶点缓存中的索引。GPU会扫描索引缓存,第0~2个索引指向的顶点构成第一个三角形,第3~5个索引指向的顶点构成第二个三角形。如果你需要两个三角形公用顶点,只需在索引缓存中指定。索引绘制方式在游戏中是非常常见的,因为大多数3D模型都是由无数个三角形构成的,有很多三角形都是共用顶点。 在这个案例中,我们只是简单的调用glDrawArrays绘制一个点。采用顺序绘制方式,所以不涉及到索引缓存。我们指定绘制方式为GL_POINTS意味着所有的顶点作为一个单独的点,不进行连线。第二个参数指定需绘制的第一个顶点的索引。在这个案例中我们需要从缓存区的第一个顶点点开始,所以参数指定为0。最后一个参数指定绘制顶点的数量(这里指定为1,表示只绘制一个点)。

当顶点属性不再使用时需禁用它,这是很好的编程习惯。

编译运行

编译运行程序,会发现屏幕中间显示一个白色的点。

源码下载:

OpenGL--抗锯齿 理论基础1,锯齿:在图元边缘处我们能相当清楚地看到两种颜色的分界,我们把这种称之为锯齿。为什么会产生?这是因为我们的图像是由一个个像素

【Cocos2d-x】截屏实现的两种方法RenderTexture和glReadPixel,实现和原理详细分析 很多游戏都有截屏的需求,比如截屏后与好友分享截图,或者为了减少渲染内容,在打开某个UI界面时隐藏后面的所有渲染,用截屏代替。截屏是一个比

透视投影详解 来源:cnblogs作者:zdd概述投影变换完成的是如何将三维模型显示到二维视口上,这是一个三维到二维的过程。你可以将投影变换看作是调整照相机的焦

标签: opengl csdn

本文链接地址:https://www.jiuchutong.com/biancheng/369524.html 转载请保留说明!

上一篇:OpenGL--混合(opengl混合模式)

下一篇:OpenGL--抗锯齿(opengles 抗锯齿)

  • 合伙企业税务筹划点
  • 劳保用品销售
  • 红字发票重复提交了数据该怎么处理
  • 固定资产残值怎么处理什么时候处理
  • 会计差错更正业务处理怎么操作?
  • 金税盘应用程序中发生了未经处理的异常
  • 进口一批原材料,海关核定的关税完税价格
  • 汽车进口税率表
  • 行政单位的存货是什么
  • 非盈利企业账务处理
  • 在杂志上发表论文
  • 查账征收所得税计税依据
  • 餐饮企业收到现金抵用券会计分录
  • 房地产开发经营属于什么行业类别
  • 个体户可以不领税控盘吗
  • 固定资产维修费率
  • 外籍人士离职补偿
  • 公司室内装修
  • Windows10如何切换中英文输入法
  • win7原版系统安装后没有任何驱动
  • win10系统还原会删除其他盘的文件吗
  • 如何免费获取Win11企业版
  • win11系统开机密码怎么修改
  • 公司专柜样品如何做
  • 销售送礼品
  • 如何修复面部毛孔粗大
  • 未售车位出租有哪些税要缴纳
  • 期货公司向客户收取的保证金属于谁所有
  • 永续债计入哪个会计科目
  • 银边翠的栽培历史
  • initpki.dll有什么用
  • 没收入长期待摊怎么办
  • 期初未缴税额有数字怎么处理
  • 适合练手的动漫人物
  • vue3的
  • idea实用技巧
  • 中小企业内部分析
  • 应收账款结账损失怎么算
  • 小规模纳税人开专票需要交税吗
  • 长期股权投资的明细科目有哪些
  • 织梦自适应代码怎么做
  • 解决Dede5.6联动类型更改排序数字的BUG
  • 公司采购不含税产品合法吗
  • 公户网银丢了
  • 资产总额是指营业收入和营业支出吗
  • 一条sql更新多条记录
  • MySQL进阶SELECT语法篇
  • mysql的lsn
  • 小规模第一次申报流程
  • 人力资源行业税收优惠
  • 实收资本期末需要结转吗
  • 服务业 费用可以暂估吗?
  • 销售商品开票税目
  • 工程完工后的质保金怎么入账
  • 房屋租赁费计入什么会计科目
  • 公司购买车
  • 网上打印的银行流水有公章吗
  • 公司开具电子发票是否取消纸质发票开具
  • 明细分类账的格式与登记方法
  • xp系统浏览器收藏夹文件位置
  • bios 设置
  • ccsve是啥
  • win10系统如何快速打开控制面板
  • ubuntu20.04怎么用
  • window10删除自带输入法
  • perl中的$1
  • unity中英文对照
  • unity3d读取gis数据
  • 原生js实现仿苹果Siri语音助手特效动画
  • 清理ie八
  • 非常漂亮的英文怎么说
  • unity开发用什么电脑比较好
  • tree cmd
  • listview控件设置多个列
  • linearlayout布局怎么设置
  • python批量创建文件
  • python 脚本编写
  • 环保税怎么申报?看完你就明白了
  • 理财持有时间
  • 医生算是公务员吗?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设