目标C++OpenGL实现

Objective C++ OpenGL implementation

本文关键字:实现 C++OpenGL 目标      更新时间:2023-10-16

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

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

我遵循了本教程,它与随附的演示以及lazyfo网站上的第一个教程配合得很好。我在一年多前就做过教程,但我想检查一下,确保我知道如何实现我之前学到的东西。

直到我上了第二个教程,我才遇到问题。因此,在编辑tut01_render类时,我已经添加了一个变量,即lazyfo在教程中使用的整数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语句?ObjectiveC++是否有什么让我无法完成的事情?还是别的什么?

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

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

我会将gColorMode设置为0,并在绘制多色四边形时设置一个断点。找出它为什么走这条路。您还可以设置一个数据断点,该断点在gColorMode更改时触发。如果这并不能告诉你什么,那就用调试器遍历你的代码,找出是哪个函数调用导致了这个"错误访问错误"。

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