我有一个 1024x1024 背景纹理,我正在尝试将 100x100 精灵(也存储在纹理中)渲染到背景纹理的左下角。
我想以 50% 的不透明度渲染精灵。这需要在 CPU 中完成,而不是在使用着色器的 GPU 中完成。我发现的大多数示例都是使用着色器来实现这一点。
最好的方法是什么?
我有一个 1024x1024 背景纹理,我正在尝试将 100x100 精灵(也存储在纹理中)渲染到背景纹理的左下角。
我想以 50% 的不透明度渲染精灵。这需要在 CPU 中完成,而不是在使用着色器的 GPU 中完成。我发现的大多数示例都是使用着色器来实现这一点。
最好的方法是什么?
我想您的意思是来自 CPU 端的 opengl 命令,因此使用固定功能(或固定管道)。我从“无着色器”请求中推断出这一点。因为“在 CPU 上执行此操作”实际上意味着对纹理进行检索/映射以在 CPU 上访问它,循环像素,然后使用 glTexImage 将结果复制回图形卡或取消映射纹理。最后一种方法效率极低。所以你只需要激活混合。
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
并按顺序渲染:背景,然后是带有 100x100 图像的小四边形。它将从您的 100x100 图像中获取 Alpha 通道来进行混合。您可以通过图像编辑工具将其设置为恒定的 50%。