2013-10-06 3 views
0

Я новичок в перенасыщении, и я не могу решить эту проблему. Я рисую точки по щелчку мыши, но всегда видна только последняя точка. Как я могу сделать старшие точки не исчезающими, и на каждом клике просто добавьте еще одно к ним? (не сохраняя все точки как переменные или что-то, просто заставьте их не исчезать из окна при рисовании нового) Большое вам спасибо.перенасыщение - добавление точек к окну

#include <iostream> 
#include <math.h> 
#include "gl/glut.h" 
#include <windows.h> 

using namespace std; 

typedef struct { 
    float x; 
    float y; 
} Point; 

typedef struct { 
    int r; 
    int g; 
    int b; 
} Color; 

Point novy; 
Color nova; 

void Display(void){ 

    glClear(GL_COLOR_BUFFER_BIT); 
    glPointSize(8); 

    glBegin(GL_POINTS); 
    glColor3f(nova.r,nova.g,nova.b); 
    glVertex2f(novy.x,novy.y); 
    glEnd(); 

    glFlush(); 
} 


void onMouse(int button, int state, int x, int y){ 

    if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){ 
     novy.x = x/(double) 300 * (1 - (-1)) + (-1); 
     novy.y = (1 - y/(double) 300) * (1 - (-1)) + (-1); 
     glutPostRedisplay(); 
    } 
} 

int main(void){ 

    cout << "suradnice \n"; 
    cin >> novy.x; 
    cin >> novy.y; 

    cout << "rgb farba \n"; 
    cin >> nova.r; 
    cin >> nova.g; 
    cin >> nova.b; 

    glutCreateWindow("This is the window title"); 
    glutDisplayFunc(Display); 
    glutMouseFunc(onMouse); 
    glutMainLoop(); 
    return 0; 
} 

ответ

0

В opengl функция отображения обрабатывается снова и снова. В вашем коде в основной функции вы штрафной определить такую ​​функцию, что:

glutIdleFunc(display); 

Так что ваш код ввести функцию отображения при нажатии кнопки мыши. И, конечно, ваша функция отображения принимает координаты вашей мыши и рисует эту точку. (Не записывайте эту строку в свой код, это просто пример того, как работает opengl)

Функция отображения рисует каждый кадр снова и снова независимо. чтобы запомнить его предыдущие рисунки. Если вы хотите, чтобы ваши другие координаты точки находились на экране, вы должны сохранить свои предыдущие координаты кликов в массиве и нарисовать их в своей функции отображения.

+0

Так что в opengl нельзя сохранить предыдущее состояние окна, а затем просто добавить в него новый элемент? – user2851650

+0

Вы можете найти ** glFrameBuffers **, чтобы сделать это, но это немного сложно, так как вы сказали, что новичок в opengl. –

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