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

如何在OpenGL中处理每个三角形的多个变量?

胡新
2023-03-14

我使用的是OpenGL,但我并不完全满意将每个三角形(或在我的例子中为四边形)的值传递给片段着色器的标准方法,即将它们分配给基本体的每个顶点,并将它们传递给顶点着色器,以推测不必要的插值(除非使用“flat”指令)在片段着色器中(也就是说,每个片段不变化)。

是否有某种方法可以存储每个三角形(或四边形)的值,这些三角形(或四边形)需要在片段着色器中访问,这样就不需要每个顶点的冗余副本?那么,这种方式是否比数据移动代码CPU端的3倍(或4倍)开销更好?

我知道使用几何体着色器将值分散到新的顶点,但我听说几何体着色器在非最新硬件上的速度非常慢。是这样吗?

共有2个答案

黄淇
2023-03-14

可以使用顶点数组中的一个元素来呈现多个顶点。实例化顶点属性

应嘉容
2023-03-14

OpenGL片段语言支持gl_PrimitiveID输入变量,该变量将是当前处理片段的基元的索引(对于每个绘制调用,从0开始)。这可以用作一些数据存储的索引,这些数据存储保存每基元数据

根据每个基元所需的数据量和基元总数,可以使用不同的选项。对于少量基元,您可以只设置一个统一数组并将其索引到其中。

对于数量相当多的基本体,我建议使用纹理缓冲对象(TBO)。这基本上是一个普通的缓冲区对象,可以通过texelFetchGLSL操作在随机位置以只读方式访问。请注意,TBO不是真正的纹理,它们只重用现有的纹理对象接口。在内部,它仍然是从缓冲区对象获取数据,并且非常高效,没有纹理管道的开销。

这种方法的唯一问题是不能轻松地混合不同的数据类型。您必须为您的TBO定义一个基本数据类型,并且每次获取都将获得该格式的数据。如果每个基本体只需要一些浮点/向量,这根本不是问题。例如,如果每个基本体需要一些int和一些float,可以使用不同的tbo,每种类型一个,或者使用现代GLSL(

 类似资料:
  • 问题内容: 您好,我也有4个点,而我将有4个三角形,如何检查每个点的这四个三角形,无论该点是否在三角形内。谢谢 问题答案: 实现接口,该接口提供了几种方法。这是一个简单的例子。

  • 所以我对opengl和创建3d形状非常陌生。对于我的例子,我有两个正方形,一个是高度/宽度2,中心在原点坐标(0,0,-10),另一个在窗口的最左侧。我试图沿着x-z平面旋转位于原点的正方形,而不旋转位于屏幕最左侧的正方形。我的方法是将中心正方形的每个xyz坐标保存为一个变量,并创建一个使用cos(θ)行为沿着x-z平面旋转正方形的方法。我的代码工作,但我认为这是一个可怕的方法,因为一定有一些更有

  • 问题内容: 我正在学习有关使用OpenGL在Java中创建游戏引擎的教程。 我正在尝试在屏幕上渲染一个三角形。一切运行正常,我可以更改背景颜色,但三角形不会显示。我也尝试过运行作为教程系列的一部分提供的代码,但仍然无法正常工作。 链接至教程:http : //bit.ly/1EUnvz4 链接到视频中使用的代码:http : //bit.ly/1z7XUlE 建立 我试过检查OpenGL版本,但相

  • 问题内容: 嗨,我正在尝试创建仿射变换,使我可以将一个三角形变换为另一个三角形。我所拥有的是2个三角形的坐标。你能帮助我吗? 按照亚当·罗森菲尔德的回答,我想出了这段代码,以防万一有人无聊地自己解决方程: 问题答案: 我假设您在这里谈论2D。仿射变换矩阵中有9个值: 有3个顶点输入,和,当其转化应该成为,,。然而,由于我们在齐次坐标的工作,应用到不一定给-它给人的倍数。所以,我们也有未知的乘法器,

  • 本文向大家介绍如何用CSS 画一个三角形?相关面试题,主要包含被问及如何用CSS 画一个三角形?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 三角形原理:边框的均分原理        

  • 当我从这些三角形中执行α形状时,我无法得到点集的边界。所以我认为我应该使用约束Delaunay三角测量。我选择三角形库来执行此操作。但麻烦的是,我不知道给函数triangle.triangulate(tri, opts=")提供什么。我把我所有的点集输入字典,但它返回我的点集。所以任何人都可以帮助我使用这个功能或另一种选择来执行轮廓检测?谢啦