Articles of fbo

如何绘制一个迷你地图OpenGL和OpenGL ES?

我正在试图画一张迷你地图。 成功通过FBO将当前屏幕放到较小的屏幕(迷你地图)。 但是我不知道如何在hover的时候让迷你屏幕更加明亮。 你可以想象,真实的屏幕非常大,你在左下方有一个迷你屏幕(如“星际争霸”),当你hover在它上面时,它比其他的更亮。 我试图在FBO中使用多个附件,但它不起作用。 事实上,我不知道多重附件如何工作,它是如何使用的? 我的方法是先用attachment_0绘制地图,然后用attachment_1绘制一个hover的矩形。 绑定然后以合法的顺序绘制所有的附件纹理(NOT WORKED)。 我的意思是,第一个画一个迷你“大屏幕”。 第二个hover时绘制一个更亮的矩形。 任何人都可以引导我如何做到这一点或给我任何建议吗? 非常感谢你!

OpenGL的FBO和渲染场景的图层

我有三个不同的层次,我的场景是组织的,这意味着我可以在不同的层次上放置不同的实体。 这些图层按顺序渲染,我们称之为LAYER_1,LAYER_2和LAYER_3。 每一层渲染到一个单独的FBO,它有一个颜色附件(纹理)和一个深度附件(目前的RBO,不需要在着色器中进行采样)。 每个图层都可以有不同的后处理效果,或者根本不会。 为了清楚起见,也许让我描述一下这个设置的简单用例:我想在场景的顶部渲染UI元素。 我不希望在UI层上发生任何后期处理,只有场景(例如bloom)。 现在我想要做的就是得到三层的输出,并将它们绘制成一个四边形。 获得输出是很简单的部分 – 基本上就是我可以在片段着色器中进行采样的那三种颜色附件。 但是,我怎样才能把结果结合起来呢? 谢谢!

LWJGL帧缓冲纹理问题

我正在尝试使用LWJGL写一个地形渲染系统。 这个地形渲染系统非常简单:当相机靠近它时,四边形网格被拆分,每次创建一个新的四边形时,将使用一个FBO来使用在像素着色器中实现的Perlin噪声渲染高度图。 然后将该纹理应用于四边形,并对法线和高程进行采样。 我遇到的问题有点奇怪…因此,相机开始离开根部四分之一合理的距离。 这导致它被分成4个四边形,每个都有自己的高度图。 这可以表示如下: 随着相机靠近,程序按预期工作,最近的四分之一(白色)被分成四个子四边形,每个四边形都有自己的高度图。 现在就是问题出现的地方…当相机移动得更近时,您看到的蓝色四边形(较大的一个)被分成四个四边形。 然而奇怪的是,最小的绿色四边形的高度图被改变成上面显示的最大的红色四边形的高度图。 1是四分之一,当蓝色四元组被拆分时,其高度图被改变。 #2指的是绿色四核似乎“采取”它是从新的高度图。 随着相机靠近,这种情况会持续发生。 然而,只有绿色的四边形展现了这种行为。 我怀疑这是因为绿色的四边形是最后一个四边形有高度贴图呈现,这可以看到如下: QuadMesh q1 = q.children.get(0); QuadMesh q2 = q.children.get(1); QuadMesh q3 = q.children.get(2); QuadMesh q4 = q.children.get(3); Heightmap.getHeightmap(q1); Heightmap.getHeightmap(q2); Heightmap.getHeightmap(q3); //q4 is the green quad Heightmap.getHeightmap(q4); getHeightmap()方法如下所示: public static void getHeightmap(QuadMesh q){ float scale = q.width/1024; float size = q.width; int unit […]

OpenGL ES 2.0 Framebuffer保持空白?

首先,我想打开另一个FBO问题。 我发现他们很多,但我仍然无法设法得到它的工作。 我想在我的2D Android Applikation中实现一个用于postprocesing的framebuffer类。 既然是2D,我不需要渲染缓冲区来进行深度testing。 我目前的代码有问题,没有得到渲染,所以framebuffer可能是空的。 我正在做这个步骤: private final int framebuffer[] = new int[1]; private final int mTextureID; //GLTexture is my Class for drawing textures.. //I can secure that this class works with drawing normal Textures private final GLTexture mFrame; //init public GLPostProcessor() { //create empty Texture mTextureID = GLSurf.mTexMng.createNewEmpty(); //gen Framebuffer GLES20.glGenFramebuffers(1, framebuffer, […]

可以使用深度input纹理完成对FBO的绘制,还是需要颜色附件?

