【发布时间】:2020-12-21 16:57:17
【问题描述】:
我正在学习 OpenGL 以尝试创建一些基本的可视化工具。我要做的第一件事是从 4 个摄像头渲染保存的图像。想要获得 2x2 图像的布局
我正在关注有关使用纹理的本教程(https://learnopengl.com/Getting-started/Textures 和完整源代码https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/4.1.textures/textures.cpp)。我可以成功加载其中一张图像并将其显示到全尺寸窗口。我将示例中的vertices[] 数组更改为最大值(在所有方向上为-1 到1)以获得全屏显示。我的问题是,对 OpenGL 不熟悉
-
这是使用顶点着色器和片段着色器的最佳/现代方法吗?大约 5 到 10 年前有很多图像示例做了不同的事情。
-
如果我加载了四张图片,我可以为每张图片重复使用相同的顶点和片段着色器吗?
-
我目前对在 2x2 网格中渲染图像的想法是为每个象限创建 4 个
vertices[](-1 到 0、0 到 1 等)。这意味着我需要 4 个顶点 VAO 对象。这是最好的方法,还是可以做一些更简单的方法?
一旦我得到它的工作,我会为未来的读者分享/发布代码。
【问题讨论】:
-
您可以使用多重纹理,因此将每个图像绑定到不同的纹理单元,并且只有单个 VBO/VAO 和渲染调用。您也可以只传递单个 Quad
-1,+1并从中计算纹理坐标和顶点着色器中的源纹理,无需渲染 4 个四边形但是将每帧上的 4 个纹理加载到 GL 中可能会很慢......不是这方面的专家但是我认为在新的 GL api 中的 IIRC 有一些使用 PBO 或 FBO 进行更快传输的机制。如果您有大量 GPU 内存,您可以使用纹理数组并将整个或部分视频加载到 GPU 中,然后“延迟”加载每 n 帧 -
你也可以对 3D 纹理做同样的事情......这里是同时使用多个纹理的例子Normal mapping gone horribly wrong 这里是 3D 纹理的例子 3D voxel back raytracing 纹理数组几乎是一样的,这里是 GLSL debug prints是从片段着色器打印文本的示例(您可以使用它进行调试,或打印帧信息或其他)它还显示了如何从位置计算纹理坐标..