gpt4 book ai didi

ios - GLKit 和透明度

转载 作者:行者123 更新时间:2023-11-29 10:58:49 25 4
gpt4 key购买 nike

我正在尝试使用 OpenGL ES 和 GLKit 绘制类似这样的东西

enter image description here

但是我明白了

enter image description here

虽然纹理是透明的,但模型的上层替换了下面的纹理而不是混合。有可能以某种方式修复它吗?

- (void)setup {

self.effect = [[GLKBaseEffect alloc] init];

NSURL *textureURL = [[NSBundle mainBundle] URLForResource:@"portalTexture_ALIENS" withExtension:@"png"];
texture = [GLKTextureLoader textureWithContentsOfURL:textureURL options:nil error:nil];

if (texture != nil) {
self.effect.texture2d0.enabled = GL_TRUE;
self.effect.texture2d0.envMode = GLKTextureEnvModeReplace;
self.effect.texture2d0.target = GLKTextureTarget2D;
self.effect.texture2d0.name = texture.name;
}

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, texturedPortalVerts);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, texturedPortalTexCoords);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

}

- (void)draw {
[self.effect prepareToDraw];
glDrawArrays(GL_TRIANGLES, 0, texturedPortalNumVerts);
}

谢谢。

最佳答案

OpenGL 中的透明度取决于顺序。存在用于顺序独立透明度的算法,但它们相当复杂并且有一些严重的妥协。但是,对于您的情况,您可以使用 alpha 测试来解决大部分问题。 Alpha 测试会忽略 alpha 低于特定阈值的像素(示例中的空白区域)。用谷歌搜索 glAlphaFunc 的确切用法。

如果您使用的是 OpenGL ES 2.0,则内置的 alpha 测试不可用,您必须在着色器中实现它。它看起来像这样:

if (texture.alpha < 0.5)
{
discard;
}

请注意,alpha 测试可能会严重影响填充率性能。

关于ios - GLKit 和透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com