问题标签 [gl-triangle-strip]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 GL_TRIANGLES 生成并绘制方形平面?
前言:
我已经阅读了Generate a plane with triangles strips中的帖子。下面的代码来自那里,但它不允许我纹理或点亮网格。
客观的:
给定一个数字“n”,使用 OpenGL生成、纹理和绘制width = n
&的平面。height = n
平面应由单位大小的单个四边形组成。
到目前为止的代码:
生成顶点的代码
生成索引的代码
然后我使用 GL_TRIANGLE_STRIP 和索引缓冲区绘制平面。
我需要什么?:
虽然上述方法有效,但我无法纹理/ uv 贴图或获取法线,因为它使用GL_TRIANGLE_STRIP
因此三角形之间共享的某些顶点的 uv 坐标不同。我需要一些方法来获取顶点数组、它们的纹理坐标和法线,这样我就可以对平面进行纹理化和光照,最终得到这样的结果。只要飞机由不同的四边形组成并且我可以更改飞机的尺寸,我如何获得它们并不重要。
c++ - 使用 glDrawElements 绘制 std::vector
我正在尝试使用我拥有的高度图绘制地形。通过使用 std::vector,我现在有了一个位置数组和一个位置索引数组,以便glDrawElements(GL_TRIANGLE_STRIP,...)
在绘制地形时使用。但是,由于某种原因,我的简单代码不起作用。请注意,我将glm用于数学库。
以下是 VAO、VBO 和 EBO 的配置。我仔细检查了顶点数据和索引数据,它们都是正确的。
最后,这是我的绘图功能
我假设像 size 参数这样的参数有问题,但目前我找不到任何问题。
webgl - WebGL TRIANGLE 与 TRIANGLE_STRIP
我使用 gl.TRIANGLE_STRIP 进行了单个三角形渲染,但是当我尝试将其更改为 gl.TRIANGLE 时,面不会渲染。看起来顶点渲染为非常小的点,但面是空的。
我的理解是 TRIANGLE 与 TRIANGLE_STRIP 的顶点格式对于单个三角形应该相同。
使用以下渲染代码可以按预期工作:
但是,如果我将 更改mode
为gl.TRIANGLE
,则不会出现任何面,顶点几乎看不到小点。
我在这里有什么误解?
opengl - EmitVertex 给出“错误 C1067:类型构造函数中的数据太少”
我正在使用几何着色器从 GL_POINTS 生成立方体
EndPrimitive
如果我在第一个(注释之前)之后删除代码// Left
,这会正确地在立方体周围绘制一条带,使侧面不加盖。
如果我尝试绘制一个新的三角形条来覆盖侧面,那么随后的四个EmitVertex
调用中的每一个都会出现此错误:
根据这个文件
GS 定义了这些顶点输出代表什么类型的图元。GS 也可以通过调用 EndPrimitive() 函数来结束一个原语并开始一个新的原语。这不会发出顶点。
为了从 GS 中写入两个独立的三角形,您必须使用 EmitVertex() 为前三个顶点编写三个单独的顶点,然后调用 EndPrimitive() 来结束条带并开始一个新的条带。然后你用 EmitVertex() 再写三个顶点。
我究竟做错了什么?
algorithm - 从三角形带转换为多边形
我有一些区域包含 1 个或多个多边形。每个多边形以 GL_TRIANGLE_STRIP 格式表示,其中每个顶点是一对 (lat, long)。有什么办法可以得到该区域的轮廓?
一些规格:
- 轮廓必须按逆时针顺序排列。
- 任何 2 个多边形都可以有一个公共边。
- 多边形可以是凹的
- 一个多边形内部最多可以有 1 个“间隙”,它将由另一个轮廓按顺时针顺序表示。
我正在寻找一种复杂度约为 O(N*logN) 的算法,其中 N = 顶点数。
编辑:我尝试了像 2 x 2 这样的解决方案,直到我到达数据集的末尾然后向后移动,但是这个算法在有间隙的多边形上效果不好,例如
这个多边形,输入是: A B C D E F G H I J
,其中 I = A 和 J = B , 这样做, 输出将是A C E G I J H F D B
and that should be A C E G
and B H F G
(顺序是倒置的,因为这样更容易绘制)。
另一种解决方案是考虑点一个无向图和它们之间的边(根据 GL_TRIANGLE_STRIP 格式),我在其中应用了 DFS 以取出连接的组件。之后,我计算了每个组件的面积,我将最大面积多边形视为逆时针轮廓,其余为顺时针轮廓。这不起作用,因为邻接表需要一些排序,这会使算法效率低下。
我尝试的另一个解决方案是一些调整过的凸包,但凸包仍然是凸包,并且不适用于凹多边形。
我还阅读了有关凹壳的信息,但这似乎并不总是给出准确的结果。
谢谢您的回答!
c++ - 用三角形带创建平坦的地形
我正在寻求使用三角形带绘制平坦地形的帮助。如果这是正确的方法吗?
到目前为止,我设法创建了顶点和索引数组,对其进行了几次调试,它似乎生成了正确的值。
起初我尝试用退化的三角形绘制,但我在某处读到这是一种过时的方式,我宁愿切换到原始的重启选项。
请注意,这不是我的项目设置的确切方式......我只是复制了必要的代码
这是地形生成的代码:
c++ - OpenGL 是如何实际读取索引的?
我试图弄清楚如何用 triangle_strips 绘制平坦的地形,当我编写用于创建索引数组的循环时,我想 OpenGL 是如何知道解析索引的,因为到目前为止,我已经看到每个人在创建索引时都这样写:
0 3 1 4 2 5 0xFFFF 3 6 4 7 5 8
(这里是 0xFFFF 原始重启,标志着条带的结束)
所以从技术上讲,据我所知,这应该用每个三角形的偏移量 +1 来解析......所以第一个三角形将使用前三个索引(0 3 1),下一个使用偏移量 +1(3 1 4)......下一个(1 4 2) 等等。如果我没有很好地解释,这是图片:
但我看到的另一种方法是分别为每个三角形创建索引......所以:0 3 1 3 1 4 1 4 2 4 2 5
所以我的问题是如何指定布局......当我将绘制调用设置为 GL_TRIANGLE_STRIP 时,OpenGL 是否会自动执行此操作?
c++ - 如何在 OpenGL 中绘制由 5 个三角形组成的 VAO?
我最近编写了一个程序来绘制一个具有 3 个不同 RGB 值的三角形,我想在同一个程序中对另一个单独的 VAO 做同样的事情,但我希望这个由 5 个三角形组成。这是我的 main.cpp:
我是否像使用第一个 VBO 或其他东西一样简单地创建另一个浮点“点”矩阵?我遵循的教程在这部分并不完全清楚。
此外,我在我的 Mac 上使用 Xcode,并为我的片段和顶点着色器创建了单独的 .cpp 文件。我应该将它们切换到头文件吗?
opengl - Opengl:我们还能使用 GL_QUADS 吗?
我正在从 obj、colladae 文件加载模型,如果在导出时所有面都是完美的四边形,则网格的各个面不会三角化以节省内存。
现在我知道这对大多数模型都不起作用,但对于某些网格来说,说一个立方体,我想让它工作的每个面都可以避免一些重复。
我有 2 个使用三角形带或 gl_quads 的选项。
三角形条带的问题是相邻面是连接的,因此它们之间不可能有一些间隙,即使对于一个简单的立方体,输出在外面看起来也是正确的,但是当我进入立方体时,即使启用了背面剔除,我也会看到一些连接立方体正面和背面的杂散三角形基本上是一团乱麻。
但是使用 gl_quads 一切正常,但文档说 quads 在 3.1 中已弃用 [即使我仍然可以使用它 gl 4.0] 所以我的问题是
我是否可以继续使用 gl_quads 从文件中加载网格而不会在将来遇到问题,或者如何在没有整个连接问题的情况下用三角形条替换它?
我发现的一个解决方案是在 for 循环中为每 4 个顶点发出一次绘制调用,但这对于大型网格的性能来说是很糟糕的。
有什么建议么?
opengl - 如何使用 GL_TRIANGLE_STRIP 绘制矩形框?
我是 OpenGL 编程的新手,需要一些帮助来解决这个问题。我发现这个答案详细说明了如何使用 GL_TRIANGLE_STRIP 创建立方体网格。但是,我想创建一个矩形框,其中一个轴不仅被拉长,而且被重复,因此几何形状最终如下所示:
我无法弄清楚我应该如何构建这样一个形状,其中几何形状正确生成,具有正确的法线和封闭端,以及要记住的缠绕顺序等等。
我应该如何思考和定义顶点?