【发布时间】:2012-02-11 21:16:14
【问题描述】:
我正在尝试创建一个库,我可以用它来处理 Opengl (c++) 中的 2d 渲染,除了我无法弄清楚如何设置当前颜色透明(例如能够设置 255, 0, 255 到透明)我从阅读主题中意识到我需要预处理纹理并将该颜色的 alpha 值设置为 0,但我不知道该怎么做。
PS:如果有帮助,我正在使用 SOIL 加载纹理。
【问题讨论】:
标签: opengl transparency textures
我正在尝试创建一个库,我可以用它来处理 Opengl (c++) 中的 2d 渲染,除了我无法弄清楚如何设置当前颜色透明(例如能够设置 255, 0, 255 到透明)我从阅读主题中意识到我需要预处理纹理并将该颜色的 alpha 值设置为 0,但我不知道该怎么做。
PS:如果有帮助,我正在使用 SOIL 加载纹理。
【问题讨论】:
标签: opengl transparency textures
通过阅读该主题,我意识到我需要预处理纹理并将该颜色的 alpha 值设置为 0,但我不知道如何执行此操作。
for(y = 0; y < image.height; y++) for(x = 0; x < image.width; x++) {
if( image.data[x, y].rgb == colorkey ) {
image.data[x, y].alpha = 0.0;
} else {
image.data[x, y].alpha = 1.0;
}
}
/* ... */
upload_image_to_texture(image);
【讨论】:
首先,我可能会建议您使用 alpha 透明纹理,而不是颜色键/色度键,除非它们有特殊原因不使用(即内存非常低或您尝试使用 Minecraft 的)。
话虽如此,使用着色器。当片段颜色与您的颜色键匹配时,在您的片段着色器中使用“丢弃”关键字。有一个official tutorial。
【讨论】: