网站上的第一个问题,所以如果我做了任何非常规的事情,我很抱歉。我决定发布最少量的实际代码,而是发布我遵循的教程的链接,因为我会发布大量文件。对于那些忍受我的人,你不知道我有多感激。
我目前正在用 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++ 编写的,但总体而言使用这种方法可能更容易。)