问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何获取opengl细分着色器的计算结果

发布网友 发布时间:2022-06-03 16:49

我来回答

1个回答

热心网友 时间:2023-10-23 11:30

  细分曲面过程并不对OpenGL典型的几何图元(点、线和三角形)进行操作,而是使用一个新的图元(在OpenGL 4.0版本中新增的),称为patch。patch由流水线中所有活动的着色阶段处理。相比起来,其它图元类型仅仅被顶点、片段和几何着色器处理,而旁通细分曲面阶段。实际上,如果有任一细分曲面着色器是活跃的,那么传递任何其它几何类型会产生一个GL_INVALID_OPERATION错误。相反地,如果企图渲染一个patch而没有任何细分曲面着色器(明确地说是一个细分曲面计算着色器;我们会看到细分曲面控制着色器是可选的),那么将也会得到一个GL_INVALID_OPERATION错误。

  patch仅仅是传入到OpenGL的一列顶点列表,该列表在处理期间保存它们的次序。当用细分曲面与patch进行渲染时,使用像glDrawArrays()这样的渲染命令,并指定从绑定的顶点缓存对象(VBO)将被读出的顶点的总数,然后为该绘制调用进行处理。当用其它的OpenGL图元进行渲染时,OpenGL基于在绘制调用中所指定的图元类型而隐式地知道要使用多少顶点,比如使用三个顶点来绘制一个三角形。然后,当使用一个patch时,需要告诉OpenGL顶点数组中要使用多少个顶点来组成一个patch,而这可以通过使用glPatchParameteri()进行指定。由同一个绘制调用所处理的patch,它们的尺寸(即每个patch的顶点个数)将是相同的。

  void glPatchParameteri(GLenum pname, GLint value);

  /**
  * 使用value来指定一个patch中的顶点个数。pname必须设置为GL_PATCH_VERTICES。
  * 如果value小于零或大于GL_MAX_PATCH_VERTICES,将会产一个GL_INVALID_ENUM的错误。
  * 一个patch的默认顶点个数是三。如果一个patch的顶点个数小于参数value值,那么该patch将被忽略,从而不会有几何图形产生。
  */
  要指定一个patch,使用类型GL_PATCHES输入到任一OpenGL绘制命令。以下代码描述了发射两个patch,每个patch含有四个顶点,然后通过glDrawArrays绘制命令进行渲染。

  复制代码
  GLfloat vertices[][2] = {
  {-0.75f, -0.25f}, {-0.25f, -0.25f}, {-0.25f, 0.25f}, {-0.75f, 0.25f},
  {0.25f, -0.25f}, {0.75f, -0.25f}, {0.75f, -0.25f}, {0.75f, 0.25f}, {0.25f, 0.25f}
  };

  glBindVertexArray(VAO);
  glBindBuffer(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  glVertexAttribPointer(vPos, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
  glPatchParameteri(GL_PATCH_VERTICES, 4);
  glDrawArrays(GL_PATCHES, 0, 8);
  每个patch的顶点首先由当前绑定的顶点着色器处理,然后用于初始化数组gl_in,这个变量在细分曲面控制着色器中被隐式地声明。gl_in中的元素个数与由glPatchParameteri()所指定的patch大小相同。在一个细分曲面着色器内部,变量gl_PatchVerticesIn提供了gl_in中的元素个数(就好比使用sizeof(gl_in) / sizeof(gl_in[0])进行查询)。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
四川省宜宾市工业工学校收费标准如何 你心目中最理想的大学是什么样子呢? 女生心目中理想的大学应该是怎样的? ...东西再去跑呢?还是空腹跑?谢谢了。我希望达到健康,减脂的效果_百度... 英语高手来看看!江湖救急! 急!英语问答高手来,多谢。 英语高手来~~~急~在线等~·介词短语作地点状语如果代词主语还完全倒装... 急!英语高手来下。 北京现在豆腐多少钱一斤? 现在豆腐多少钱一斤??? ★★怎么办?请问激光洗眉痛不痛,激光洗眉多久可以恢复?大神们帮帮忙 OPenGL 着色器放大被剪切的问题? 火影忍者疾风传剧场版-失落之塔片尾曲 歌手 及歌曲名字 月光恋曲字幕组会不会做火影忍者剧场版《失落之塔》? 坟墓修好后贺词? 被别人注册了公众号,这个公众号现在被封号了,我该怎么解绑? 用钱买了教训的语句 35岁程序员炒Luna币千万资产3天归零,此事给予了我们哪些教训? 35岁程序员炒Luna币千万资产3天归零,给投资者们带来哪些经验教训? 荣耀7c采用的高通450性能如何? 怎样抚摸小狗 我想摸老公那,可是不知道怎么抚摸 怎么抚摸男孩子 哪个安卓模拟器支持xbox手柄 哪款安卓模拟器支持手柄玩天堂2血盟 mumu模拟器现在支持手柄吗。 国产车迎来“第二春”,全新跨界车后排可以躺,车内全声控才12万 与传统汽车相比,自动驾驶汽车要哪些辅助设备? 荣耀8x短信没有声音? 新咪咕视频办理后是不是赠送8.9的话费赠送三个月 求简单功放电路图,注意,要最简单的 从衙门口村公交站台到太白西路二号院怎么走? 怎么网赚,需要什么东西 想做网赚,有什么推荐 安卓手机如何安装抗原检测系统 安卓手机系统检测已经最新了,系统更新那依然显示一个红色的1。什么情况?大神告诉我下,谢谢。 安卓手机加人是不是更容易被系统检测? 汽车刹车有异响怎么办?汽车刹车异响大多是什么原因造成的? 韩信将项羽围住后,为什么不进攻反而叫大家唱歌呢? 谁可以帮我把http://www.tudou.com/programs/view/4rioPq32t6E/里的音频专程mp3模式? 初中上课之前大家都唱歌吗 问下大家唱歌难学吗,乐知海app能学吗? 如何在职场上提升自己?学习哪些技能可以让我的职业生涯越走越好? 如何在职场中提升自己的能力? 如何提升自己的职场能力 怎样提升自己的职业能力 福州花卡时代文化传播有限公司怎么样? “驱动器/Device/Harddisk1/DR7”是什么,在哪里 因为软盘写保护,需要把优盘从驱动器\Device\Harddisk\DR6中删除。请问这个东西在哪里找啊 驱动器中没有磁盘 请在驱动器\device\harddisk1\dr33 中插入软件