标签: render-to-texture

使用alpha渲染纹理问题

当我渲染到纹理,然后绘制相同的图像时,它似乎使一切变得更暗.要获得此图像:

http://img24.imageshack.us/img24/8061/87993367.png

我将左上角的正方形(1, 1, 1, .8)渲染为纹理,然后渲染该纹理,再将中间正方形(相同的颜色)渲染到另一个纹理,最后将该纹理加上右下方(相同的颜色)到屏幕.

正如你所看到的,每次渲染到纹理时,一切都会变得更暗.

我的渲染到纹理代码看起来像:(我在iPhone上使用OpenGL ES)

// gen framebuffer
GLuint framebuffer;
glGenFramebuffersOES(1, &framebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);

// gen texture
GLuint texture;
glGenTextures(1, &texture);

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);

// hook it up
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture, 0);
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES))
   return false;

// set up drawing
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
glViewport(0, 0, Screen::Width, Screen::Height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, Screen::Width, 0, Screen::Height, -1, 1); …
Run Code Online (Sandbox Code Playgroud)

alpha opengl-es render-to-texture

4
推荐指数
1
解决办法
2873
查看次数

GL_TEXTURE_2D与GL_TEXTURE_RECTANGLE

我有一个小程序,呈现黄色三角形两次,一次在帧缓冲的左半部分,一次在右侧.

转储纹理

在此输入图像描述

现在,之后我在屏幕上渲染此帧缓冲区的内容.

如果我在framebuffer构造函数中使用GL_TEXTURE_RECTANGLE,它可以工作:

https://github.com/elect86/Joglus/blob/master/Joglolus/src/joglus/example1/FrameBuffer.java

在绑定纹理时,函数renderFullScreenQuad,第372行:

https://github.com/elect86/Joglus/blob/master/Joglolus/src/joglus/example1/GlViewer.java

并在片段着色器中使用sampler2DRect:

#version 330

out vec4 outputColor;
uniform sampler2DRect texture0;

void main() {
    outputColor = texture(texture0, gl_FragCoord.xy);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将所有RECTANGLE更改为2D并且我在fs中使用sample2D,我会在显示结束时获得一个完整的黑色图像(),尽管纹理的转储始终显示正确的图像......我想知道为什么.

jogl texture2d render-to-texture opengl-3

4
推荐指数
1
解决办法
3178
查看次数

XNA什么时候放弃渲染目标内容?

我知道XNA中的渲染目标是不稳定的,但它们有多么不稳定?我找不到任何文件来告诉他们的内容何时被丢弃.是在你开始吸引他们的时候,还是在任何时候?

我想简单地绘制一个渲染目标,然后无限期地将其用作Texture2D.这可能吗?我需要启用RenderTargetUsage.PreserveContents它才能正常工作吗?我已经读过PreserveContents在Xbox和手机硬件上非常慢.

c# xna direct3d render-to-texture

3
推荐指数
1
解决办法
2200
查看次数

将整数纹理附加到帧缓冲区

我正在尝试将具有内部格式的纹理附加GL_R32UI到帧缓冲区,以用作ID缓冲区。但是,即使它是唯一的附件,也要glCheckFramebufferStatus不断提出GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

这对我来说很奇怪,因为OpenGL 4.2规范似乎GL_R32UI表明OpenGL实现是附加到帧缓冲区时OpenGL实现必须支持的格式之一。我怀疑这是驱动程序错误。我是对的,还是有人可以告诉我我所忽略的东西?

opengl graphics textures framebuffer render-to-texture

3
推荐指数
1
解决办法
1423
查看次数

如何在 Three.js 中使用视频元素或 html 内容作为面部纹理?

我希望在 Three.js 中使用视频纹理作为脸部。我知道如果您有视频数据,这很容易做到。但是,如果我只有正在播放的元素,我该怎么办?

例如:我如何播放 YouTube 视频并将视频或播放器复制到 Three.js 中的脸上?

youtube render-to-texture three.js

3
推荐指数
1
解决办法
6187
查看次数

从几个纹理SDL-2创建新纹理

我有几个纹理将在我的屏幕上保持静止.我不是在渲染时单独渲染每个渲染,而是将它们全部渲染为一个纹理.到目前为止我的代码看起来像:

SDL_Texture* target_texture = NULL;
SDL_SetRenderTarget(renderer, target_texture);
SDL_RenderCopy(renderer, texture1, NULL, &dst1);
SDL_RenderCopy(renderer, texture2, NULL, &dst2);
SDL_RenderCopy(renderer, texture3, NULL, &dst3);
.
.
.
SDL_SetRenderTarget(renderer, NULL);
SDL_RendererPresent(renderer);
// Here the screen displays as I want
SDL_Delay(2000);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, target_texture, NULL, NULL);
SDL_RendererPresent(renderer);
// Here the screen is black as though target_texture is still NULL
Run Code Online (Sandbox Code Playgroud)

