【问题标题】:How to redraw a view? (OpenGl)如何重绘视图? (OpenGL)
【发布时间】:2010-08-17 21:46:25
【问题描述】:

我想创建一种模拟。它应该显示鱼/鲨鱼/逆戟鲸的特定位置(不是真实的,它们是随机设置的)。我的模拟可以显示启动情况:

glOrtho(0, breite, 0, hoehe, 0, 1);
glClearColor(0, 0, 1, 0);
glClear(GL_COLOR_BUFFER_BIT);

//Besetzen der Felder
srand(time(0));
NSMutableArray* Wator = [NSMutableArray new];
for(int y = 0; y < hoehe; y++){
    for(int x = 0; x < breite; x++){
        NSInteger r = rand() % 100;
        if (r < fishPer) {
            [Wator addObject:[[[Fish alloc]init]autorelease]];
            drawAFish(x,y);

        }else {
            if (r < sharkPer + fishPer) {
                [Wator addObject:[[[Shark alloc]init]autorelease]];
                drawAShark(x, y);
            }else {
                if (r < orcaPer + sharkPer + fishPer) {
                    [Wator addObject:[[[Orca alloc]init]autorelease]];
                    drawAOrca(x, y);
                }
            }
        }
    }
}
glFlush();

它工作正常。 drawAFish/drawAShark ... 绘制一个简单的四边形:

static void drawAOrca (int x, int y)
{
    glColor3f(1.0f, 1.0f, 0.0f);
    glBegin(GL_QUADS);
    {
        glVertex3i( x, y, 0);
        glVertex3i( x+1, y, 0);
        glVertex3i( x+1, y+1, 0);
        glVertex3i( x, y+1, 0);
    }
    glEnd();
}

所以我的问题是:如何重绘场景?

在 google 或文档中没有太多有用的信息。

感谢您的帮助

马塞尔

【问题讨论】:

    标签: objective-c opengl redraw


    【解决方案1】:

    只需清除屏幕并重新绘制所有内容。这是标准方法。

    【讨论】:

    • 我试过这个,但是当应用程序等到脚本结束时。但我想显示介于两者之间的步骤。我也试过用glFinish代替glflush,但出现了同样的问题。
    • @Marcel 发生了什么同样的问题?
    • 显示在最后,但中间应该有重绘。我只得到一个输出。我用睡眠功能对其进行了测试,以控制它是否运行得很快。
    • 您应该每帧清除屏幕(颜色缓冲区、深度等)。
    • 我尝试了所有我找到的 glClear(),但没有任何改变。仍然只显示最后一个。能否请您告诉我如何正确清除屏幕。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多