当前位置: 首页 > news >正文

深圳网站营销推广公司电话贵阳做网站的公司

深圳网站营销推广公司电话,贵阳做网站的公司,wordpress带会员中心主题,如何做seo搜索引擎优化面剔除 尝试在脑子中想象一个3D立方体#xff0c;数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了#xff0c;你应该能得出最大的面数是3。你可以从任意位置和任意方向看向这个球体#xff0c;但你永远不能看到3个以上的面。所以我们为什么要浪费时间…面剔除 尝试在脑子中想象一个3D立方体数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了你应该能得出最大的面数是3。你可以从任意位置和任意方向看向这个球体但你永远不能看到3个以上的面。所以我们为什么要浪费时间绘制我们不能看见的那3个面呢如果我们能够以某种方式丢弃这几个看不见的面我们能省下超过50%的片段着色器执行数 我说的是超过50%而不是50%因为从特定角度来看的话只能看见2个甚至是1个面。在这种情况下我们就能省下超过50%了。 这是一个很好的主意但我们仍有一个问题需要解决我们如何知道一个物体的某一个面不能从观察者视角看到呢 如果我们想象任何一个闭合形状它的每一个面都有两侧每一侧要么面向用户要么背对用户。如果我们能够只绘制面向观察者的面呢 这正是面剔除(Face Culling)所做的。OpenGL能够检查所有面向(Front Facing)观察者的面并渲染它们而丢弃那些背向(Back Facing)的面节省我们很多的片段着色器调用它们的开销很大。但我们仍要告诉OpenGL哪些面是正向面(Front Face)哪些面是背向面(Back Face)。OpenGL使用了一个很聪明的技巧分析顶点数据的环绕顺序(Winding Order)。 环绕顺序 当我们定义一组三角形顶点时我们会以特定的环绕顺序来定义它们可能是顺时针(Clockwise)的也可能是逆时针(Counter-clockwise)的。每个三角形由3个顶点所组成我们会从三角形中间来看为这3个顶点设定一个环绕顺序。 可以看到我们首先定义了顶点1之后我们可以选择定义顶点2或者顶点3这个选择将定义了这个三角形的环绕顺序。下面的代码展示了这点 float vertices[] {// 顺时针vertices[0], // 顶点1vertices[1], // 顶点2vertices[2], // 顶点3// 逆时针vertices[0], // 顶点1vertices[2], // 顶点3vertices[1] // 顶点2 };每组组成三角形图元的三个顶点就包含了一个环绕顺序。OpenGL在渲染图元的时候将使用这个信息来决定一个三角形是一个正向三角形还是背向三角形。默认情况下逆时针顶点所定义的三角形将会被处理为正向三角形。 当你定义顶点顺序的时候你应该想象对应的三角形是面向你的所以你定义的三角形从正面看去应该是逆时针的。这样定义顶点很棒的一点是实际的环绕顺序是在光栅化阶段进行的也就是顶点着色器运行之后。这些顶点就是从观察者视角所见的了。 观察者所面向的所有三角形顶点就是我们所指定的正确环绕顺序了而立方体另一面的三角形顶点则是以相反的环绕顺序所渲染的。这样的结果就是我们所面向的三角形将会是正向三角形而背面的三角形则是背向三角形。下面这张图显示了这个效果 在顶点数据中我们将两个三角形都以逆时针顺序定义正面的三角形是1、2、3背面的三角形也是1、2、3如果我们从正面看这个三角形的话。然而如果从观察者当前视角使用1、2、3的顺序来绘制的话从观察者的方向来看背面的三角形将会是以顺时针顺序渲染的。虽然背面的三角形是以逆时针定义的它现在是以顺时针顺序渲染的了。这正是我们想要剔除Cull丢弃的不可见面了 在顶点数据中我们定义的是两个逆时针顺序的三角形。然而从观察者的方面看后面的三角形是顺时针的如果我们仍以1、2、3的顺序以观察者当面的视野看的话。即使我们以逆时针顺序定义后面的三角形它现在还是变为顺时针。它正是我们打算剔除丢弃的不可见的面 进行面剔除 在本节的开头我们就说过OpenGL能够丢弃那些渲染为背向三角形的三角形图元。既然已经知道如何设置顶点的环绕顺序了我们就可以使用OpenGL的面剔除选项了它默认是禁用状态的。 在之前教程中使用的立方体顶点数据并不是按照逆时针环绕顺序定义的所以我更新了顶点数据来反映逆时针的环绕顺序你可以从这里复制它们。尝试想象这些顶点确认在每个三角形中它们都是以逆时针定义的这是一个很好的习惯。 要想启用面剔除我们只需要启用OpenGL的GL_CULL_FACE选项 glEnable(GL_CULL_FACE);从这一句代码之后所有背向面都将被丢弃尝试飞进立方体内部看看所有的内面是不是都被丢弃了。目前我们在渲染片段的时候能够节省50%以上的性能但注意这只对像立方体这样的封闭形状有效。当我们想要绘制上一节中的草时我们必须要再次禁用面剔除因为它们的正向面和背向面都应该是可见的。 OpenGL允许我们改变需要剔除的面的类型。如果我们只想剔除正向面而不是背向面会怎么样我们可以调用glCullFace来定义这一行为 glCullFace(GL_FRONT);glCullFace函数有三个可用的选项 GL_BACK只剔除背向面。GL_FRONT只剔除正向面。GL_FRONT_AND_BACK剔除正向面和背向面。 glCullFace的初始值是GL_BACK。除了需要剔除的面之外我们也可以通过调用glFrontFace告诉OpenGL我们希望将顺时针的面而不是逆时针的面定义为正向面 glFrontFace(GL_CCW);默认值是GL_CCW它代表的是逆时针的环绕顺序另一个选项是GL_CW它显然代表的是顺时针顺序。 我们可以来做一个实验告诉OpenGL现在顺时针顺序代表的是正向面 glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glFrontFace(GL_CW);这样的结果是只有背向面被渲染了 注意你可以仍使用默认的逆时针环绕顺序但剔除正向面来达到相同的效果 glEnable(GL_CULL_FACE); glCullFace(GL_FRONT);可以看到面剔除是一个提高OpenGL程序性能的很棒的工具。但你需要记住哪些物体能够从面剔除中获益而哪些物体不应该被剔除。
http://www.zqtcl.cn/news/220739/

