gpt4 book ai didi

ios - GLKit 透明纹理

转载 作者:行者123 更新时间:2023-11-29 10:57:34 27 4
gpt4 key购买 nike

我使用以下链接获取在 iOS 中绘制 3D 立方体的源代码。

http://www.raywenderlich.com/5235/beginning-opengl-es-2-0-with-glkit-part-2

这是我的更新例程的代码片段:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glClearColor(30/255.0, 30/255.0, 30/255.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);

// Enable transparency
//glEnable(GL_BLEND);
//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

[[self effect] prepareToDraw];

glBindVertexArrayOES(_vertexArray);
glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);

// Cleanup: Done with the current blend function
//glDisable(GL_BLEND);

我正在尝试创建一个具有透明纹理的立方体,并最终绘制底层面。我附上了我的实际纹理。现在看起来是一个显示所有面的立方体,没有透明度显示底层面。如果我取消注释混合例程,它会绘制一个混合在背景上的透明立方体,但其他面。

这是我如何加载纹理的一部分:

_effect = [[GLKBaseEffect alloc] init];

NSDictionary * options = @{ GLKTextureLoaderOriginBottomLeft: @YES };
NSError *error;
NSString *path = [[NSBundle mainBundle] pathForResource:@"Texture200x200" ofType:@"png"];
GLKTextureInfo *info = [GLKTextureLoader textureWithContentsOfFile:path options:options error:&error];
if (info == nil) {
NSLog(@"Error loading file: %@", error.localizedDescription);
}
[[[self effect] texture2d0] setName:info.name];
[[[self effect] texture2d0] setEnabled:YES];
[[[self effect] texture2d0] setEnvMode:GLKTextureEnvModeDecal];

纹理只是一个带有实心点的 poka-dot 纹理,负空间是完全透明的。我对 openGL 很陌生。感谢您的帮助!

我包含了我要完成的事情的链接。接近尾声时,您会看到纹理是如何融合在一起的。

http://www.youtube.com/watch?v=TtK_8sddGaQ

最佳答案

两件事 - 首先,您确实需要启用混合。你的代码中有这个,但它被注释掉了:

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

其次,我看到您正在使用 GLKit GLKBaseEffect。我通过反复试验发现,您必须将纹理环境模式设置为替换,而不是贴花,以便透明工作:

self.effect.texture2d0.envMode = GLKTextureEnvModeReplace;

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

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