当前位置: 首页 > 知识库问答 >
问题:

为VBO添加颜色-最佳实践

庄星汉
2023-03-14

我正在开发一个可视化引擎(简单的CAD风格)(使用python和pyopengl绑定),可以同时显示和动画多达10-20个身体。我使用VBO数据对象来存储顶点数据并显示每个主体。我想知道为VBO分配颜色的最佳(最实用、最简单、成本更低的GPU)方法是什么。每个机身都有统一的颜色,外观可以设置为透明-可选。据我所知,这可以用以下方法完成(我测试了方法1和2):

  1. GLF(R、G、B、A)
  2. GLMATERIALV(前后[R、G、B、A])
  3. 为每个顶点指定颜色并创建交错VBO

还有其他方法吗?哪一个最适合这份工作?我还想问一下,对于一个VBO,每个VBO推荐多少个顶点,以及有多少个顶点,比如说;小型、中型和大型VBO?只是为了让我对显示对象的大小有更多的了解。

共有1个答案

单凯捷
2023-03-14

着色部分取决于您现在使用的OpenGL版本,将来使用的版本,以及您是否需要照明。

如果你使用的是OpenGL 2.1,也许是因为你喜欢内置的矩阵堆栈和gluPerView,那么glColor4f是为非照明对象设置统一颜色的最简单方法。如果您想使用照明,也可以添加一个glColor材料调用。或者对于照明,你可以使用gl材质。

正如Andon所指出的,如果您必须移动到OpenGL3或OpenGL4,这些将停止工作。因此,如果这个程序将来要更新,或者您计划添加基于可编程GPU着色器的额外功能,请获取OpenGL SuperBible第6版的副本并开始编码。最简单的方法是添加另一个具有逐顶点颜色的VBO,或者使用VBO交错颜色,正如您已经发现的那样。理论上这是在浪费空间,因为一种颜色会被复制很多次,但是如果你不改变每一帧的颜色,那又怎样?(千兆字节图形卡非常棒。)

好的,建议的每个VBO的顶点数。再说一遍,你在乎吗?你说你有10-20个对象要渲染。这并不是说每帧调用OpenGL的次数过多。也许如果你需要每帧渲染数千个对象,这是值得考虑的,但我的建议是总是先做最简单的事情,因为这通常足够快。

为了从OpenGL获得最大的性能,通常需要最小化每帧调用的数量。因此,如果有太多单独的OpenGL调用,那么数据是一个大的VBO还是很多小的VBO并不重要。将更多数据塞进大型VBO(在原语重新启动时读取)通常可以减少调用次数,而现代图形卡允许每个VBO存储兆字节甚至千兆字节。阅读Moller和Haines的实时渲染,或SuperBible的间接绘图部分了解更多细节。

希望这有帮助。

 类似资料:
  • 用颜色填充路径 使用钢笔工具创建的路径只有在经过描边或填充处理后,才会成为图素。“填充路径”命令可用于使用指定的颜色、图像状态、图案或填充图层来填充包含像素的路径。 选定的路径(左图)和填充后的路径(右图) 注意:当填充路径时,颜色值会出现在现用图层中。在完成以下步骤之前,请确保标准图层或背景图层处于现用状态。(当蒙版、文本、填充、调整或智能对象图层处于现用状态时,无法填充路径。) 使用当前填充路

  • 我正在用OpenGL(PyOpenGL和Python)显示几何图形(文件格式:.stl)。几何数据具有形式,由三角形组合而成。 我保存到 VBO 数据;顶点、法线和颜色。由于法线仅每 3 个顶点(三角形)定义,并且我为每个顶点定义颜色矢量,因此 VBO 中的数据具有以下形式: 大写:;首先我保存所有顶点,然后我“附加”(使用)所有法线(法线数比顶点数和顶点颜色少3倍),然后我附加每个顶点的颜色向量

  • 我理解如何(以及为什么)在JSX中添加空白,但我想知道什么是最佳实践,或者是否有任何真正的区别? 将两个元素都包裹在一个跨度中 将它们添加到一行中 用JS添加空间

  • 我想在我的Flitter应用程序中使用六色代码,使用backgroundColor:Colors#34A123。但我只能拍到颤振默认值

  • Spark Dataframes有一个方法每次添加一个新列。若要添加多列,需要一个的链。这是做这件事的最佳实践吗? 第二部分,在和的链中使用有哪些权衡? 我在某个地方读到过,在Spark DFs中使用可用的方法总是比推出自己的实现要好。如果我的论点错了,请让我知道。谢谢!欢迎所有的想法。

  • 问题内容: 我已经开发了一个Java Swing应用程序。 如何设置特定JDayChooser日期的背景颜色? 谢谢 问题答案: 终于找到了解决方法:D