位置: 编程技术 - 正文

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

  • 收取罚款
  • 离职员工奖金发放规定
  • 境外培训费计入关税完税价格
  • 利息收入交所得税吗
  • 关于美容院的会计如何做账
  • 外购商品赠送怎么做账
  • 资金收益率计应收账款吗
  • 小规模做账流程详细
  • 误餐补助缴个税怎么申报
  • 建筑工地的零星补单是指什么意思
  • 成品油购进数据未同步怎么办
  • 境外企业向境内提供国际运输服务核定征收的企业所得税
  • 办公用品报销项目怎么写
  • 增值税进项税抵扣规定
  • 支付车辆保险费及车船税会计科目
  • 开票含税和不含税怎么切换视频讲解
  • 民间非营利组织会计制度及操作实务
  • 滞纳金入什么会计科目
  • 客户支付货款时扣除了手续费
  • 路由器密码忘了怎么查到
  • 政府的奖励金计入哪个科目
  • 咨询服务费怎么交税
  • 不动产增值税怎么算
  • 公司一直是亏损怎么赔偿
  • 公司帮员工买社保能扣税吗
  • ac1203路由器
  • 中文最早出现的时期
  • TypeError: Cannot read properties of null (reading ‘insertBefore‘) vue项目报错
  • vue3框架的优点
  • 企业预缴增值税附加税率
  • 企业在什么情况下会被列入经营异常
  • 前端的基本知识
  • 筹建期如果是一般纳税人 专票以后可以留着抵扣吗
  • vscode怎么看错误提示
  • 关于古老的jsp页面的知识汇总(超详细)
  • web前端期末大作业旅游页面
  • pdclient
  • 人民币跨境贸易占比
  • 出口货物退货会退税吗
  • python __call__
  • 资产处置收益的账务处理
  • 即征即退进项划分说明
  • 小规模纳税人增值税计算公式
  • 印花税啥样
  • 银行汇票退票
  • 主营业务收入可以进一般户吗
  • 网络服务费计入什么费用
  • 定期存款账务怎么处理
  • 公司市场部门有什么职位
  • 以前年度损益调整怎么做账
  • 营改增适用范围
  • 村料采购会计科目有哪些
  • 中药饮片盘点损耗率 法律
  • 城市生活垃圾处理方式有哪几种
  • 资产减值损失冲减
  • 委托收款的流程
  • 公司的私账
  • sql中cursor是什么意思
  • sql server2019数据库
  • AppleMobileDeviceService.exe是什么进程?AppleMobileDeviceService.exe是病毒吗?
  • windows的实验步骤
  • windows2008版本区别
  • 主板各个系列详解
  • virtualbouncer.exe是什么进程
  • ubuntu sshserver
  • automaticupdate
  • win1020h2版本怎么更新
  • WIN7系统的镜像文件在哪里
  • 一个简单的灵魂福楼拜
  • python中pillow模块
  • EGL简介
  • python中的命名规范
  • angular卸载
  • js如何获取cookie的值
  • android 图片裁剪 任意形状
  • js 模板框架
  • 专项附加扣除当月填报何时生效
  • 江苏发票真伪查询网站
  • cfca证书下载流程
  • 国家实行什么制度鼓励电力用户合理调整用电负荷
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设