2010-09-16 50 views
0

如何在opengl中移动2D对象?什么是机制,例如,我们需要控制帧还是什么?如何在OpenGL中做2D动画?

一些代码段欢迎:)

在此先感谢!

+0

取决于你需要什么类型的动画 - 我会考虑将简单的移动对象作为转换矢量,其中每个元素存储相应帧的转换,并且您需要的只是将其乘以适当的ProjectionModelviewMatrix。如果您想要获得比简单移动物体更高的效果,您可以随时更改每帧动画的纹理:您只需处理称为精灵片的事物,而不是每个顶点改变纹理坐标的变换。 – erjot 2010-09-16 09:09:15

回答

0

简而言之,您可以通过修改模型视图矩阵来移动对象。这可以通过几种方式来完成,这取决于您的编码偏好以及您可用的opengl驱动程序版本。

这里的一些部分代码,让你在正确的方向开始:

以下是在OpenGL弃用3.0+(但即便如此,它仍然是通过相容性分布可用)。

// you'll need a game loop to make some opengl calls each frame 
while(!done) 
{ 
    // clear color buffers, depth buffers, etc 
    initOpenglFrame(); 

    glPushMatrixf(); 
     glTranslatef(obj->getX(), obj->getY(), obj->getZ()); 
     obj->draw(); 
    glPopMatrixf(); 

    // move the object 0.01 units to the left each tick 
    obj->setX(obj->getX() + 0.01); 

    // flush, swap buffers, etc 
    finishOpenglFrame(); 
} 

对于OpenGL 3.0的超越,glPushMatrixf(),glPopMatrixf(),glTranslatef()函数,以及类似的固定管线接口所有弃用。如果你需要使用OpenGL3.0或更高版本,你会想要做同样类型的解决方案,但是你需要自己实现矩阵和矩阵堆栈。我认为这个讨论超出了你的问题的范围。

为了进一步阅读,并开始使用OpenGL,我建议你看看nehe.gamedev.net。如果您想开始使用OpenGL 3.X,那么我建议您购买Opengl Superbible 5th Edition。好书!

0

OpenGL只是通过顶点数据通过一些变换矩阵和栅格化结果。比你必须提供的更高的水平。