目标C++OpenGL实现
Objective C++ OpenGL implementation
网站上的第一个问题,所以如果我做了任何非常规的事情,我很抱歉。我决定发布少量的实际代码,并链接到我遵循的教程,因为我会发布大量的文件。对于那些忍受我的人,你不知道我有多感激。
我目前正在用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()
,并且必须在glBegin
和glEnd
之间调用glVertex
。你发布的代码看起来不错。假设您的代码中有错误,那么它一定在其他地方。
我会将gColorMode
设置为0,并在绘制多色四边形时设置一个断点。找出它为什么走这条路。您还可以设置一个数据断点,该断点在gColorMode
更改时触发。如果这并不能告诉你什么,那就用调试器遍历你的代码,找出是哪个函数调用导致了这个"错误访问错误"。
如果不能查看更多的代码,我不知道还能告诉你什么。
- 如何在OpenGL菜单系统中实现文本的智能渲染
- 创建Mesh类并实现不会生成模型OpenGL
- 当我在网格/面中实现索引时,为什么它会返回OpenGl错误
- 如何在使用 SDL 编写的游戏中仅实现一部分 OpenGL 代码?
- opengl32.lib如何在Windows(仅1.1版本)上工作?它是否真正实现了OpenGL函数
- OpenGL:布雷森汉姆的线条绘制算法实现
- OpenGL中的基本重力实现
- 如何在OpenGL ES 1.X中实现Glpushattrib(GL_Current_bit)
- 什么是操作系统上的openGL ES实现
- 我的矩阵堆栈实现(OpenGL ES 2.0)有什么问题
- OpenGL库的实现
- 通过使用alpha混合opengl实现具有透明背景的纹理
- 如何在OpenGL中以正确的方式实现
- 有关如何在OpenGL中正确旋转/翻译对象的任何建议,以实现以下效果
- 在OpenGL中实现自己的旋转功能
- 利用OpenGL、c++实现了绕线数算法计算内外部区域
- GLEW只是一个扩展库,或者它也包含OpenGL ES 2.0实现
- OpenGL中的纹理飞溅是如何实现的
- 如何在OpenGL 3.3中实现三维纹理
- Android:调用未实现的OpenGL ES API在glMapBufferOES为OGL ES.1.1