Rate This Topic

讨论了使用帧缓冲对象(FBO)进行渲染时遇到的问题,特别是如何正确地处理透明度(alpha)通道,确保渲染到FBO的内容能正确显示为透明而非黑色背景。
导读:
  gbiv
  Newbie
  Registered: 07/03/04
  Posts: 39
  Loc: ISU VRAC
  Hello,
  I'd like to create a RTT using an FBO which I then use as a texture on a billboard. My problem is that I'm not able to generate a texture that has "alpha" values. For instance if it were a tree that I rendered in the FBO, I'd try to set my clear color to (0,0,0,0) and then render my tree model in the FBO to create the texture. The output however has the tree surrounded by black rather than "clear". Is this the correct behavior or should I be able to setup the FBO properly to create a the texture properly?
  thanks for any input.
  biv
  #237025- 04/14/0801:38 AM Re: FBO's and alpha[Re: gbiv]
  k_szczech
  OpenGL Pro
  
  
  Registered: 02/20/06
  Posts: 1026
  Loc: Poland
  Explain "tree surrounded by black". Do you mean that your entire texture is black, or do you see black edge aroud the tree?
  If you're experiencing the 'black edge' problem, then it's because pixels of texture are filtered with black background pixels. The simplest solution would be to enable alpha testing when rendering tree from texture and set alpha test to (GL_GREATER, 0.95f).
  The nicest solution would be to perform blur on the texture after you rendered tree into it. Texels with alpha >0 should copy their color to neighbour texels that have alpha = 0, but alpha should not be copied.
  #237030- 04/14/0804:28 AM Re: FBO's and alpha[Re: k_szczech]
  babis
  Contributor
  Registered: 12/09/07
  Posts: 76
  Loc: Hull, UK
  For the 'black edge' problem :
  It's even nicer solution,if you can afford it, to render first the blurred tree on the texture ( without writing to alpha as k_szczech said ) &then layer upon it the 'normal' rendered tree. This way you have no blurring on the inside (where alpha == 1)
  #237032- 04/14/0806:17 AM Re: FBO's and alpha[Re: gbiv]
  Dark Photon
  Regular Contributor
  Registered: 10/06/04
  Posts: 191
  Loc: Arlington, TX
   Originally Posted By: gbiv
  I'm not able to generate a texture that has "alpha" values....The output however has the tree surrounded by black rather than "clear".
  This will solve your problem:
  Tom Forsyth's Blog(See Pre-multiplied Alpha article)
  Bottom line: stop using SRC_ALPHA / ONE_MINUS_SRC_ALPHA blending. Use ONE / ONE_MINUS_SRC_ALPHA blending, and pre-multiply the alpha into the color components. Edited by Dark Photon (04/14/0806:19 AM)
  #237051- 04/14/0801:19 PM Re: FBO's and alpha[Re: k_szczech]
  gbiv
  Newbie
  Registered: 07/03/04
  Posts: 39
  Loc: ISU VRAC
  Sorry for the late responses here. By that I mean, the tree renders as expected on the textured quad however the entire quad is visible. The portion of the quad that is not the tree (not just the border of the tree) is black (or whatever I set my clear color to) rather than completely transparent, so the "illusion" of the billboarded trees is lost because you can tell it's just a textured quad. Did that make sense or do I need to post some pics for clarity?
  #237054- 04/14/0802:02 PM Re: FBO's and alpha[Re: gbiv]
  babis
  Contributor
  Registered: 12/09/07
  Posts: 76
  Loc: Hull, UK
  ok so you either got no alpha at all, or you have but you don't use it. How do you render to the texture? &how do you draw it afterwards?
  #237057- 04/14/0803:03 PM Re: FBO's and alpha[Re: babis]
  zed
  OpenGL Guru
  Registered: 07/06/00
  Posts: 2444
  Loc: S41.16.25 E173.16.21
   Quote:
  were a tree that I rendered in the FBO, I'd try to set my clear color to (0,0,0,0) and then render my tree model in the FBO to create the texture. The output however has the tree surrounded by black rather than "clear".
  yes thats the correct behaviour
  glClearColor(...) clears the buffer to that color, it doesnt make that color invisible
  to make the black invisible u have to set those pixels alpha values to say 0.0 (+ the trees pixels alpha values to 1.0) + then do alphatesting or blending etc
  i suppose u could in a shader make black invisible by going
  if ( dot( vec3(0.0), texture_value ) >0.99 )
  discard;
  but #A its pretty messy + #B its gonna be slower
  #237087- 04/15/0805:46 AM Re: FBO's and alpha[Re: zed]
  Dark Photon
  Regular Contributor
  Registered: 10/06/04
  Posts: 191
  Loc: Arlington, TX
   Originally Posted By: zed
   Quote:
  I'd try to set my clear color to (0,0,0,0) and then render my tree model in the FBO to create the texture. The output however has the tree surrounded by black rather than "clear".
  yes thats the correct behaviour
  glClearColor(...) clears the buffer to that color, it doesnt make that color invisible
  Well, he said he cleared to 0,0,0,0, which has alpha = 0, which by convention is 100% transparent. Something else much be wrong. Such as rendering with BLEND disabled or some such.
  babis, check the alpha values in your edge texels in your texture and make sure their alpha is 0. Also check that when you're blending this texture onto the frame buffer you have BLEND mode enabled:
   Code:
  
  glEnable ( GL_BLEND ) ;
  glBlendFunc ( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );
  glBlendEquation ( GL_FUNC_ADD ) ;
  #237096- 04/15/0808:32 AM Re: FBO's and alpha[Re: Dark Photon]
  gbiv
  Newbie
  Registered: 07/03/04
  Posts: 39
  Loc: ISU VRAC
  Hello all, thanks for the replies. I've tried most of these but with no success. I think this has to do with my FBO setup. However, I'm not sure how to get around the problem if the clear color isn't setting alpha values in the FBO:
  Here are some screen shots of my problem:
  http://www.vrac.iastate.edu/~biv/fbo_clear_color_problem/clearcolor_black_alpha_0.tiff
  http://www.vrac.iastate.edu/~biv/fbo_clear_color_problem/clearcolor_red_alpha_0.tiff
  The flag is textured with the results of rendering the fire to my FBO. No matter what I set the clear color to, the texture doesn't seem to have any alpha information from the FBO outside of the object that I'm rendering (in this case the fire) so even if my texenv is set to REPLACE, the texture still retains the clear color as is shown on the flag. My texture is of format RGBA and is a color buffer attachment to my FBO so I think this is correct...
  I'm not sure how to access those texels without adding some extra pass to post process the texture info as zed suggested, and I agree, this could get messy. Can anyone else reproduce this problem with a simple FBO rtt? This could help me narrow down if the problem is in my code or not.
  Again thanks for the input here.
  biv
  #237103- 04/15/0801:22 PM Re: FBO's and alpha[Re: gbiv]
  zed
  OpenGL Guru
  Registered: 07/06/00
  Posts: 2444
  Loc: S41.16.25 E173.16.21
   Quote:
  Well, he said he cleared to 0,0,0,0, which has alpha = 0
  i believe those alpha values are the destination alpha values eg GL_DST_ALPHA
  i think what gbiv wants is SRC_ALPHA (ie from the texture)
  ok looked at the screenshot i think he wants
  A/ first to draw textureA(fire) into a FBO textureB
  B/ draw this textureB onto a polygon onscreen
  perhaps try
  A/ set the textureB alphavalues from the textureA alphavalues (many ways of doing this)
  B/ draw this texture onscreen with GL_DST_ALPHA, GL_ONE

本文转自
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=237057
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值