gpt4 book ai didi

ios - GLKit 中的深度测试

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:46 28 4
gpt4 key购买 nike

我是 OpenGL/GLKit 的新手,在深度测试方面遇到了麻烦。下图显示了一个柱子,有五个横梁与它相交。它们都在中间(柱子内部)相遇,但正如您所见,本应被遮挡的光束部分仍然可见。它们疯狂地闪烁,当我改变 View 使光束在屏幕上重叠时,同样的事情发生了。如果我不使用 glEnable(GL_CULL_FACE),那么它会在每个形状内发生,即后多边形的背面被绘制并干扰前多边形的正面。

enter image description here

以下是我认为相关的代码片段,我省略了有关设置顶点和视角的内容。希望有人会认识到这个问题并且那里有 Elixir 。

在我的 View Controller 中

- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;

[self setupGL];
}


- (void)setupGL
{

[EAGLContext setCurrentContext:self.context];
self.effect = [[GLKBaseEffect alloc] init];

self.effect.lightModelAmbientColor = GLKVector4Make(0.5, 0.5, 0.5, 1);
self.effect.colorMaterialEnabled = GL_TRUE;
self.effect.light0.enabled = GL_TRUE;
self.effect.light0.position = GLKVector4Make(2, 4, -5, 1);
self.effect.material.shininess = 10.0;
self.effect.material.specularColor = GLKVector4Make(0.5, 0.5, 1, 1);
self.effect.lightingType = GLKLightingTypePerPixel;

glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glDepthFunc(GL_LEQUAL);
}


- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
glClearColor(0.2, 0.2, 0.2, 0.5);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self.effect prepareToDraw];
[beams makeObjectsPerformSelector:@selector(draw)];
[post draw];

}

在光束中

-(void) draw
{
self.effect.material.shininess = 15.0;

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, triangleVertices);

glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, 0, triangleColours);

glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 0, triangleNormals);


glDrawArrays(GL_TRIANGLES, 0, 48);

glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribColor);
glDisableVertexAttribArray(GLKVertexAttribNormal);

}

我完全承认自己在这方面非常新且缺乏经验,所以如果我的应用程序结构不佳,我非常愿意接受建设性的批评。

干杯, 克雷格

最佳答案

解决方案来自 HannesSAK (http://www.iphonedevsdk.com/forum/iphone-sdk-development/5239-opengl-es-problem-depthbuffer-culling.html) 似乎将 zNear 设置为 0.0f我的问题。我将其更改为 1.0f,图像呈现正确。

self.effect.transform.projectionMatrix = GLKMatrix4MakePerspective(0.125*RADIANS, 2.0/3.0, 1.0f, 50.0f);

关于ios - GLKit 中的深度测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8370998/

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