贴图

作者: zz张哲 | 来源:发表于2016-06-17 16:59 被阅读0次

导入bmp贴图:

unsigned char* LoadBMP(const char*path, int &width, int &height) {
    unsigned char* imageDate = NULL;
    FILE*pFile = fopen(path, "rb");
    if (pFile) {
        BITMAPFILEHEADER bfh;
        fread(&bfh, sizeof(BITMAPFILEHEADER), 1, pFile);
        if (bfh.bfType == 0x4D42) {
            BITMAPINFOHEADER bih;
            fread(&bih, sizeof(BITMAPINFOHEADER), 1, pFile);
            width = bih.biWidth;
            height = bih.biHeight;
            imageDate = new unsigned char[width*height * 3];
            fseek(pFile, bfh.bfOffBits, SEEK_SET);
            fread(imageDate, 1, width*height * 3, pFile);
            fclose(pFile);
        }
    }
    return imageDate;
}

创建纹理:

int imageWidth, imageHeight;
unsigned char* imageDate = LoadBMP("stone.bmp",imageWidth,imageHeight);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, imageDate);

几何绘制:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除背景颜色
glEnable(GL_TEXTURE_2D); //启动纹理
//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //线框显示
glEnable(GL_DEPTH_TEST);
glPushMatrix();
glTranslatef(-4.0f, 3.0f, -10.0f);

//绘制立方体
glBegin(GL_QUADS);

//x
//glColor4ub(200, 0, 0, 255);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.5f, 0.5f, -0.5f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0.5f, 0.5f, 0.5f);

//-x
glVertex3f(-0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, -0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);

//y
glVertex3f(-0.5f, 0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, 0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);

//-y
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, -0.5f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.5f, -0.5f, -0.5f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-0.5f, -0.5f, 0.5f);

//z
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, 0.5f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.5f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.5f, 0.5f, 0.5f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-0.5f, 0.5f, 0.5f);

//-z
glVertex3f(0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, -0.5f, -0.5f);
glVertex3f(-0.5f, 0.5f, -0.5f);
glVertex3f(0.5f, 0.5f, -0.5f);

glEnd();
glPopMatrix();

相关文章

网友评论

      本文标题:贴图

      本文链接:https://www.haomeiwen.com/subject/spevdttx.html