上一小节中,我们已经成功地搭建好了一个“小剧场”,“观众席”已经设置好了,但是“演员”还没有到位。所以这一小节,我们就来请一些“演员”,让他们做一些“动作”。
还记得读取纹理那章的内容吧~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);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -