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