我目前正在桑德兰大学学习游戏机编程模块。 他们在这个模块中教授的是OpenGL和Phyre Engine来开发PS3游戏。
PS3 SDK套件不是免费提供的(这是非常昂贵的)这使得我很难在出现问题时解决。
显然,PS3框架不支持大多数gl函数调用,如glGenList,glBegin,glEnd等。
glBegin(GL_QUADS);
glTexCoord2f(TEXTURE_SIZE, m_fTextureOffset);
glVertex3f(-100, 0, -100);
//some more
glEnd();
在glBegin,glEnd和glTexCoord2f上使用PS3调试模式进行调试时出错。
有没有办法绕过它? 喜欢绘画对象的另一种方式,也许?
答案 0 :(得分:4)
为PS3开发的大多数游戏根本不使用OpenGL,而是“在金属上”进行编程,即直接使用GPU而不使用中间的abstrace API。是的,PS3有一个OpenGL-esque API,但这实际上是基于OpenGL-ES。
在OpenGL-ES中没有立即模式。 Immediatate Mode是一种将几何体传递给OpenGL的繁琐方法,它通过启动带有glBegin
的图元然后链接顶点属性状态设置的调用,通过提交顶点的位置glVertex
并以{{结尾}来结束1}}。 没有人想要使用它!特别是在资源有限的系统上。
无论如何,您都可以在内存中使用几何数据。那么为什么不简单地指出OpenGL使用已经存在的东西呢?嗯,这正是要做的事情:顶点阵列。您将OpenGL指针指向查找数据的位置(现代OpenGL中的通用glEnd
,或旧固定函数中的预定义固定属性glVertexAttribPointer
,glVertexPointer
,glTexCoordPointer
,{{1然后让它使用glNormalPointer
或glColorPointer
绘制一大堆。
在现代OpenGL中,绘图过程由用户可编程着色器控制。在固定功能 OpenGL中,您所能做的就是通过通胀数量的状态变量进行参数化。
答案 1 :(得分:2)
PlayStation 3使用的OpenGL是OpenGL ES 1.0的变体(根据维基百科的 ES 2.0的某些功能)。
http://www.khronos.org/opengles/1_X
有规格吗?那里似乎没有glBegin / glEnd函数。那些(如在固定管道函数中)已被弃用(并且已经删除了OpenGL 4.0和OpenGL ES 2.0),但仍然支持像VBO这样的东西,所以学习如何使用它们可能没什么意义。
答案 2 :(得分:0)
如果您使用PhyreEngine,通常应避免直接调用图形API,因为PhyreEngine位于不同平台上的不同API之上。
在PC上它使用GL(或D3D),但在PS3上它使用较低级别的API。因此,即使您使用了GL-ES功能,即使它已编译,它也可能无法正常运行。因此,在为PS3构建时看到错误并不奇怪。
理想情况下,您应该使用PhyreEngine的绘图管道,这是与平台无关的。如果您坚持使用该API,原则上您可以为任何支持的平台编译代码。
我可以公开评论PhyreEngine(对不起)有多少限制,但是如果你在大学课程上,你的大学应该可以访问官方支持论坛,在那里你可以得到更具体的帮助。
如果您真的必须直接定位基础图形API,请注意您可能需要编写/修改每个平台的代码,并且您需要与PhyreEngine可能依赖的任何上下文状态“玩得开心”。