0

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

在此处输入图像描述

4

2 回答 2

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,这有点困难。你可以在这里找到教程。

于 2013-05-13T17:36:06.323 回答
0

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

于 2013-05-13T17:32:32.383 回答