OpenGL:多个顶点的单个顶点属性?

2024-04-20

我有一个接受以下属性的顶点着色器:

  • a_posCoord:顶点位置
  • a_texCoord:纹理坐标(传递给片段着色器)
  • a_alpha:透明度因子(传递给片段着色器)

我正在渲染的对象都是“广告牌”(一对直角三角形组成一个矩形)。

我正在使用一次调用glDrawArrays渲染many广告牌,每个广告牌都可能具有唯一的 alpha 值。单个广告牌有 6 个顶点。下面是一些伪代码,用于说明如何组织单个广告牌的顶点属性缓冲区:

vertexAttributes = [

  px1,py1,pz1, // vertex 1: a_posCoord
  tx1,ty1,     // vertex 1: a_texCoord
  alpha,       // vertex 1: a_alpha

  px2,py2,pz2, // vertex 2: a_posCoord
  tx2,ty2,     // vertex 2: a_texCoord
  alpha,       // vertex 2: a_alpha

  px3,py3,pz3, // vertex 3: a_posCoord
  tx3,ty3,     // vertex 3: a_texCoord
  alpha,       // vertex 3: a_alpha

  px4,py4,pz4, // vertex 4: a_posCoord
  tx4,ty4,     // vertex 4: a_texCoord
  alpha,       // vertex 4: a_alpha

  px5,py5,pz5, // vertex 5: a_posCoord
  tx5,ty5,     // vertex 5: a_texCoord
  alpha,       // vertex 5: a_alpha

  px6,py6,pz6, // vertex 6: a_posCoord
  tx6,ty6,     // vertex 6: a_texCoord
  alpha        // vertex 6: a_alpha

  // ... Many more billboards not shown ...
];

注意如何相同alpha值重复 6 次,每个顶点一次。

有没有一种方法可以为所有 6 个顶点指定一个属性,而不必为每个单独的顶点重复该属性?

这是我希望顶点属性缓冲区的样子,以减少缓冲区的大小:

vertexAttributes = [
  px1,py1,pz1, // vertex 1: a_posCoord
  tx1,ty1,     // vertex 1: a_texCoord

  px2,py2,pz2, // vertex 2: a_posCoord
  tx2,ty2,     // vertex 2: a_texCoord

  px3,py3,pz3, // vertex 3: a_posCoord
  tx3,ty3,     // vertex 3: a_texCoord

  px4,py4,pz4, // vertex 4: a_posCoord
  tx4,ty4,     // vertex 4: a_texCoord

  px5,py5,pz5, // vertex 5: a_posCoord
  tx5,ty5,     // vertex 5: a_texCoord

  px6,py6,pz6, // vertex 6: a_posCoord
  tx6,ty6,     // vertex 6: a_texCoord

  alpha        // vertex 1-6: a_alpha

  // ... Many more billboards not shown ...
];

就其价值而言,我当前的解决方案工作得很好,但让我感觉很脏。我才刚刚开始掌握使用glVertexAttribPointer并想知道它是否以某种方式支持这样的东西,或者是否有不同的方法或技术我可以用来实现不那么暴力的东西。


更具体地说,这是一个 WebGL 问题,但我对一般意义上的 OpenGL 很好奇。

我知道几何着色器确实是这个特定示例所需要的,但这是不可能的,因为它们目前在 WebGL 中不受支持。


顶点不是位置顶点是由多个属性组成的长向量。更改一个属性,最终会得到一个不同的顶点。所以不,您不能对多个顶点使用单个顶点属性,因为这在语义上没有意义。

