19,468
社区成员
发帖
与我相关
我的任务
分享
Texture::Texture(char* filename){
this->m_image = new BMPImage(filename);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, this->m_txtname);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, this->m_image->getImageWidth(), this->m_image->getImageHeight(),
0, GL_RGB, GL_UNSIGNED_BYTE, this->m_image->getPixelData());
}
Texture::~Texture(){
delete this->m_image;
}
void Texture::appTexture(){
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glBindTexture(GL_TEXTURE_2D, this->m_txtname);
}
这个是我封装的Texture类
void GameView::display(){
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(10 * cos(this->m_angle), this->m_horizon, 10.0 * sin(this->m_angle), 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glScalef(this->m_zoom, this->m_zoom, this->m_zoom);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluPerspective(90.0, (GLfloat)WINDOW_HEIGHT / (GLfloat)WINDOW_WIDTH, 0.0, 1000.0);
for(GLint i = 0;i < this->m_temple->getWidth();++i){
for(GLint j = 0;j < this->m_temple->getLength();++j){
switch(this->m_temple->getLandState(j, i)){
case LAND_COVERED:
this->drawCover(j, i);
break;
case LAND_UNCOVERED:
this->drawUncover(j, i);
break;
case LAND_ROAD:
this->drawRoad(j, i);
break;
case LAND_STONE:
this->drawStone(j, i);
break;
}
}
}
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
void GameView::drawRoad(GLint x, GLint y){
glEnable(GL_TEXTURE_2D);
this->m_landUncover->appTexture();
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0);
glTexCoord2f(0.0, 0.0);glVertex3f((x - (GLfloat)this->m_temple->getLength() / 2) * LENGTH_PER_SQUARE, 0, (y - (GLfloat)this->m_temple->getWidth() / 2) * LENGTH_PER_SQUARE);
glTexCoord2f(1.0, 0.0);glVertex3f((x + 1 - (GLfloat)this->m_temple->getLength() / 2) * LENGTH_PER_SQUARE, 0, (y - (GLfloat)this->m_temple->getWidth() / 2) * LENGTH_PER_SQUARE);
glTexCoord2f(1.0, 1.0);glVertex3f((x + 1 - (GLfloat)this->m_temple->getLength() / 2) * LENGTH_PER_SQUARE, 0, (y + 1 - (GLfloat)this->m_temple->getWidth() / 2) * LENGTH_PER_SQUARE);
glTexCoord2f(0.0, 1.0);glVertex3f((x - (GLfloat)this->m_temple->getLength() / 2) * LENGTH_PER_SQUARE, 0, (y + 1 - (GLfloat)this->m_temple->getWidth() / 2) * LENGTH_PER_SQUARE);
glEnd();
glDisable(GL_TEXTURE_2D);
}这个是绘制的函数