c++ - 如何高效绘制单点

标签 c++ opengl opengl-3

我有一个要模拟的水面。为了在表面添加雨滴,我只需要绘制一个点。

我有一个代码(在 OpenGL 2.0 中):

float rainDrop[3] = { pos }; 
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, rainDrop);
glDrawArrays(GL_POINTS, 0, 1);
glDisableVertexAttribArray(0);

如何将此代码移植到 OpenGL 3.*?当然是高效的。

我的想法是只使用简单的缓冲区(只有一个元素)并映射它并绘制这个单点:

float rainDrop[3] = { pos }; 
glBindVertexArray(vaoID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferSubData(GL_ARRAY_BUFFER, 0, 3*sizeof(float), rainDrop);
glDrawArrays(GL_POINTS, 0, 1);
glBindVertexArray(0);

但也许另一种选择是拥有一个静态缓冲区并更改顶点着色器的统一值?

我不想改变我的“算法”,所以让我们专注于绘制这一点。

最佳答案

通常您在 VBO 中指定顶点坐标。当绘制少量图元时,选择哪个选项应该没有太大区别。与其他渲染操作相比,性能差异应该是微不足道的......

关于c++ - 如何高效绘制单点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18814033/

相关文章:

c++ - 全屏 SDL 中的 Alt-tab

c++ - 如何将 opengl 3.3 渲染成 SDL2 纹理?

c++ - MSVC 无法向上转换 unique_ptr

c++ - 如何使用 Material 的环境色代替灯光的全局环境色? (OpenGL 1)

c++ - 在 C++ 中实现公钥加密的简单方法?

c++ - OpenGL EGL 在 docker 的 eglGetDisplay 返回 0x300c (EGL_BAD_PARAMETER)

opengl - 为跨平台桌面应用程序选择什么 OpenGL 版本

c++ - 带有片段着色器的 OpenGL 3.3 不同颜色

c++ - Boost.Fiber 是否会在网络请求时自动让步,例如通过网络调用数据库?

c++ - 在 QtCreator 的 [Clang]CodeModel 中启用 C++14