我正在尝试使用 Cocos2d HTML5 框架,但我认为这是一个标准的 WebGL 问题,我无法确定,因为我对该主题没有很好的了解。如果我有一个带有半透明像素(例如软边缘)的标准 PNG 图像,并且如果背景(画布或 RenderTexture 后面的其他元素)填充了非黑色,则绘制到 RenderTexture 时的精灵最终会浸入即使不应该出现背景。例如,如果我正在绘制的图形是红色并且我使用绿色背景,则半透明像素最终会变成黄色。请参阅这些图片以获取说明:
在纯黑色背景下的外观,这就是我想要的
出现在非黑色背景下,背景渗出
当我放置任何非 100% 不透明的图像时,背景中的任何内容都会显示出来。
完整的基于 JavaScript 的 RenderTexture 类代码可以在 cocos2d-html5 Github Repository 的 cocos2d/misc_nodes/CCRenderTexture.js 下查看。它是 Cocos2d-x C++ / Objective C 的转换(不存在这个问题)。在 cocosd-iphone 问题跟踪器上有一个报告的问题 #937,描述了几年前非 HTML 版本的相同问题。此后已解决,但我似乎无法确定分辨率是什么或如何将其转换为 WebGL 格式。我确定这是一个混合问题,但我尝试更改混合模式(从 GL_ONE、GL_ONE_MINUS_SRC_ALPHA 到 GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA 等)无济于事。
OpenGL / WebGL 专家的任何帮助将不胜感激。如果我在这个 RenderTexture 之外使用 Cocos2d 中的标准“精灵”,则问题不存在。此外,MotionStreak 功能似乎也可以正常工作,但我需要 RenderTexture 创建动态纹理以供进一步使用。