问题标签 [vertexdata]

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.

0 投票
1 回答
4224 浏览

opengl - OpenGL 缓冲区 - 步幅与紧密包装

为每个属性使用跨步顶点缓冲区与紧密打包缓冲区的优缺点是什么?我的意思是例如:

步幅:xyzrgb xyzrgb xyzrgb

紧的:xyzxyzxyz rgbrgbrgb

乍一看,使用 stride 时您可以轻松更改大小,但使用glBufferData().

对我来说,最好使用紧密模型,因为位置、颜色和纹理坐标可能来自本地内存中的不同数组,并且没有跨步缓冲区数据函数;您必须在上传之前将所有数组复制到交错的缓冲区中,或者glBufferSubData()每个属性的每个顶点使用一个(我猜这个想法很糟糕)。

使用交错缓冲区(步幅)似乎是一种常见的做法。这是为什么?我在这里缺少什么吗?

0 投票
1 回答
481 浏览

opengl - 无法使用 glDrawElements() 和 glMultiDrawElements() 获得输出

我正在构建一个图形应用程序,用户可以通过单击画布指定顶点,然后顶点用于绘制多边形。

该应用程序支持线、三角形和多边形模式。通过计算点击次数来绘制一条线和三角形。然后创建顶点数组并将数据绑定到缓冲区并使用glDrawArrays(). 棘手的是多边形模式。用户可以指定任意数量的顶点并单击鼠标右键触发绘图。我最初计划使用glMultiDrawElements,但不知何故我没有得到任何输出。所以我尝试glDrawElements()循环调用。仍然没有运气。我进行了很多搜索并阅读了很多关于使用glDrawElements()/glMultiDrawElements()VBO 和 VAO 以及使用glVertexPointer()and的文档glColorPointer。仍然没有运气。

我使用以下方法来跟踪顶点属性:

GLfloat ** 多边形顶点;//每个多边形顶点列表都进入这个..
GLuint * polygonIndicesCounts; //保存每个多边形的顶点数的指针
GLuint ** polygonIndices; //保存与多边形对应的顶点索引的指针数组
GLfloat * polygonColors; //每次鼠标点击,颜色都是随机生成的。

和渲染代码:

0 投票
1 回答
722 浏览

objective-c - 如何在 OpenGL 中向网格对象添加顶点?

我是 OpenGL 的新手,我一直在使用红皮书和超级圣经。在 SB 中,我已经了解了有关使用从文件加载的对象的部分。到目前为止,我认为我理解正在发生的事情以及如何做没有问题,但这让我开始考虑在我自己的应用程序中制作我自己的网格 - 本质上是一个建模应用程序。我已经通过我的参考资料和互联网进行了大量搜索,但我还没有找到一个很好的教程来将这些功能实现到自己的应用程序中。我找到了一个仅提供此功能的API,但我正在尝试了解实现;不仅仅是界面。

到目前为止,我已经创建了一个“应用程序”(我轻描淡写地使用了这个术语),它为您提供了一个可以单击并添加顶点的视图。顶点不连接,只是显示在您单击的位置。我担心的是,我在试验时偶然发现的这种方法不是我应该实施这个过程的方式。

我正在使用 Mac 并在 Xcode 中使用 Objective-C 和 C。

MyOpenGLView.m #import "MyOpenGLView.h"

该应用程序应该获取鼠标单击的位置并提供它是一个顶点位置。对于每个添加的顶点,我首先绑定 VBO 以确保它处于活动状态。接下来,我创建一个新数组来保存我当前的顶点位置(totalVertices)加上一个顶点的空间(x 和 y 为 + 2)。然后我使用 glGetBufferSubData 从 VBO 取回数据并将其放入这个数组中。使用 for 循环,我将 X 和 Y 数字添加到数组的末尾。最后,我将这些数据发送回 GPU 到 VBO 并调用 totalVertices++,这样我就知道下次我想添加一个顶点时数组中有多少个顶点。

这让我想到了我的问题:我这样做对吗?换句话说,我是否应该在 CPU 端保留 BufferData 的副本,这样我就不必调用 GPU 并将数据发送回进行编辑?这样,我不会调用 glGetBufferSubData,我会创建一个更大的数组,将新顶点添加到末尾,然后调用 glBufferData 以使用更新的顶点数据重新分配 VBO。

** 我试图包含我的思考过程,以便像我这样在编程方面非常缺乏经验的人可以希望能够理解我想要做什么。我不希望任何人因为我对我所做的解释而感到生气。**