位置: 编程技术 - 正文

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 抗锯齿)

  • 工商年报资产状况纳税总额怎么计算?
  • 研发支出月末结转转去哪里?
  • 小规模没有税控怎么办
  • 已经认证不能抵扣怎么办
  • 资产负债表总账科目有哪些
  • 私营独资企业可以变更法人吗
  • 购置税发票如何下载
  • 免税农产品如何填报企业所得税季报
  • 赠品折扣计算法
  • 产品成本计算的公式
  • 采购运输管理系统
  • 工资薪金所得适用的税率是
  • 简易计税 增值税专用发票
  • 房产税的征收对象有哪些
  • 增值税发票的基数是什么
  • 会务费税目
  • 企业残疾人保障金
  • 免征的教育费附加如何账务处理
  • 没有发票的业务财务能挂帐吗
  • 事业单位购买固定资产费自行
  • 企业不动产销售包括哪些
  • 小规模纳税人可以开专票吗
  • 一般纳税人出租不动产
  • 经营出租固定资产折旧额计入什么科目
  • iphone操作系统
  • PHP:eregi_replace()的用法_Regex正则函数
  • 保证金结息的会计分录
  • 设备进项抵扣新政策
  • lsm.exe是什么程序
  • php odbc
  • 建筑业主营业务收入二级科目有哪些
  • ieview.exe 是什么
  • php不能通过浏览器运行吗
  • vue状态管理有哪些
  • php框架零基础入门
  • php trim函数
  • 编制资产负债表的基础
  • php递归函数桃子一天吃一半
  • php字符串处理函数有哪些
  • 年终奖要计入工资吗
  • 投资他人公司
  • wp留言板插件
  • 想要上海名媛群群号
  • 基于法律行为的物权变动模式包括
  • 培训费属于什么
  • 专项应付款 会计分录
  • 偿还银行贷款利息计算
  • sql server 递归
  • 应交税费为什么写在借方
  • 个人银行账户进账多少
  • 计提城建税的会计分录怎么写
  • 核价人员要对哪些方面的价格进行核定,怎么核?
  • 施工企业工人工作总结
  • 红字更正法和红字冲销
  • 同比增长率环比增长率怎么算
  • 上年亏损本年要交税吗
  • 交增值税账务处理
  • 收回投标保证金 建立台账
  • 专家咨询费支付标准
  • 摊余成本计入哪里
  • 建账的过程包括哪些内容
  • win10周年更新版是什么意思
  • xp系统字体安装方法
  • winpe.wim怎么安装
  • ubuntu系统升级到18
  • win7怎么升级到win10系统软件还在吗
  • 教你在heroku云平台上部署Node.js应用
  • linux那么多命令怎么记
  • 如何让卖家给你乖乖退款
  • 网页字体大小调整方案
  • javascript简单
  • css ie8
  • Git 创建分支提交远程分支详解
  • node+express+ejs使用模版引擎做的一个示例demo
  • unity移动脚本代码
  • js基本代码
  • js的类型有哪几种
  • jquery访问本地html
  • 广东省国家税务局电子发票系统,网络设置
  • 党建与内控合规风险防范相融合
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设