- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 OpenGL/GLKit 的新手,在深度测试方面遇到了麻烦。下图显示了一个柱子,有五个横梁与它相交。它们都在中间(柱子内部)相遇,但正如您所见,本应被遮挡的光束部分仍然可见。它们疯狂地闪烁,当我改变 View 使光束在屏幕上重叠时,同样的事情发生了。如果我不使用 glEnable(GL_CULL_FACE),那么它会在每个形状内发生,即后多边形的背面被绘制并干扰前多边形的正面。
以下是我认为相关的代码片段,我省略了有关设置顶点和视角的内容。希望有人会认识到这个问题并且那里有 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/
场景 我正在构建一个应用程序来处理视频帧的色度值。我正在使用来自另一个项目的 Objective-C 代码并将其翻译成 Swift。但是我遇到了一段奇怪的代码,我想将其翻译成 Swift,如果我能弄清
我正在 opengles 中制作一个基本应用程序,我从“raywenderlich”Glkit 教程开始。这将在应用程序的启动屏幕中显示一个立方体。他在教程中提到了以下几行来执行此操作。 To mak
有没有一种方法可以将CATransform3D转换为GLKMatrix4,还是我总是需要手动将它们从值转换为值? 我想转换会更快。 最佳答案 不幸的是,到目前为止还没有。 Apple最有可能使用隐藏的
我在使用 GLKit 对 PNG 图像着色时遇到问题。 我有一个白色 PNG 图像,我将其加载到应用程序中,然后使用它来创建纹理: UIImage *image = [ UIImage imageNa
过去几天我一直在使用一些具有颜色属性和位置属性的 GLKit 代码,但是当我尝试添加普通属性时,它每次都会崩溃。 顶点着色器: attribute vec4 SourceColor; attrib
我有一个使用 glKit 运行的游戏,我想在每一帧渲染后使用着色器添加一些后期处理效果。 是否可以在 glKit 下执行此操作? 最佳答案 这是可能的。 您需要创建自己的屏幕外帧缓冲区对象和相关纹理。
我正在尝试使用 OpenGL ES 和 GLKit 绘制类似这样的东西 但是我明白了 虽然纹理是透明的,但模型的上层替换了下面的纹理而不是混合。有可能以某种方式修复它吗? - (void)setup
我使用以下链接获取在 iOS 中绘制 3D 立方体的源代码。 http://www.raywenderlich.com/5235/beginning-opengl-es-2-0-with-glkit-
我最近开始了一个基于 OpenGL 示例的新 iOS 项目。我添加了自己的相机移动代码,并且添加了一个包含 Block 实例的 NSMutableArray(当前仅包含 3D 位置)。我已经修改了绘图
当我尝试在 OpenGl ES 2.0 中创建一个带有附加纹理的 FBO 时,如下所示: glGenFramebuffers(1, &framebuffer); glGenTextur
我正在运行 XCode 为 iOS 的 OpenGL 项目创建的样板 OpenGL 示例代码。这会设置一个简单的 ViewController 并使用 GLKit 来处理其余的工作。 应用程序的所有更
我正在尝试转换 OGL ES 1.1。代码到 GLKit。 GLKit 提供了一对纹理插槽: 纹理2d0 纹理2d1 每个纹理都有一个环境模式: GLKTextureEnvModeReplace, G
我是 OpenGL/GLKit 的新手,在深度测试方面遇到了麻烦。下图显示了一个柱子,有五个横梁与它相交。它们都在中间(柱子内部)相遇,但正如您所见,本应被遮挡的光束部分仍然可见。它们疯狂地闪烁,当我
我正在使用 Ray Wenderlich 的教程使用 GLKit 制作一个简单的 OpenGlES 2 应用程序,但我遇到了一些问题。 我将示例代码更改为通过将顶点和索引数据添加到现有顶点和索引数据结
我使用了 this link 中的代码映射人脸的纹理。此代码使用 GLKIT 来呈现图像。代码在模拟器中运行良好,但如果我在设备中运行,则相同的代码无法运行。以下是它在设备中而不是在我的 ipad 中
我一直在阅读使用 GLKit 和您自己的自定义着色器是多么容易。但是,到目前为止,我还没有找到有关如何实际操作的任何信息。如何将我自己的着色器“插入”到现有的 GLKit 项目中? 最佳答案 好吧,你
我刚刚安装了当前的 Xcode 4 版本,并实现了新的“GLKit”API,该 API 也用于 iOS 的 OpenGL 模板。所以,我想开发一款适用于 iOS、Mac 和 Windows 的跨平台游
在 iOS 5 中,使用 EAGLView,您可以: glPushMatrix(); glTranslatef(x, y, 0.0f); glDrawArrays(GL_TRIANGLE_STRIP,
我几乎完成了我的应用程序。其中一个 View 使用 GLKit。我只是内存有问题。基本上发生的事情是,当显示 GLKView 时,内存消耗不断上升(在 Instruments 中看到)。在某个时候它显
我正在尝试使用 GLKit 绘制半透明多边形,但没有成功。所以我想知道是否有可能首先在 GLKit 中使用半透明多边形,因为我知道它在 OpenGL 的标准实现中不受支持;但可以使用自定义着色器进行模
我是一名优秀的程序员,十分优秀!