位置: 编程技术 - 正文

Tutorial2 Hello dot!

编辑:rootadmin

推荐整理分享Tutorial2 Hello dot!,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

本文源自: dotbackgroundSource walkthru

Hello dot!background

这是我们第一次遇到GLEW,OpenGL的扩展库。GLEW帮助你解决管理OpenGL扩展上伴随而至的一些头痛的问题。一旦(GLEW)初始化,它将查询你所在平台所有可用的扩展并动态的载入,通过调用一个头文件便能够提供访问。 在这个教程中我们将第一次见识到顶点缓冲对象(VBOs)的用法。正如名字所暗示的一样,它们被用作保存一些顶点。那些你想使之可视化的3D世界物体,比如:怪物,城堡或者一个简单的旋转立方体,它们通常由一组顶点互相连接所构成。VBOs就是把顶点载入GPU的最有效的方式。它们是显存里面的缓冲区,并能够用最短的时间访问GPU,所以受到很大地推荐。

在所有教程中,只有这一个和下一个教程是依靠固定管线,而不是可编程管线。事实上,这两个教程均没有发生任何变换。我们简单使用数据穿梭于管线中的方式。下一个教程中会深入的学习管线,但是光栅化(在屏幕坐标系里面绘制一些点、线和三角形)之前,我们很容易理解,每个需要显示的顶点有X,Y,Z三个坐标分量,他们的取值是在[-1.0,1.0]区间里。光栅能够把这些坐标映射到屏幕空间里面(比如,如果屏幕的宽度是,那么X坐标为-1.0时会映射到0,1。0则会被映射到)。最后,光栅器会按照在绘制调用的拓扑顺序,逐个画出绘制调用中的图元。由于我们并没有为管线关联着色器,所以我们的顶点并没有发生任何变换。这就意味着我们只需要给予顶点在这个范围内的取值,这样就可以显示出来。事实上,当X和Y都为0的时候正好是这两个坐标轴的中间,换句话来说就是屏幕的中央。

GLEW的安装:GLEW可以从他的主页 walkthru

这里我们GLEW的头文件包含进去。如果你包含了其他的OpenGL的头文件,那你必须要在需要再他们之前包含这个头文件,否则GLEW会出错。另外你需要把“-lGLEW”加入makefile文件中以保证程序能够链接成功。

在我们的教程里,我们开始使用一些实用性的数据结构比如向量vector。在后面我们会更深入探索这个头文件。

在这里,我们初始化了GLEW并检查是否出现了其他问题。需要注意的是这个步骤必须在GLUT初始化后去完成。

我们创建了一个Vector3f结构体(这个类型是再math_3d.h头文件中定义的),并把XYZ都初始化为零。这个数据会让一个点显示在屏幕的正中央。

我们在程序的全局部分配了一个GLuint的变量,这个变量储存顶点缓冲对象的句柄。而在后面你会发现,大多数OpengGL的对象的访问需要调用一些GLuint类型对象。

Tutorial2 Hello dot!

OpenGL定义了一系列用于产生不同类型对象glGen*的函数。他们经常拥有两个参数-第一个指定了需要产生多少个对象,另一个则是用于存取驱动为你分配的句柄的数组的地址(你要保证数组要足够长以满足你的请求)。在后面调用这个函数并不会产生相同的对象,除非你先用glDeleteBuffers函数先删除他们。需要注意的是,你并没有指明你在缓冲区(buffer)上的意图,所以他们会被认作是“通用的(generic)”。而这个正是下个函数所做的事情。

OpenGL用有一个相当特殊的使用句柄的方式。在大多数的APIs中,句柄是直接传入相关函数中,并直接作用于句柄上。在OpenGL中我们直接把句柄与target绑定在一块,然后直接在目标上处理命令。这些命令会一直影响这个绑定过的句柄,直到用另一个句柄或者是一个空句柄代替前一个绑定。Target GL_ARRAY_BUFFER意味着缓冲区会包含一个顶点数组。另一个实用的target是GL_ELEMENT_ARRAY_BUFFER,它意味着缓冲区包含这另一个顶点缓冲区的顶点索引。其他的Target同样是可用的,我们会再后面的教程中看到他们。