然而,较新版本的 OpenGL 可以设置某个顶点属性的缓冲区偏移量前进的速率。实际上,这意味着在属性的缓冲区偏移量前进之前,给定顶点数组的数据实际上被“复制”到 n 个顶点调用中。设置该除数的函数是glVertexAttribDivisor https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glVertexAttribDivisor.xhtml。在你的情况下,你会设置一个绑定除数6对于阿尔法数组。但重要的是,这不会对多个顶点使用单个属性,而是让 OpenGL 完成您为您所做的重复工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL:多个顶点的单个顶点属性? 的相关文章

  • 如何将文本渲染为位图并绘制它

    我是 android 新手 我的小组目前正在使用 opengl es 2 0 使用 GlSurfaceView 创建图形应用程序 我们最近在绘图上显示了网格和刻度线 现在我被分配了实现数字刻度并将 x 和 y 轴标记为 X 和 Y 的任务
  • 执行eglSwapBuffer和eglMakeCurrent时性能低下

    我正在开发一个 Android Unity 插件 允许用户记录他 她的游戏玩法我的解决方案概述 使用 OpenGl FrameBufferObject FBO 使 Unity 离屏渲染到此 FBO Get the offscreen tex
  • 如何从 dxf 文件解析 nurbs 曲面?或者你知道用于解析它的库(对于js,如果存在或任何其他语言)?

    我正在尝试解析 autocad nurbs 曲面并使用 JavaScript 中的 webGL 进行三角测量绘制 我已经在寻找 bjnortier 的 dxf 解析器 它支持大多数实体 如直线 圆弧 3Dface 折线 lwpolyline
  • 如何在 WebGL 中创建合适的圆角矩形?

    我试图实现答案这个问题 https stackoverflow com questions 43970170 bordered rounded rectangle in glsl但似乎有点问题 如果您打开他们的 ShaderToys 并尝试
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 全屏背景纹理与 OpenGL 性能问题 (iPad)

    我对在 OpenGL 中使用带纹理的三角形网格绘制全屏背景时所看到的糟糕性能感到非常困惑 仅绘制背景而没有其他内容 使用最基本的着色器时最高可达 40 fps 使用默认值时最高可达 50 fps管道 虽然 40 fps 看起来并不算太糟糕
  • 在arcore中的3D对象上使用模板蒙版时出现问题

    我正在使用 hello ar java demo 在 3d 对象上使用模板掩模 但是我遇到了一些意外的行为 我的模板蒙版正确遮挡了平面渲染器 但 3D 对象 andy 似乎没有按预期做出反应 相反 如图所示 他似乎被翻转了 我不知道如何解决
  • 如何更改 OpenGL 中的旋转中心

    我有一个 3D 模型 OpenGL ES 1 1 iPhone SDK v3 0 这有点复杂 即数千个顶点和面 并且我想围绕模型中心或附近的 Y 轴旋转该模型 问题是 glRotate 围绕位于 附近的点旋转我的模型其底边之一的中心 不靠近
  • 如何使着色器淡入某种颜色?

    这是我当前使用的着色器 它通过缓慢降低不透明度来淡化对象 我想褪成紫色 如何才能做到这一点 着色器 frag uniform sampler2D texture uniform float opacity void main vec4 pi
  • iOS4:如何使用视频文件作为 OpenGL 纹理?

    我正在尝试将视频文件的内容 暂时不包含音频 显示到 OpenGL 中的 UV 映射 3D 对象上 我已经在 OpenGL 中做了相当多的工作 但不知道从哪里开始处理视频文件 而且大多数示例似乎都是从相机获取视频帧 这不是我想要的 目前我觉得
  • 如何检测android中某个渲染器区域内的触摸事件?

    在android中我举了一个旋转球体的例子在这里给出 https bitbucket org jimcornmell opengltexturedsphere 它创建了一个简单的应用程序 显示一个旋转球体 地球 现在 如果在手机显示屏上按下
  • 将 WebGL 应用程序部署为本机 iOS 或 Android 应用程序?

    有谁知道如何将 WebGL 应用程序部署为本机 iOS 或 Android 应用程序 商业中间件是可以接受的 但开放项目会更好 谢谢 作为 Joris 答案的延伸 这似乎是基于内森 德弗里斯的作品 http atnan com blog 2
  • 如果使用多个 EAGLView,则不会绘制纹理

    我在使用Apple EAGLView 和Texture2D 时遇到了一些问题 如果我创建 EAGLView 的实例并绘制一些纹理 效果会很好 但是 每当我创建 EAGLView 的第二个实例时 都不会绘制新视图中的纹理 作为 OpenGL
  • YUV420p 上的大量绿色 --> iOS 上 OpenGL 2.0 着色器中的 RGB

    我想使用 ffmpeg 和 OpenGL ES 2 0 为 iOS 制作一个电影播放器 但我有一些问题 输出 RGB 图像有很多绿色 这是代码和图像 480x320 宽度和高度 512x512 纹理宽度和高度 我从 ffmpeg AVFra
  • 在适用于 iOS 的 Google 地图 SDK 上进行 GMSMapView 屏幕截图时出现问题

    我遇到的一个问题是当我尝试截取 GMSMapView Google Maps SDK iOS 任何部分的屏幕截图时 UIGraphicsGetImageFromCurrentImageContext UIImage 输出是不可见的 我最终发
  • Phong 着色问题

    我正在根据以下内容编写着色器冯模型 http en wikipedia org wiki Phong reflection model 我正在尝试实现这个方程 其中 n 是法线 l 是光线方向 v 是相机方向 r 是光反射 维基百科文章中更
  • 帮助理解 gluLookAt()

    想象一下你站在地上 抬头看着天空中的一个立方体 当你倾斜头部时 立方体就会移动 我试图在 iPhone 上使用 OpenGL ES 来复制这一点 方法是操纵相机的倾斜 同时查看围绕原点绘制的简单 3D 立方体 我正在使用gluLookAt
  • 具有漫反射和法线贴图纹理的 3D 模型

    我想使用 libgdx 的资源加载器加载具有漫反射纹理和法线贴图的 3D 模型 据我所知 fbx 以及转换后的 g3dj g3db 格式可以包含漫反射纹理 正如我在 fbx conv 示例中看到的那样 骑士 g3db 如何为其添加法线贴图纹
  • 有没有任何工具可以将 PVR 纹理分割成一组图块?

    我有一张大的 png 纹理 4096x4096 我需要将其部分加载到内存中 我已经将大 png 纹理分割成 16 个 1024x1024 块 然后将它们转换为 PVR 压缩文件 问题是 当我绘制这些图块时 图块之间的边缘与 png 的边缘不
  • 开始使用 Three.js 中的行进立方体

    我是 Three js 的新手 正在寻找教程来帮助我开始了解如何在 Three js 中使用 Marching Cubes 到目前为止 我在 Three js 中看到的一些使用它的项目对我来说有点复杂 所以一个简单的教程会很好 谢谢 像您一