textures render render-to-texture sdl-2

3
推荐指数
1
解决办法
2335
查看次数

如何渲染为无符号整数格式

当渲染到具有无符号整数格式的FBO时,我可能不能:

gl_FragColour = uvec4(100,100,100,100);
Run Code Online (Sandbox Code Playgroud)

因为gl_FragColour是一个vec4.所以我想我必须定义自己的?

out uvec4 colour
Run Code Online (Sandbox Code Playgroud)

但是如果没有任何其他变化,这将被正确解释吗?

此外,我想对无符号整数格式和普通浮点纹理使用相同的着色器,并在统一(静态分支)上使用if.我猜这是不可能的(除非我可以有2个出局而且只设置一个?)我可能需要探索一个函数指针方法?

opengl fbo textures glsl render-to-texture

3
推荐指数
1
解决办法
2836
查看次数

如何访问 WebGLRenderTarget 纹理内容

因此,我将场景渲染为纹理,然后我需要在 js 中处理纹理,然后修改内容或从一组值创建新纹理。

似乎我需要获取 WebGL 上下文并直接与 WebGL 接口来完成此操作。有人知道这样做的最佳方法吗?

render-to-texture rendertarget three.js

3
推荐指数
1
解决办法
2480
查看次数

通过第三个纹理插入两个纹理(因子是亮度,而不是alpha)

如何通过动态纹理C有效地插入每像素两个纹理A和B并在简单的四边形上绘制它们?接受多遍算法.

我已经成功地计算了CPU上每帧的C纹理并将其上传glTexImage2D到仅alpha纹理中.

虽然这很有效,但性能却很差,我不得不将C的尺寸减小到全尺寸的一半,以克服复制带宽瓶颈.

因此,出于性能原因,我正在尝试使用渲染到纹理来完成所有C纹理更新.

我能够为渲染设置必要的缓冲区,但从根本上说,我得到RGB或RGBA格式的纹理,掩模用亮度/RGB信息编码,而不是alpha.

如何有效地将其转换为我需要插入纹理管道的alpha纹理?请记住,iPhone上没有可编程管道(着色器)和只有两个纹理单元.

更新: A和B是仅RGB的纹理,即没有alpha.

iphone opengl-es render-to-texture

2
推荐指数
1
解决办法
804
查看次数

绘制到不同大小的FBO

我在使用FBO时遇到了问题.

我的窗口大小是1200x300.

当我创建一个1200x300的FBO时,一切都很好.

但是,当我创建尺寸为2400x600的FBO(实际上,两个轴上的两倍大)并尝试渲染完全相同的基元时,我只使用了FBO实际区域的四分之一.

FBO与窗口大小相同:

大小相同

FBO两倍大(可以注意到三角形剪裁):

大小不同

我将这两个三角形渲染成FBO,然后渲染一个全屏四边形,其上有一个FBO纹理.我用这种松绿色清除FBO,所以我确定第二张照片上的所有空白空间实际上来自FBO.

// init() of the program
albedo = new RenderTarget(2400, 600, 24 /*depth*/);  // in first case, params are 1200, 300, 24

// draw()
RenderTarget::set(albedo);   // render to fbo
RenderTarget::clearColor(0.0f, 0.3f, 0.3f, 1.0f);
RenderTarget::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// render triangles ...
glDrawArrays(GL_TRIANGLES, 0, 6);

// now it's time to render a fullscreen quad
RenderTarget::set();   // render to back-buffer
RenderTarget::clearColor(0.3f, 0.0f, 0.0f, 1.0f);
RenderTarget::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, albedo->texture());
glUniform1i(albedoUnifLoc, 0);
RenderTarget::drawFSQ();   // draw fullscreen quad …
Run Code Online (Sandbox Code Playgroud)

opengl fbo opengl-es render-to-texture

2
推荐指数
1
解决办法
1116
查看次数