相关文章:

  • 网站域名备案信息wordpress搜索文章内容
  • 出口退税在哪个网站做怎么在一起做网站上拿货
  • 网站友链查询传到网站根目录
  • 网站服务器端口设置北京专业网络直播制作
  • 可以免费做演播的听书网站南京企业自助建站
  • 软件下载类型网站怎么做长沙官网优化技术
  • 药品网站订单源码外贸网站建设服务器
  • 深圳网站制作07551免费开发网站
  • 如何直接用jsp做网站不写servletwordpress模板 单栏
  • 长沙网站建设哪个公司好设计公司网站 唐山
  • 原创小说手机网站制作需要多少钱郴州seo外包
  • 深圳市大鹏建设局网站网站关键词没排名怎么办
  • 水果商城网站制作多少钱c#如何做公司网站
  • 国内做进口的电商网站网站建设的经验做法
  • 蚂蚁搬家公司官方网站免费网站软件制作
  • 搭建网站要用到的工具外链代发免费
  • 肥城网站建设流程oem中国代加工网
  • 到底建手机网站还是电脑网站网站视频怎么做
  • 小区网站建设前端手机网站
  • 做一个网站价格WordPress好看的404
  • 查看注册过的网站在线网站软件免费下载
  • 门户网站建设公司价位域名出售网站
  • 亿级流量网站架构自己制作一个网站
  • 企业网站seo成功案例天津网站建设制作品牌公司
  • 衡水做网站电话郏县建设局网站
  • 美工做网站尺寸多少钱怎么做网站免费的
  • 会计信息系统网站建设流程图手机网站图片宽度
  • 已备案网站增加域名wordpress 百度熊掌号
  • 网站建设维护课件ppt百度搜索一下百度
  • 重庆企业网站开发方案wordpress菜单插件