在绑定了我们的对象后,我们需要位置填充数据。上面的调用传入了target的名字(和我们用于绑定所使用过的一致)、顶点数组的地址和一个用于表明数据的使用模式的标志。因为我们并不打算直接修改缓冲区的内容所以我们指定了GL_STATIC_DRAW。与之相反的是GL_DYNAMIC_DRAW。尽管这些标志对于OpenGL来说只是很小的变动,但使用确切的标志不失为一件好的事情。驱动可以通过这个标志做一些启发性优化(比如在内存中找到最好的位置储存缓冲区)

在着色器的教程中,你会发现着色器所使用的顶点属性(位置,法线等等)都有一个映射索引,这个索引可以把在你C/C++程序中的数据与相应着色器中的属性名绑定在一起。此外你必须开启每一个顶点属性索引。在这个教程里我们并没有使用任何一个着色器,但是在固定管线中(在没有绑定任何一个着色器的时候会被激活),我们载入进缓冲区的顶点位置的顶点属性索引会被设置为0。你必须开启每一个顶点属性索引,否则数据不会被渲染管线所访问。

这里,我们再次为绘制调用绑定我们的缓冲区。在这个小的程序里面,我们只有一个顶点缓冲区所以在每一个帧里面调用这个命令是多余的。但是再更复杂的程序里面,他们包含了各种各样的缓冲区去储存你各式各样的模型,这样你就必须根据需求实时更新渲染管线中的状态。

这个调用告诉渲染管线如何阐述再缓冲区里面的数据。第一个参数指定了属性的索引。在我们的例子中,我们使用0作为索引的默认值,但当我们使用着色器的时候我们既需要明确的设置在着色器中的索引,也需要查询这个索引。第二个参数在属性的组件内部的数目(3 代表x y 和z)。第三个参数就是每个组件的数据类型。下一个参数这暗示了我们是否需要我们的属性在渲染管线使用前进行标准化。显然,再我们不想让我们传入的数据作任何变化。第五个参数(称作“幅度”),它代表缓冲区中两个属性点的字节数。由于只有一个属性(比如缓冲区仅仅包含了顶点位置),那么数据是紧密相连的的我们便传入0.如果我们有一个结构体的数组,这个结构体包含了位置和法线(他们均为一个向量既3个浮点型),我们需要传入结构体的比特单位的大小(6*4=)。最后一个参数在前面的例子中相当地实用。我们需要指定渲染管线所找到的属性结构体的偏移值。在这种位置和法线的结构体的情况下,位置的偏移量是0,法线的偏移量则为。

最后,我们终于使用了绘制几何图元调用。我们看到的所有在绘制命令之前的命令都是至关重要的。这才是GPU真正开始工作的地方。在已经搭建好的状态上,它将综合绘图调用的一系列参数,并把结果渲染到屏幕上面。

OpenGL提供了多种类型的绘制调用,每一个调用适用于不同的状态下。通常情况下,你可以把他们划归为两类——顺序性绘制和索引性绘制。顺序性绘制更简单一点。GPU会逐个遍历你的顶点缓冲中的顶点,并根据指定在绘制调用中的拓扑顺序去解释。比如,如果你指定了GL_TRIANGLES那么0-2的顶点会成为第一个三角形,3-5第二个,等等。如果你想让同样的顶点显示在不止一个三角形中,你需要两次在顶点缓冲中指定,这样是及其浪费空间的。

索引绘制就更复杂了,包含了一个称作索引缓冲的缓冲区。索引缓冲包含了在顶点缓冲区中顶点的索引。GPU会以类似索引0-2可以成为第一个三角形这种方式和其他的方式来扫描索引缓冲区。如果你想要再两个三角形使用同一个顶点,那么你只需要在索引缓冲区中指定两次。而顶点缓冲区则需要一份拷贝。索引绘制再游戏中更常见一些,因为大多数的模型由一系列可以代表表面(人的皮肤,堡垒城墙,等等)的三角形产生,他们之间会共用许多顶点。

在这个教程中我们使用了那个到了最简单的绘制调用——glDrawArrays。这是一个顺序性的绘制所以它没有使用到索引缓冲。我们指定了以点作为拓扑顺序,这就意味着每个顶点就是一个点。下一个参数便是我们第一个要绘制顶点的索引。在我们的例子中,我们想要再缓冲区的开始部分进行绘制,所以我们指定了0,但是这个可以让我们能够再一个缓冲区中存储多个模型,然后选择其中一个并指定它在缓冲区的偏移值。最后一个参数是要绘制顶点的数目。

