- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个现有的系统,它提供 3D 网格。提供的数据是一个包含 3 个分量 (x, y, z) 的顶点坐标数组和一个索引列表。
问题是索引列表是一个连续的四元组数组。
必须使用核心配置文件使系统可运行 OpenGL Context首先,然后也是 OpenGL ES 3.x。
我知道所有四边形都具有相同的缠绕顺序(逆时针方向),但我没有关于四边形的更多信息。我对他们的关系或邻接一无所知。
由于我想使用核心配置文件 Context对于渲染,我不能使用 GL_QUAD
原始类型。我必须将四边形转换为三角形。
当然,四边形索引数组可以轻松转换为三角形索引数组:
std::vector<unsigned int> triangles;
triangles.reserve( no_of_indices * 6 / 4 );
for ( int i = 0; i < no_of_indices; i += 4 )
{
int tri[] = { quad[i], quad[i+1], quad[i+2], quad[i], quad[i+2], quad[i+3] };
triangles.insert(triangles.end(), tri, tri+6 );
}
GL_TRIANGLE_FAN
在循环中绘制它们。原始类型:
for ( int i = 0; i < no_of_indices; i += 4 )
glDrawElements( GL_TRIANGLE_FAN, 4, GL_UNSIGNED_INT, (void*)(sizeof(unsigned int) * 4) );
最佳答案
If that has to be done only once, then that would be the solution. But the mesh data are not static.
baseVertex
rendering偏移它们以使用相同的索引缓冲区渲染不同系列的四边形。
GLushort
作为索引类型。这样,您的索引数据每个四边形仅占用 12 个字节。使用 shorts 在单个绘图命令中限制为 16384 个四边形,但您可以重用相同的索引缓冲区来绘制多个系列的四边形
baseVertex
渲染:
constexpr GLushort batchSize = 16384;
constexpr unsigned int vertsPerQuad = 6;
void drawQuads(GLuint quadCount)
{
//Assume VAO is set up.
int baseVertex = 0;
while(quadCount > batchSize)
{
glDrawElementsBaseVertex(GL_TRIANGLES, batchSize * vertsPerQuad, GL_UNSIGNED_SHORT, 0, baseVertex * 4);
baseVertex += batchSize;
quadCount -= batchSize;
}
glDrawElementsBaseVertex(GL_TRIANGLES, quadCount * vertsPerQuad, GL_UNSIGNED_SHORT, 0, baseVertex * 4);
}
GL_TRIANGLE_STRIP
基元并将基元分解成碎片,同时仍然只有一个绘制调用。因此,不是每个四边形有 6 个索引,而是 5 个,第 5 个是重启索引。所以现在你的
GLushort
索引每个四边形仅占用 10 个字节。然而,
batchSize
现在必须是 16383,因为索引 0xFFFF 是为重新启动保留的。和
vertsPerQuad
必须是 5。
关于opengl - 如何将大型四边形基元数组转换为三角形基元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49137481/
我确实遇到了这个问题。 我有一个可以是任何形状的多边形(四边形)。当我的鼠标位于多边形内时,我需要找到鼠标所在位置(四边形内)的 x,y 值,就好像多边形是完美的正方形一样。进一步解释;我有一个 32
我的问题是关于 OpenGL 和法线,我理解它们背后的数学原理,并且我取得了一些成功。 我在下面附加的函数接受一个交错的顶点数组,并计算每 4 个顶点的法线。这些代表具有相同方向的 QUADS。据我了
我想检测图像中的矩形。 我使用 cv2.findContours() 和 cv2.convexHull() 过滤掉不规则多边形。 之后,我将使用船体长度来判断轮廓是否为矩形。 hull = cv2.c
有谁知道将 vector 路径转换为由三角形/四边形面组成的描边路径的好算法?理想情况下使用圆线连接。 基本上,我试图绘制一条粗路径,其颜色基于随路径距离变化的值。我正在考虑将路径转换为三角形/四边形
我有 WebGL/OpenGL 的基本知识,但不了解 gl.bufferSubData。所以我的目标是创建一个 SpriteBatch 类,就像这个问题 First Question 一样。由于我认为
我用 OpenGL 渲染两个具有相等 z 的四边形。当我启用 DEPTH 时,我得到以下图像,但当它关闭时,我得到我需要的一个水果而不是另一个。是否可以按我的意愿绘制具有相等 z 的四边形?我的 OG
我一直在尝试让模板测试在我的 OpenTK 2D 游戏中工作,但没有成功 - 我只想在模板缓冲区中绘制低于 say 1 值的纹理部分。花了很长时间阅读模板及其工作原理,但在 C# 中找不到一个示例。下
我有一个 2D 空间,其中包含任意数量的对象(它们是圆形或四边形 - 这无关紧要),在每个时间刻度中具有不同的大小和不同的位置。我想为任何基元(示例图片中的绿色圆圈)找到一个 y 位置,使其不与任何其
我是一名优秀的程序员,十分优秀!