随机推荐

  • 无法在 Scala 中使用 Apache Commons CLI Option.builder()

    在 Spark shell 或应用程序 用 Scala maven 构建编写 中 我无法使用 Apache Commons CLI 包中的静态构建器方法 我已确认我将 jar 包含在类路径中并且可以访问Option类以及包中的其他类 例如O
  • 我可以将 jQuery UI 对话框置于 div 中心吗?

    我有一个主要内容 div 我想将对话框置于该 div 的中心 而不是页面的中心 有任何想法吗 我知道有一个位置实用程序 但我不知道如何将它与对话框位置选项一起使用 你是对的 position http jqueryui com demos
  • 将 hibernate 投影结果映射到 java POJO 模型

    在过去的几周里 我一直在使用 spring 和 hibernate 并且我一直在那里学习新的东西 现在我有一个问题想用 Hibernate 中的投影来解决 假设有一个模型Person这个模型有很多Car 以下是类定义的大致样子 public
  • 计算机状态(睡眠、休眠、锁定等) Windows 10

    我需要检查当前状态 计算机的 休眠 睡眠 待机锁定等 我只是想问一下如何使用C 获取我的计算机的当前状态 我已经通过检测 LockApp 进程知道计算机何时被锁定 但我无法知道它是否处于睡眠模式或休眠模式 我想尝试一个将使用任务计划程序运行
  • Solr 管理控制台中模式浏览器屏幕中的字段

    上面是特定索引的架构浏览器屏幕的屏幕截图 该字段是品牌 字段类型定义如下
  • 属性“user”在类型“Request>”上不存在

    请帮助 我收到此错误 src app middlewares authentication ts 16 17 error TS2339 Property user does not exist on type Request
  • css 旋转与过渡似乎会影响其他元素的不透明度?

    我遇到了使用 1s 过渡通过 CSS3 变换旋转 DIV 的问题 在 OSX 10 7 5 上的 Chrome 23 和 Safari 6 中 在 rotate divs 转换期间 其他容器中的字体会稍微变暗 关于造成这种情况的原因以及如何
  • 当前位置权限对话框消失得太快

    我的应用程序获取用户位置 获取坐标 并提供往返目的地或出发地的距离 所有这些可能的目的地都显示在表格视图中 因此我在填充表格的同时获取用户坐标 唯一的问题是 询问用户位置的警报视图出现然后消失得如此之快 以至于无法单击它 有什么方法可以在应
  • 使用 openmp 优化 N-queen

    我正在学习 OPENMP 并编写以下代码来解决 n 皇后问题 Full Code https github com Shafaet Codes blob master OPENMP Parallel 20N Queen 20problem
  • 如何调整 CWnd 内 WPF 控件的大小?

    我正在托管 WPFUserControlMFC 内部CWnd 它工作得很好 我现在需要弄清楚如何与其父控件一起调整控件的大小 我已经迷上了OnSize我正在打电话GetWindowRect并将结果设置为我的控件 如下所示 void CChi
  • Spark任务仅在一个执行器上运行

    大家好 首先我知道这个线程的存在 Spark 中的任务仅在一个执行器上运行 https stackoverflow com questions 53425983 task is running on only one executor in
  • 如何在 Angular ui-router 中禁用静态 url?

    我有两个 ui routerstates在我的角度应用程序中 效果很好 如下所示 app config stateProvider function stateProvider stateProvider state settings ur
  • Python..将bin/hex文件转换为txt文件

    我想在python中将bin文件转换为txt文件 with open atb bin rb as file data file read 8 datastring str data print datastring print join s
  • SQL Server 2012 列标识增量在第 7 个条目上从 6 跳到 1000+ [重复]

    这个问题在这里已经有答案了 我有一个奇怪的场景 其中 SQL Server 2012 数据库中的 auto Identity int 列没有正确递增 假设我有一个使用 int auto 标识作为主键的表 它偶尔会跳过增量 例如 1 2 3
  • 在模态和非模态情况下重用 UIViewController

    我有一个 UIViewController 让我们称之为 FormController 它只是一个编辑对象的表单 我想在两种不同的情况下使用它 创建一个新对象 使用 UINavigationController 的presentModalV
  • 离开网站时弹出

    我遇到了 JavaScript 问题 我想要一个脚本 该脚本将在退出整个网站时弹出一条带有问题的消息 如果访问者回答 否 则网页将关闭 如果他回答 是 他将被重定向到另一个页面 我找到了一个例子http www pgrs net 2008
  • xcode CollectionViewController rollToItemAtIndexPath 不工作

    我创建了一个CollectionView控制并用图像填充它 现在我想在开始时滚动到特定索引处的项目 我已经尝试过scrollToItemAtIndexPath如下 self myFullScreenCollectionView scroll
  • 无偏返回 n 个随机正数 (>=0) 的列表,使得它们的总和 == 总和

    我正在寻找一种算法或建议来改进我的代码以生成随机数列表 这些随机数的总和等于某个任意数 对于下面的代码 它总是有偏差 因为第一个数字往往会更高 有没有办法让选号更高效 usr bin python Generate a list of nu
  • 使用 sed 替换 shell 脚本中的特殊字符

    我正在尝试编写一个 shell 脚本 它将替换我使用 sed 选择的任何字符 字符串 我的第一次尝试除了特殊字符之外都有效 我一直在尝试使用 sed 来修复特殊字符 以便它们也能被搜索或替换 我决定简化脚本以进行测试 只处理一个有问题的角色
  • OpenGL:多个顶点的单个顶点属性?

    我有一个接受以下属性的顶点着色器 a posCoord 顶点位置 a texCoord 纹理坐标 传递给片段着色器 a alpha 透明度因子 传递给片段着色器 我正在渲染的对象都是 广告牌 一对直角三角形组成一个矩形 我正在使用一次调用g