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