我试图实现指数阴影贴图 ,我已经得到它几乎工作。 我卡住的部分是深度图的“可选”可分离的高斯模糊,以给出柔和的阴影。 我正在使用附加到临时深度图的OpenGL Framebuffer对象,并且正在尝试使用具有原始深度图的屏幕四边形(两个三角形)作为input纹理。 然后,我对模糊的第二阶段也做了同样的处理,input和输出相反。 不幸的是,这导致深度缓冲区充满了1.0,这暗示着我没有任何东西在被绘制。 在我发现的这个示例代码中 ,他们使用颜色和深度附件来绘制带有模糊着色器的屏幕四边形。 (不幸的是我能find的唯一的OpenGL例子) 我想知道如果这是必要的,或者他们只附加和模糊颜色缓冲区,因为他们正在存储它们的深度值。 换句话说,我想知道在这种情况下是否实际上只能使用深度缓冲区Framebuffer Object attachment。

无法渲染到多个纹理

我试图做一个延迟渲染的例子。 我试图渲染三个独立的纹理的位置,正常和颜色。 这是设置: void setup() { //generate and bind fbo glGenFramebuffers(1, &fboHandle); glBindFramebuffer(GL_FRAMEBUFFER, fboHandle); //generate the depth buffer glGenRenderbuffers(1, &depthBuf); glBindRenderbuffer(GL_RENDERBUFFER, depthBuf); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, WindowSize, WindowSize); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuf); //Create positin, normal and color buffers createBufTex(GL_TEXTURE0, GL_RGB32F, posTex); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, posTex, 0); createBufTex(GL_TEXTURE1, GL_RGB32F, normTex); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, normTex, 0); createBufTex(GL_TEXTURE2, GL_RGB8, colorTex); […]

OpenglGL用一个绘制函数渲染两个场景

我需要绘制一个正常vector场景和默认场景。 我可以做到这一点,我有两个不同的片段着色器程序产生以下图像。 这将需要我画两次。 //somethinglike useProgram(normal_vector_rendering_program); render_bunny(); useProgram(just_default_scene_program); render_bunny(); 但是,当我正在渲染默认场景时,我已经传递了正常的vector信息来实现照明。 所以这让我很好奇,我可以用一个程序(一个有两个color_buffer的程序)和一个draw call来产生两个不同的场景吗? 我认为,如果这样做是可能的,那么我就不需要为不同的图像多次绘制而节省大量的计算机资源。

OpenGL Framebuffer对象问题

我正在努力实现一个适当的Framebuffer对象。 glCheckFramebufferStatus正在返回我:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT(36054)。 我错过了什么? GLuint fbo, rboColor, rboDepth; // Color renderbuffer. glGenRenderbuffers(1,&rboColor); glBindRenderbuffer(GL_RENDERBUFFER,rboColor); // Set storage for currently bound renderbuffer. glRenderbufferStorage(GL_RENDERBUFFER, GL_BGRA, _w, _h); // Depth renderbuffer glGenRenderbuffers(1,&rboDepth); glBindRenderbuffer(GL_RENDERBUFFER,rboDepth); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, _w, _h); // Framebuffer glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER,fbo); glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rboColor); // Set renderbuffers for currently bound framebuffer glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,rboDepth); // Set to write to […]

只有一个对象被渲染为FBO的阴影贴图

我一直在使用OpenGL中的FBO渲染阴影贴图。 我在引擎中设置了一个简单的方向灯,并设法渲染出阴影贴图。 “我的场景”是一座大城堡,阴影笼罩在场景中的大部分物体上。 出于好奇,我拆除了城堡,只是添加了一个简单的地板,我的阴影地图不再适当地渲染。 看起来,一次只有一个对象正在通过我的渲染通道进入阴影贴图。 以下是渲染结构的概述: void RenderingManager::RenderGL() { PreRenderGL(); ShadowPassGL(); //Other user defined render passes here? ScenePassGL(); //Cleanup directionalLights.clear(); pointLights.clear(); renderables.clear(); } ShadowPassGL()调用相当简单 void RenderingManager::ShadowPassGL() { glViewport(0, 0, 1024, 1024); for (unsigned int i = 0; i < directionalLights.size(); i++) directionalLights[i]->RenderShadowMap(ShadowShader); } RenderShadowMap(Shader* shadowShader)调用有点复杂,但是正确的视图设置正确,查看也是正确的。 我已经validation了由我的math函数生成的matrix工作。 void DirectionalLightInternal::RenderShadowMapGL(Shader* shadowShader) { //Bind shadow shader for rendering […]