Registriert: Sa Dez 14, 2002 14:00 Beiträge: 14 Wohnort: Saarland
ich möchte gerne mehrer Rechteck Instanzen zur Laufzeit erzeugen, die übereinander angeordnet werden, dass heißt ich habe einen button und per click soll ein neues Rechteck entstehen. klicke ich nochmal drauf soll ein weiteres entstehen, dass über dem ersten liegt.
Wie kann ich solch verschiedene instanzen erzeugen? ich habs bisher nur geschafft ein rechteck zu erzeugen und dass wird per click einfach nur nach oben verschoben.
MfG
Jack Falworth
_________________ Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Was hällst du davon, das Ganze mit ner for-Schleife zumachen. Jedes mal wenn du auf den Knopf drückst, erhöhst du den Wert, bis zu dem die Schleife geht. Die Position der Rechtecke kannst du mit dem Wert der for-Schleife berechnen.
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3827 Wohnort: Tespe (nahe Hamburg)
Also das "darüber" zeichnen, könnt man mit deaktivieren des Tiefenbuffers sehr simple erreichen:
Code:
glDisable(GL_DEPTH_TEST);
Beim rest verstehe ich das eigentliche problem nicht. Die Daten könnte man in einem Array speichern, dass zeichnen z.B. mit einer Funktion, die dann nur noch die Parameter erwartet.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Sa Dez 14, 2002 14:00 Beiträge: 14 Wohnort: Saarland
hmm ich muss es etwas anders ausdrücken.
Nehmen wir an ich habe eine Zeichenfläche auf der ich Rechtecke zeichnen möchte.
Bei jedem click auf einen Button entsteht an einer zufällig bestimmten Stelle auf der Zeichenfläche ein neues Rechteck. Das neue Rechteck soll man aber unabhängig von den (schon vorhandenen) Rechtecken drehen, scalieren etc. können.
Mein Problem ist nicht das Speichern der Punktkoordinaten sondern wie bekomme ich es hin zur Laufzeit neue Rechtecke zu erstellen.
Ich schaffe im Moment nur ein Rechteck zu zeichnen und wenn ich auf den Button clicke, wird kein weiteres Rechteck gezeichnet, sondern dass das schon da ist lediglich an eine andere Stelle gesetzt.
MfG
Jack Falworth
_________________ Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3827 Wohnort: Tespe (nahe Hamburg)
Ja und wo ist das Problem dabei ne Array zu verwenden?
Code:
TYPE TTMyQuad = RECORD
ecke : ARRAY[0..2] OF SINGLE;
tu : ARRAY[0..1] OF SINGLE;
end;
var mrect : ARRAY[0..100] OF TMyQuad;
rects:INTEGER;
Nun erhöhst Du beim klick auf dem Button einfach nur rects und schreibst an der neuen Stelle im Array zufällig irgendwelche Daten. Beim rendern gehst Du dann durch eine FOR-Schleife bis zur rects und renderst das Objekt mit den Daten. Dann ist es auch nicht mehr schwer einzelne Objekt rotieren zu lassen. Du könntest z.B. auch nun in der Struktur noch zusätzliche Informationen speichern, wie z.b. die Winkel um die es gedreht wurde.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Sa Dez 14, 2002 14:00 Beiträge: 14 Wohnort: Saarland
Das war nicht das Problem, trotzdem danke.
Ich glaub mein Problem war, dass ich in meiner Rechteck Zeichen Procedure die Anweisung glclear stehen hatte. Das hat mir immer alle Rechtecke bis auf das aktuelle gelöscht. Deshalb hab ich immer nur eins gesehen .
Jetzt hab ich glclear in die FormPaint Procedure geschrieben und es funktioniert.
MfG
Jack Falworth
_________________ Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?
glclear (gl_color_buffer_Bit or gl_depth_buffer_bit);
for i:= 0 to counter do
Draw_Rechteck(glrechteck);
end;
So ich hab mir jetzt einen code zusammengebastelt. Wenn ich den Timer einschalte, bewegen sich die Rechteck in die positive x-Achse.
Jetzt meine Frage:
Ich habe pfd_doublebuffer aktiv aber nur das erste Rechteck flackert nicht beim verschieben. Alle anderen Rechtecke flackern. Wie kommt das?
MfG
Jack Falworth
_________________ Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Was mir direkt aufgefallen ist : Du wechselst nach jedem gezeichneten Rechteck die Puffer mittels SwapBuffers() und nutzt auch glFlush() nach jedem Rechteck.Daher könnte das Flackern kommen.
Das ist nicht nötig.Die Puffer müssen erst getauscht werden, wenn deine Szene komplett gezeichnet wurde, und glFlush() wird im Normalfall gar nicht benötigt (was glFlush() macht, steht ja im RedBook).
Registriert: Sa Dez 14, 2002 14:00 Beiträge: 14 Wohnort: Saarland
ok das dürfte jetzt behoben sein. doch es ist ein neuer Fehler entstanden:
Wenn ich das programme ausführe kommt kein fehler, aber wenn ich das prog dann beende und wieder starte kommt ein delphi und kernel fehler.
ich weiß nicht, muss ich vielleicht irgendeinen speicher wieder freigeben oder so was ähnliches? hier ist mal der quellcode (so kurz wie möglich):
Code:
procedure InitGL (handle: hdc);
var pfd: TPixelformatdescriptor; pf: integer;
begin
fillchar (pfd, sizeof(pfd), 0);
pfd.nSize:= sizeof(pfd);
pfd.nVersion:= 1;
pfd.dwFlags:= pfd_draw_to_window or pfd_support_opengl or pfd_doublebuffer;
Mitglieder in diesem Forum: 0 Mitglieder und 38 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.