记录一些OpenGL编写中的问题 NetEase

OpenGL一些笔记。


纹理数组

https://www.khronos.org/opengl/wiki/Array_Texture
http://www.zwqxin.com/archives/opengl/learn-texture-array.html
数组中每个子纹理的大小是一样的,所以需要自己处理不同大小纹理组合问题(小纹理的超出部分是全黑的)。

渲染场景到cubemap中

https://learnopengl.com/PBR/IBL/Diffuse-irradiance
https://learnopengl.com/Advanced-OpenGL/Depth-testing
参考learnopengl中将equirectangular渲染到六个面的代码; 但是要加入depth缓冲的组件,参考learnopengl中的"Depth-testing"章节。

将cubemap渲染到一张equirectangular图

https://stackoverflow.com/questions/35048665/glsl-shader-to-convert-six-textures-to-equirectangular-projection/35050222#35050222
思路是:对于equirectangular图中每一个点,查找其在cubemap中的对应颜色,填写进equirectangular图。 与生成cubemap相反(渲染场景,得到三角形在cubemap中的位置,渲染进cubemap)。

从显存中读取cubemap的六个面

https://www.opengl.org/discussion_boards/showthread.php/199233-Output-cubemap-texture-object-as-bitmap-images?styleid=12
首先创建新的framebuffer和texture,利用glCopyTexImage2D而后再glGetTexImage。尝试了很久直接glGetTexImage、绑定GL_TEXTURE_CUBE_MAP_POSITIVE_X然后glReadPixels都不行,最多只能获取±x方向的贴图。

指定纹理参数

只要纹理被创建了,无论是从显存中读取的还是磁盘上读取的,都需要指定glTexParameteri相关参数。否则在用的时候会显示一片黑,即使在Nsight中看到的纹理也是正确的(我就是创建了一个纹理数组,直接从显存中读取的,没有指定参数)。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.