【问题标题】:GLKit Transparent TextureGLKit 透明纹理
【发布时间】:2023-03-11 06:26:02
【问题描述】:

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

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

这是我的更新例程的代码 sn-p:

- (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

【问题讨论】:

    标签: ios opengl-es-2.0 glkit


    【解决方案1】:

    两件事 - 首先,您确实需要启用混合。您的代码中有此内容,但已被注释掉:

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

    其次,我看到您正在使用 GLKit GLKBaseEffect。我通过反复试验发现,您必须设置要替换的纹理环境模式,而不是贴花才能使透明度起作用:

    self.effect.texture2d0.envMode = GLKTextureEnvModeReplace;
    

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      相关资源
      最近更新 更多