0

网站上的第一个问题,所以如果我做了任何非常规的事情,我很抱歉。我决定发布最少量的实际代码,而是发布我遵循的教程的链接,因为我会发布大量文件。对于那些忍受我的人,你不知道我有多感激。

我目前正在用 C++ 开发一个用于图形渲染的跨平台引擎,这与其说是必需品,不如说是一个有趣的项目。我的主要开发平台是我的 Macbook Pro,所以我决定要实现的引擎的第一部分是 Mac 端口。因为我希望应用程序表现得像本机应用程序,所以我决定使用 Cocoa 作为前端。

我按照本教程进行操作,它与随附的演示以及lazyfoo 网站上的第一个教程配合得很好。一年多前我已经完成了教程,但我想检查并确保我知道如何实施我之前学到的东西。

直到我进入第二个教程时,我才遇到问题。所以编辑 tut01_renderer 类,到目前为止我已经添加了一个变量,lazyfoo 在他的教程中使用的整数 gColorMode 变量,用于在他的渲染方法中进行比较。我试图在标头、tut01renderer init 方法或两者中将 gColorMode 初始化为 0(青色)。最后,在 tut01renderer 渲染方法中,我放了一条 if/else 语句:

    if(gColorMode == 0)
    {

    //Solid Cyan
        glBegin( GL_QUADS );
        glColor3f( 0.f, 1.f, 1.f );
        glVertex2f( -0.5f, -0.5f );
        glVertex2f(  0.5f, -0.5f );
        glVertex2f(  0.5f,  0.5f );
        glVertex2f( -0.5f,  0.5f );
        glEnd();
    }
    else
    {
        //RYGB Mix
        glBegin( GL_QUADS );
        glColor3f( 1.f, 0.f, 0.f ); glVertex2f( -0.5f, -0.5f );
        glColor3f( 1.f, 1.f, 0.f ); glVertex2f(  0.5f, -0.5f );
        glColor3f( 0.f, 1.f, 0.f ); glVertex2f(  0.5f,  0.5f );
        glColor3f( 0.f, 0.f, 1.f ); glVertex2f( -0.5f,  0.5f );
        glEnd();
    }

这在我运行时带来了 3 个场景,无论我如何初始化 gColorMode,这 3 个中的每一个都会发生。

1) 它崩溃到 malloc 错误、编辑已释放的对象或程序集中的错误访问错误。2) 显示应有的青色方块 3) 显示多方块!

我什至将 gColorMode 设为常量,但有时仍会显示多方格或崩溃!

所以我的问题是我是否做错了什么或闻所未闻。我可以在渲染方法中使用 if/else 语句吗?最初的骨架代码演示使用变量,而不是 if/else 语句?Objective C++ 有什么东西让我想做的事情变得不可能吗?或者是别的什么?

(最后,如果有人知道足够好的教程,我很乐意用纯 C 和目标 C 重新实现。显然我的引擎是用 C++ 编写的,但总体而言使用这种方法可能更容易。)

4

1 回答 1

0

在调用 OpenGL 函数时,您可以使用任何您想要的控制结构(if/else、for 循环等),只要您不弄乱顺序即可。例如对于每个glBegin()必须有一个对应的glEnd(),并且glVertex必须在glBegin和之间调用glEnd。您发布的代码看起来不错。假设您的代码中有错误,它必须在其他地方。

我将设置gColorMode为 0 并设置一个断点,您可以在其中绘制多色四边形。找出它为什么要走这条路。gColorMode您还可以设置一个数据断点,该断点在更改时触发。如果这没有告诉您任何信息,请使用调试器单步执行您的代码,并找出导致此“错误访问错误”的函数调用。

如果不能查看更多代码,我不知道还能告诉你什么。

于 2013-06-29T09:25:55.390 回答