在不立即使用顶点属性的时候,关闭这些顶点属性是一种相当良好的习惯。在着色器不使用这些顶点属性的时候,让它们处于开启状态无疑是自讨麻烦。

opengl 绘制绕远点转的飞机 1、绘制飞机方法draw_plane()voiddraw_plane(){floatscale=1.0f;glLineWidth(6.0f);glColor3f(1.0,0.0,1.0);glPushMatrix();glScaled(0.f*scale,0.f*scale,0.f*scale);glPushMatrix();glRotated(.0f,

opengl 4.X off-screen rendering openGL可以渲染屏幕的framebuffer,自然可以渲染不直接显示的framebuffer,把数据存入非直接显示的framebuffer中以便后续的渲染需求,或者直接存入纹理贴图te

GLSL 卡通shader 浏览Geeks3D,发现一个好玩儿的shader,改了个gles版本,用cocos2dx在iphone上跑了一下,效果如图:原文shader是gl版,在手机上跑的很慢,iphone5全屏处理情况

标签: Tutorial2 Hello dot!

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

上一篇:对Android opengl ES世界坐标系和纹理坐标系的理解(安卓opengl es)

下一篇:opengl 绘制绕远点转的飞机(opengl画曲线)

  • 陈列费可以开专票吗
  • 安徽增值税发票勾选认证流程
  • 境内单位和个人向境外单位提供服务
  • 企业所得税中资产折旧调整明细表中提示折旧年限
  • 应交所得税的计算公式
  • 企业接受捐赠固定资产计入什么科目
  • 报废车残值款计入什么科目
  • 所得税多交退税分录
  • 砖厂开票员的工作流程
  • 已经抵扣过的进项票对方红冲之后怎么做账报税
  • 2020年建筑企业税收优惠政策
  • 新会计准则下接会计科目
  • 自建固定资产入账
  • 持有待售资产固定资产 要计提折旧吗
  • 冲暂估成本的会计分录
  • 出售股票会计怎么做分录
  • 收到的借款利息计入什么科目
  • 开具发票有哪些特殊规定?
  • 公司以银行存款名义为员工垫付医疗费分录怎么写
  • 蓝字发票是什么
  • 预交印花税会计分录
  • 租赁发票需要写税号吗
  • 老板在外地怎么辞职
  • 管理费用明细是什么意思
  • 企业外购材料的入账价值包括
  • 交通票报销有哪些
  • 个人补缴公积金需要什么手续
  • windows伪装电脑mac
  • 个体户生产经营费用与家庭生活费用无法划分
  • PHP:oci_lob_is_equal()的用法_Oracle函数
  • 如何设置鼠标移过超链接
  • 如何认定坏账
  • fsma32.exe进程是什么文件 fsma32是什么进程
  • 应收账款需要计提损失准备吗
  • php文件包含的4种方式
  • javascript手机编程
  • flask实现登录
  • flask框架入门
  • username命令
  • 什么发票才能做账务处理
  • 置顶文章
  • 员工体检费计入福利费吗
  • 个人开具工程款发票
  • 预收账款的会计要素
  • 新旧会计准则对比
  • 小规模纳税人会自动转为一般纳税人
  • 职工福利费的开支是什么
  • 预期信用损失率的确认依据和过程
  • 融资租赁的增值税专用发票可不可以抵扣
  • 过期产品进项税用转出吗
  • 固定资产暂停使用申请怎么写
  • 现金流量少
  • 工程安装公司注册条件
  • 一般账户的网银操作员变更怎么办理
  • 建账之前的业务怎么处理
  • 收不回来的应收账款会计分录
  • 以前年度应交税费多计提怎么调平
  • 公司向个人借款合法吗
  • 简易征收可以抵税吗
  • mysql中的存储过程
  • sql server重新安装步骤
  • mysql5.7安装版下载
  • explain分析sql效率的方法
  • windows隐藏文件夹开启
  • 在solaris8下
  • 提高系统能力
  • linux安装sshpass
  • centos7.6和7.7
  • win1020h2正式版下载
  • win8怎么找开始程序
  • Windows8和Windows8 RT版的区别介绍
  • python获取命令行执行命令的输出
  • cocos2d-x教程
  • xml文件示例
  • linux中命令行
  • 解决口苦的最佳方法
  • jquery网页设计
  • python 汉诺塔
  • 集资房税收问题
  • 盐城买家电到哪里买
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设