2013-05-13 3 views
0

Я хочу получить следующий результат в OpenGL (и C++): у меня есть сюжет, который я хочу использовать в качестве фона анимации, и я хочу, чтобы это было исправлено, когда некоторые точки перемещаются его поверхности. Например (см. Изображение): Я хочу рассчитать график уровня 3 функции переменных (черно-белый на фотографии), я хочу установить его как фон и показать анимацию точек, перемещающихся по поверхности (красные точки в фотография). Каков наилучший способ достичь этого и иметь хорошие результаты?Установить изображение в качестве фона в Open GL

enter image description here

+0

У вас есть фоновое изображение в виде файла? –

+0

Я вижу десять кругов, десять дисков и пять точек на этом изображении. Сегодняшнее графическое оборудование легко управляет миллионами полигонов. Есть ли вообще какая-то причина в производительности? –

ответ

0

Одним из возможных вариантов было бы сделать фоновое изображение в качестве текстуры на четверного позади других точек (например, указывает на Z = 0,1, четырехугольника при Z = 0,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, то немного сложнее. Вы можете найти учебники here.

Смежные вопросы