上一小节中,我们已经成功地搭建好了一个“小剧场”,“观众席”已经设置好了,但是“演员”还没有到位。所以这一小节,我们就来请一些“演员”,让他们做一些“动作”。
还记得读取纹理那章的内容吧~2D纹理在这里同样是可以使用的。为了方便,我把LoadBitmap函数放到了"bmpLoader.h"中,这样方便调用。
在bmpLoader.h中:
#include <windows.h>
#define BITMAP_ID 0x4D42
int LoadBitmap(const char *file)
{
/*。。。*/
}
具体的函数内容就不写出来了。
在init()函数中,调用boxTexture=LoadBitmap("Box.bmp");把纹理保存到boxTexture中。再重写一下DrawBox函数,给他加上3个参数,让他可以在指定位置画箱子,添上纹理
void DrawBox(float bx,float by,float bz)
{
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix();
glTranslatef(bx,by,bz); //在指定位置画箱子
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, boxTexture); //指定纹理
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f

本文介绍了如何在OpenGL环境中创建3D动画。首先回顾了前文建立的基础框架,然后通过添加2D纹理功能,实现了在指定位置绘制带有纹理的3D箱体。通过定义结构体管理3D坐标,并在`Update()`函数中改变箱体位置,从而实现简单的3D动画效果。读者可以通过按a和d键调整视角,体验3D动画的变化。
最低0.47元/天 解锁文章
2421

被折叠的 条评论
为什么被折叠?



