在地形OPENGL的图画纹理

时间:2012-04-26 04:07:16

标签: opengl textures

我从一本书中得到了这个代码。它会生成一个地形。我如何在地形上绘制纹理?像3D鼠标光标或地毯一样,它会与地形重叠。我的目标是在地球上制造碎片,但我无法使其达到地面的高度和形状。

glBindTexture(GL_TEXTURE_2D, m_grassTexture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
for (int z = 0; z < TERRAIN_SIZE - 1; ++z)
{
    glBegin(GL_TRIANGLE_STRIP);
    for (int x = 0; x < TERRAIN_SIZE; ++x)
    {
        // render two vertices of the strip at once
        float scaledHeight = heightmap[z * TERRAIN_SIZE + x] / SCALE_FACTOR * ze;
        float nextScaledHeight = heightmap[(z + 1)* TERRAIN_SIZE + x] / SCALE_FACTOR * ze;
        float color = 0.5f + 0.5f * scaledHeight / MAX_HEIGHT;
        float nextColor = 0.5f + 0.5f * nextScaledHeight / MAX_HEIGHT;

        glColor3f(color, color, color);
        glTexCoord2f((GLfloat)x/TERRAIN_SIZE*8, (GLfloat)z/TERRAIN_SIZE*8);
        glVertex3f(static_cast<GLfloat>(x - TERRAIN_SIZE/2), scaledHeight, static_cast<GLfloat>(z - TERRAIN_SIZE/2));

        glColor3f(nextColor, nextColor, nextColor);
        glTexCoord2f((GLfloat)x/TERRAIN_SIZE*8, (GLfloat)(z+1)/TERRAIN_SIZE*8);
        glVertex3f(static_cast<GLfloat>(x - TERRAIN_SIZE/2), nextScaledHeight, static_cast<GLfloat>(z + 1 - TERRAIN_SIZE/2));
    }
    glEnd();
}

//draw the water
glBindTexture(GL_TEXTURE_2D, m_waterTexture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0);
    glVertex3f(-TERRAIN_SIZE/2.1f, WATER_HEIGHT, TERRAIN_SIZE/2.1f);

    glTexCoord2f(TERRAIN_SIZE/4.0f, 0.0);
    glVertex3f(TERRAIN_SIZE/2.1f, WATER_HEIGHT, TERRAIN_SIZE/2.1f);

    glTexCoord2f(TERRAIN_SIZE/4.0f, TERRAIN_SIZE/4.0f);
    glVertex3f(TERRAIN_SIZE/2.1f, WATER_HEIGHT, -TERRAIN_SIZE/2.1f);

    glTexCoord2f(0.0, TERRAIN_SIZE/4.0f);
    glVertex3f(-TERRAIN_SIZE/2.1f, WATER_HEIGHT, -TERRAIN_SIZE/2.1f);
glEnd();

0 个答案:

没有答案