首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cocoa的简单OpenGL示例

问使用Cocoa的简单OpenGL示例
EN

Stack Overflow用户
提问于 2012-03-27 22:30:18
回答 3查看 7.4K关注 0票数 2

几个星期以来,我一直在试图用Objective中的OpenGL来大做文章,但我似乎无法让它发挥作用。我从绘图到NSOpenGLView类:教程开始,这对我来说很好,我甚至能够对它做一些扩展,但是OpenGL编程指南在这一步之后留下了一个漏洞。它们解释了如何加倍缓冲区和同步刷新速率的细节,以及所有这些,但它们没有提供任何如何更新视图的实际示例。所以目前我可以在屏幕上画很多很酷的东西,但是一旦它出现了,它只是一个静态的图像。不许动,不许旋转。

有没有人知道一个好的,简单的例子,这是怎么做的呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-01 07:17:01

这是我经常遇到的问题,这一关键步骤不是NSOpenGLView教程文档的一部分,这让我感到惊讶。

您需要设置回调计时器,以通知视图它需要重新绘制:

代码语言:javascript
复制
- (void)awakeFromNib
{
    NSTimer *updateTimer = [NSTimer timerWithTimeInterval:1.0f/30.0f target:self selector:@selector(idle:) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:updateTimer forMode:NSDefaultRunLoopMode];
}

注意,这发生在awakeFromNib中。计时器的发射间隔为1/30,如果你愿意,你可以改变它。每次触发时,它都会调用一个名为idle的函数。这个函数的实现方式如下:

代码语言:javascript
复制
- (void)idle:(NSTimer*)timer
{
    [self setNeedsDisplay:YES];
}

这将导致视图在每次更新时都重新绘制自己,包括OpenGL图形。

票数 3
EN

Stack Overflow用户

发布于 2012-03-27 23:04:34

您可以尝试使用显示链接来重复绘制与显示同步的绘图。设置一个:

代码语言:javascript
复制
GLint swapInt = 1;
[yourContext setValues:&swapInt forParameter:NSOpenGLCPSwapInterval]; 

CVDisplayLinkCreateWithActiveCGDisplays(&displayLink);
CVDisplayLinkSetOutputCallback(displayLink, &displayLinkCallback, self);

CGLContextObj cglContext = [yourContext CGLContextObj];
CGLPixelFormatObj cglPixelFormat = [[NSOpenGLView defaultPixelFormat] CGLPixelFormatObj];
CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(displayLink, cglContext, cglPixelFormat);

CVDisplayLinkStart(displayLink);

然后,每帧运行一次回调:

代码语言:javascript
复制
static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
{
    NSAutoreleasePool* pool = [NSAutoreleasePool new];
    if ([self lockFocusIfCanDraw])
    {
        //Your drawing code
        [self unlockFocus];
    }
    [pool drain];

    return kCVReturnSuccess;
}
票数 6
EN

Stack Overflow用户

发布于 2012-03-27 22:57:54

这是一个非常普遍的问题,如何最终设计渲染引擎的整个结构取决于您。这将是很多很多告诉你如何实现这一点,但有大量的书籍和教程在线获得明星。

对于如何慢慢创建一个适合于游戏的简单结构(在本例中为2D),可以找到一个相当不错的严肃问题,但这是针对这里的,因此您需要对此进行调整,但是假设您对编程有了大致的理解,那么您应该能够理解他正在构建的总体设计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9898649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档