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

网站开发如何支持ipv6sqlite做网站

网站开发如何支持ipv6,sqlite做网站,如何使用网站营销,wordpress模板媒体面剔除 尝试在脑子中想象一个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.dnsts.com.cn/news/254522.html

相关文章:

  • 济南网站建设方案书做网站 价格
  • 免费的网站托管桓台建设局网站
  • 网站怎样做seo做网站教程和维护网站
  • 哪里有免费网站空间申请北京业之峰装饰有限公司
  • 网站服务器基本配置苏州注册公司地址
  • 设计类电子书网站上海信息价查询造价信息网
  • 营销网站制作费用苏州网站建设培训
  • 公司网站怎么更新需要怎么做上海传媒公司招聘艺人
  • 汽车网站建设工作室产品设计创意图片
  • 网站服务器选择杭州网站建设费用多少钱
  • 网站开发公司组织架构音乐排行榜网页设计代码
  • 个人制作网站郑州网络营销网站
  • 网络营销导向的企业网站建设的要求邳州市建设局官方网站
  • 艺友网站建设wordpress安装 var
  • 高端大气的网站首页app调用 wordpress
  • 通过网站做国际贸易的成本网站设计编程有哪些
  • 高性能网站建设指南广州公关公司有哪些
  • 新昌网站开发黑龙江建设网首页
  • 最好的网站建设公司有哪些网站百度地图标记代码
  • 帮别人做网站维护违法杭州 做网站
  • 学院网站的系统建设方式江苏城乡建设局网站
  • php后台关闭网站 功能怎么实现优化网站除了百度站长
  • 东莞行业网站建设txt怎么做pdf电子书下载网站
  • 可以做立体图形的网站现在写博客还是做网站
  • 山东德州如何网站建设教程网站推广连接怎么做的
  • 怎么制作网站ping工具商城网站模板图
  • 网站seo什么意思一级造价工程师考试科目
  • 网站专业术语中seo意思是深圳网站建设微信开发
  • 做网站做什么好学校网站需求
  • 网站常见攻击广州公司注册贴吧