-1

我正在学习如何在 OpenGL 中应用纹理。我有一个相当简单的立方体,我试图在其上应用纹理以使其看起来像木板。当我应用我的纹理时,它显示为绿色。我可以应用一些看起来不错的其他纹理,所以我无法弄清楚这个有什么问题。我从下载的 jpg 创建了纹理。当我在预览中查看时,bmp 文件看起来很好(我在 Mac 上)。我将附上原始位图的屏幕截图以及它在 OpenGL 渲染时的外观。

在此处输入图像描述 在此处输入图像描述

我正在使用的纹理加载代码可以在这里找到:

unsigned int texture[2];  //  Texture names

// define the board
float square_edge       =    1;
float border            =  0.5;
float board_thickness   = 0.25;
float board_corner      = 4 * square_edge + border;
float board_width       = 2 * board_corner;

GLfloat board_vertices[8][3] = {
    {-board_corner,  board_corner, 0.0},
    {-board_corner, -board_corner, 0.0},
    { board_corner, -board_corner, 0.0},
    { board_corner,  board_corner, 0.0},
    {-board_corner,  board_corner, -board_thickness},
    {-board_corner, -board_corner, -board_thickness},
    { board_corner, -board_corner, -board_thickness},
    { board_corner,  board_corner, -board_thickness}
};

void polygon(int a, int b, int c, int d) {
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0);  glVertex3fv(board_vertices[a]);
    glTexCoord2f(1.0, 0.0);  glVertex3fv(board_vertices[b]);
    glTexCoord2f(1.0, 1.0);  glVertex3fv(board_vertices[c]);
    glTexCoord2f(0.0, 1.0);  glVertex3fv(board_vertices[d]);
    glEnd();
}

void draw_board() {

    glPushMatrix();

    glRotatef(rotx, 1.0, 0.0, 0.0);
    glScalef(1/board_corner, 1/board_corner, 1/board_corner);

    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, board_vertices);

    glBindTexture(GL_TEXTURE_2D, texture[1]);

    glColor3f(1.0, 1.0, 1.0); //color of the border, sides, bottom of board

    // draw the board
    polygon(0,3,2,1);
    polygon(2,3,7,6);
    polygon(0,4,7,3);
    polygon(1,2,6,5);
    polygon(4,5,6,7);
    polygon(0,1,5,4);

    glPopMatrix();
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    glLoadIdentity();

    double Ex = -2*dim*Sin(th)*Cos(ph);
    double Ey = +2*dim        *Sin(ph);
    double Ez = +2*dim*Cos(th)*Cos(ph);
    gluLookAt(Ex,Ey,Ez , 0,0,0 , 0,Cos(ph),0);

    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

    draw_board();

    glFlush();
    glutSwapBuffers();    
}
4

2 回答 2

0

问题出在 bmp 图像本身。正如我所提到的,我通过 Gimp 将其转换为 jpg 文件。不知何故,这种转换出了差错。当我从命令行运行“file wood.bmp”时,我的响应是“wood.bmp: data”。它应该显示“wood.bmp:PC 位图,Windows 3.x 格式,128 x 128 x 24”或类似的东西。我使用好的 ol'MS Paint 进行了转换,问题就消失了。

我试图找出如何在 Gimp 中做到这一点,但现在这一切都有效。感谢所有的建议!

于 2013-10-24T14:04:46.337 回答
0

使用 gimp 导出 .bmp 图像时,请确保在“兼容性选项”下拉列表下方选择“不写入色彩空间信息”选项。以这种方式导出的 .bmp 图像在使用 opengl 渲染时不会显示为绿色。

于 2015-10-15T23:15:36.333 回答