- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 OpenGL ES 的新手。作为测试,我试图在 GLKView 上绘制一个简单的三角形。没有编译或运行时错误,也没有 OpenGL 错误。它只是简单地不绘制三角形。它设置了清晰的颜色 OK,这意味着 OpenGL 正在工作,但它只是不绘制三角形,我做错了什么......
绘图回调代码
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
const GLfloat triangleVertices[] = {
0.0, 2.0, 3.0, // Triangle top centre
-2.0, -2.0, 3.0, // bottom left
2.0, -2.0, 3.0 // bottom right
};
glViewport(0, 0, 12, 12);
[self checkError];
glMatrixMode(GL_MODELVIEW);
// Our new drawing code goes here
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self checkError];
// Red
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, &triangleVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3);
[self checkError];
}
整个文件代码
#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>
@interface ViewController ()
@property (nonatomic, retain) EAGLContext *context;
@end
@implementation ViewController
@synthesize context = _context;
@synthesize Zoom = _Zoom;
- (void)dealloc
{
[_context release];
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1] autorelease];
if (!_context) {
NSLog(@"Failed to create ES context");
}
_Zoom = 1;
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[EAGLContext setCurrentContext:self.context];
[self setupGL];
[self checkError];
}
- (void)viewDidUnload
{
[super viewDidUnload];
if ([EAGLContext currentContext] == self.context) {
[EAGLContext setCurrentContext:nil];
}
self.context = nil;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc. that aren't in use.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
- (void)setupGL
{
[EAGLContext setCurrentContext:self.context];
CGFloat w = self.view.bounds.size.width;
CGFloat h = self.view.bounds.size.height;
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glClearColor(0.65f, 0.65f, 1.00f, 1.0f);
double mLat = (((double)h / 2) * (_Zoom / 60));
double mLon = (((double)w / 2) * (_Zoom / 60));
glOrthof((float)-mLon, (float)mLon, (float)-mLat, (float)mLat, -5.0f, 5.0f);
glViewport(0, 0, w, h);
}
-(void) checkError
{
GLenum error = glGetError();
if (error == GL_NO_ERROR)
return;
switch (error)
{
case GL_INVALID_ENUM:
NSLog(@"Invalid Enum");
break;
}
}
#pragma mark - GLKView and GLKViewController delegate methods
- (void)update
{
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
const GLfloat triangleVertices[] = {
0.0, 2.0, 3.0, // Triangle top centre
-2.0, -2.0, 3.0, // bottom left
2.0, -2.0, 3.0 // bottom right
};
glViewport(0, 0, 12, 12);
[self checkError];
glMatrixMode(GL_MODELVIEW);
// Our new drawing code goes here
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self checkError];
// Red
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, &triangleVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3);
[self checkError];
}
@end
最佳答案
您对 glViewport(12,12)
的调用(在 -glkView:drawInRect:
中)告诉系统您正在尝试绘制 12 x 12 像素像素区域。那是你要的吗?那个好像很小
关于objective-c - 在 GLKView 中绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960115/
从 iOS 11 开始,当我们在 GLKView 上调用显示方法时,我注意到 OpenGL-ES 崩溃。我们已确保 GLKView 和 EAGLContext 已正确实例化并从适当的线程调用。 下面是
我刚刚开始研究适用于 iOS 的 Open GL ES,我正在查看苹果模板代码上的源代码。问题是两个 - (void)glkView:(GLKView *)view drawInRect:(CGRec
当继承 GLKViewController 时,它有两个方法: - (void)update, 和- (void)glkView:(GLKView *)view drawInRect:(CGRect)
我的 iOS 应用程序窗口顶部的导航栏和底部的工具栏之间有一个 GLKView (OpenGL ES2.0)。我已经使用 UIPinchGestureRecognizer 实现了捏合缩放,但是当我缩小
我无法找到正确的位置来为使用 GLKView 和 GLKViewController 的 OpenGLES 应用程序进行着色器设置。 看起来 viewDidLoad 是一个很自然的地方,但是当我在这里
我使用外部渲染器创建应用程序以及如何按请求调用重绘?例如,在 Android 上,我可以使用 requestRenderer() 和 RENDERMODE_WHEN_DIRTY 渲染模式来完成此操作。
如果我 NSLog 我的 GLKView 类,我得到 GLKView 但为什么它没有可以分配给 EAGLContext 的上下文属性?为什么我必须将它转换为另一个变量,然后分配 EAGLContext
我正在开发 iPad OpenGL ES 2.0 应用程序,需要 1024x768 的后备帧缓冲区。我使用 GLKView 和 iOS 5.1 来管理后端帧/渲染缓冲区的创建(使用 XCode 提供的
如果我在界面生成器中创建 GLKView,我会看到几个与 gl 上下文相关的可配置属性(例如颜色格式)。如果我必须手动创建上下文,为什么还要存在这些属性? 最佳答案 颜色格式,无论是否有深度缓冲区等,
我正在尝试使用 GLKView 创建带有触摸输入的签名。但现在我需要一个 UIImage 位于签名下方。简而言之:我想使用自定义 GLKView 在 UIImage 上方绘制线条。 问题是我的线每次都
我有一个显示 CIFilter 的 CIImage 的 GLKView。当我通过捏合手势调整 View 框架大小时,我的帧率很低。这背后的问题是什么?我怎样才能适应它? 最佳答案 由于此 API 的工
我有一个基于“OpenGL 游戏”Xcode 模板的应用程序,用于日常测试/开发我想在模拟器中渲染全屏但分辨率较低(例如 1/2 或 1/4)。有什么有效/精明的方法来实现这一点? (如果有人想知道,
我很难找到任何示例来说明如何将 Core Image 与 GLKView 一起正确使用,以便顺畅地呈现 Core Image“配方”以响应用户输入。所以,看完Core Image Programmin
我遇到了这个异常: 2014-02-19 19:08:34.590 MyApp[42353:70b] *** Terminating app due to uncaught exception 'NS
当 GLKView 调整大小时,会在该 GLKView 的缓冲区和上下文中发生一些幕后操作。在执行这些幕后操作期间,绘制到 GLKView 不会产生正确的结果。 在我的场景中,我有一个启用了 setN
我正在尝试使用 GLKView 将图像放入 UITableViewCell 中以绘制图像。 我在 Storyboard中有一个原型(prototype)单元,其中有一个 GLKView。它没有选中启用
我正在学习 OpenGLES,我正在尝试将 GLKViewer 放入 UIViewController 中。 我知道我可以通过使用 GLViewController 来解决主要问题,但我正在努力学习如
我正在学习适用于 iOS 的 OpenGL ES 并在线学习 Ray Wenderlich 的教程。他做的第一件事是使用 OpenGL ES 2.0 将 View Controller 中的 View
我正在使用 GLKit 在 iPhone 上创建游戏。设置 GLKit 上下文并在其上绘制 Sprite 并不难,但是当我尝试向其添加文本时,这似乎是不可能的。我四处寻找答案,但我试图找到的所有解决方
我有一个 MainMenuViewController 和一个 GameViewController,它是一个 GLKViewConrtroller。 我第一次从主菜单转到 GameViewContr
我是一名优秀的程序员,十分优秀!