und zwar habe ich eine Frage zum Thema glutPostRedsiplay.
Es handelt sich um folgendes Codesnippet. Ich zeichne interaktiv mit Hilfe von der Maus gesetzten Kontrollpunkte einen Bspline. Die Kontrollpunkte in der Liste p_List, bestimmen den ungefähren Verlauf der Kurve. Die Funktion bspline() zeichnet die Kurve. Läuft soweit alles super. Habe nur dieses eine Problem. Und zwar besteht das Problem darin, dass wenn ich glutPostRedisplay() aufrufe meine Splinekurve zwar verändert/ erneuert wird (Man sieht die alte kürzere Kurve nicht mehr), jedoch sieht man meine Punkte dann auch nicht mehr aus p_list. Diese verschwinden und man sieht immer nur den letzten Punkt, was ja auch logisch ist. Wenn ich glutPostRedisplay() weglasse sieht man zwar die Kontrollpunkte aus p_list, jedoch sieht man auch alle alten Kurven. Es werden die alten Kurven mit der neuen Kurve übermalt. Man sieht also mehrere Kurven. Ich möchte aber nur dass die aktuelle Kurve alle Kontrollpunkte zu sehen sind.
Wie könnte ich es schaffen, dass glutPostRedisplay() nur für die Funktion bspline() gilt und alles andere unverändert lässt. Geht das?
Ich steh da irgendwie aufm Schlauch.
Ich danke euch...
Code: Alles auswählen
void mouse (int button, int state, int mx, int my)
{
#define size 1000
spline_coor list[size];
spline_coor *p_list = 0;
p_list = list;
spline_coor out[resolution];
spline_coor *p_out = 0;
p_out = out;
spline_coor con;
if (button==GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
counter++;
p_list[counter].x = mx-(width/2);
p_list[counter].y = my-(height/2);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POINT_SMOOTH);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
glHint (GL_POINT_SMOOTH_HINT,GL_NICEST);
glPointSize(5);
glBegin(GL_POINTS);
glColor3d(1, 0, 0);
glVertex2i(p_list[counter].x, p_list[counter].y);
glEnd();
bspline(counter, 7, p_list, p_out, resolution);
glutPostRedisplay();
glDisable(GL_LINE_SMOOTH);
glDisable(GL_POINT_SMOOTH);
glDisable(GL_BLEND);
glFlush();
}
}