ios - 在OpenGL ES 2.0中渲染许多较小的对象

标签 ios shader opengl-es-2.0

互相问候。

最近几天,我一直在努力使用OpenGL ES 2.0和一个特定的问题。我希望为iPhone实现一个Geometry Wars克隆,以娱乐并学习该技术。因此,我的3d编程背景相当不错,尽管我主要集中在矢量数学上,而不是吸引他们对图形API的调用,因为最近两年来我一直在使用DirectX。但是问题是,我主要是在处理较大的网格物体,以几种方式加载,转换和转换它们,现在我发现自己处在要处理较小网格物体的位置。

这些对象是三角形,矩形,六边形等,我希望能够分别修改它们(例如,使另一条边缘呈波浪形或脉动)。当我使用多个大网格物体时,我分别对它们进行了绘画调用,可以轻松地连接着色器及其各自的参数,但是在这种情况下,我希望一次调用就渲染所有这些东西,而这是我的知识使我失望的地方。

因此,澄清我的问题。如何修改单个网格(最好存储在一个顶点数组中)的单个网格,并使用带有OpenGL ES 2.0的着色器一次渲染所有网格?

尽管更欢迎使用代码示例,但“简单”的说明足以使我入门。我认为我在这里缺少一些琐碎的东西,任何帮助将不胜感激。

提前致谢,

卡尔

最佳答案

听起来像Instancing(和instanced arrays)可以解决您的问题,尽管对于iOS或ES来说,它可能有点太先进了,无法得到支持。这样,您可以使用实例数据(例如特定的纹理索引或子纹理或着色器参数)渲染相同几何图形的许多副本。但是,当然,您不能在一个绘制调用中使用完全不同的着色器来渲染不同的对象。

否则,更简单(且可能优化程度最差)的函数glMultiDrawArrays/Elements在一个调用中呈现了多个完全不同的几何形状,但是您无法确定着色器中哪个三角形属于哪个对象,而且我也怀疑它是否会在很大程度上提高性能。

关于ios - 在OpenGL ES 2.0中渲染许多较小的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6980555/

相关文章:

ios - 如何在自动布局打开时以编程方式更改 UIView 的位置

ios - CocoaPods "pod install"在工作吗

opengl-es - OpenGL ES 2.0 和 OpenGL ES 3.0 有什么区别

android - Opengl es 2.0 3d

android - AdMob 和不同屏幕分辨率/DPI/比率

ios - 如何在用户移动时更新 MKMapView 上的图钉

ios - UITableViewCell 上 2 个 UILabel 的布局

c - 错误 : 0:2: 'attribute' : cannot initialize this type of qualifier (whatever GLSL version used from 1. 1 到 1.5)

android - 黑白模式负片滤镜

java - 使用 lwjgl 将值从我的 Java 程序传递到 GLSL