在Open GL中将图像设置为背景

时间:2013-05-13 17:03:54

标签: c++ visual-c++ opengl

我想在OpenGL(和C ++)中实现以下结果:我有一个我想用作动画背景的情节,我想要在某些点在其表面上移动时进行修复。 例如(见图):我想计算3个变量函数的水平图(照片中的黑色和白色),我想将其设置为背景并显示在表面上移动的点的动画(红色点在照片)。 实现它并获得良好表现的最佳方法是什么?

enter image description here

2 个答案:

答案 0 :(得分:0)

一种可能性是将背景图像绘制为其他点后面的四边形上的纹理(例如,Z = 0.1处的点,Z = 0.2处的四边形)。由于你(大概)不希望四边形比例与点相比,你可能想要使用正交投影,而不是透视。

答案 1 :(得分:0)

这实际上取决于您使用的OpenGL版本。

如果您使用的是SDL和OpenGL 2.x,这很容易,但如果您使用的是GLFW和OpenGL 3.x,那将非常困难。

但是你可以用SDL和OpenGL 2.1来实现它(不是所有代码都包含在内,你必须自己编写一些代码):

void plot(SDL_Surface *surf, int x, int y, int r, int g, int b)
{
    int color = SDL_MapRGB(surf->format, r, g, b);
    Uint32 *framebuffer = (Uint32*) surf->pixels;
    framebuffer[y * surf->w + x] = color;
}

int main()
{
    /* set up SDL and OpenGL */
    SDL_Surface *img = SDL_LoadBMP("base_background.bmp");

    /* plot functions like this: */
    plot(img, x, f(x), 255, 0, 0); // example colours

    /* create an OpenGL surface(code can be found on google easily) */ 
    GLuint tex = create_GL_texture(img);

    /* draw it like you would normally */
    glBindTexture(GL_TEXTURE_2D, tex);
    glBegin(GL_QUADS);
        ...
    glEnd(); 

    return 0;
}

对于OpenGL 3.x,它有点难度。您可以找到教程here