ich habe ein Problem mit gluUnProject. Ich habe mir schon zig Themen dazu durchgelesen, aber nichts Vergleichbares gefunden.
Also:
Ich möchte eine Art Worldeditor basteln. Dazu hab ich ein einfaches Grid. Die einzelnen Vertices werden jetzt in der Höhe verschoben, so dass ein Terrain entsteht. Wenn ich jetzt gluUnProject mit den Werten aus dem Wiki übernähme, könnte ich die SICHTBARE Position der angeklickten Stelle herausfinden. Ich möchte jedoch die "tatsächliche" Position, d.h. nur die Position im Grid ohne berücksichtigung der Höhe - so als würde ich ein imaginäres Quad über das Terrain legen. Wenn ich das allerdings tue, sehe ich ja die Szene nicht mehr, selbst mit Blend...
Oder anders ausgedrückt: Ich möchte die 3D-Position eines Klicks auf einer bestimmten Höhe (y-Wert), ohne dass Objekte gezeichnet sind.
Falls es schon einen Thread gibt, wo diese Frage gestellt wird, genügt mir auch ein Link. Ich habe bereits das halbe Wiki durchgeackert, aber das ist für Anfänger leider nicht einfach zu verstehen... muss ich irgendetwas am Modelmatrix - Parameter verändern?
Als Anhang ein kleines Modell, in Blender gebastelt, vllt hilft es zum Verständnis...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ich glaube so einfach, wie du dir das erhoffst, wird das nix.
Ich wuerde vorschlagen: Bau Selection ein, damit du die Knotenpunkte anfassen kannst. Dann errechne dir anhand der Bewegung der Maus die Höhenverschiebung des Punktes und es sollte funktionieren
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Andere Idee für Selektion:
Zeichne bei einem Klick deine Szene oder die entsprechenden "drüberliegenden" Quads einmal, aber ohne Tex. etc. und gib jeder Gridposition eine leicht andere Farbe, zB. für eine Variable i per
Wenn du einen 32 bit FrameBuffer verwendest, kannst du so schnell bis zu 16.7 Mio Werte (24 bit) zuweisen. Dann kannst du beim Klick per glReadPixels die Farbe an der angeklickten Stelle erfahren und dementsprechend zurückrechnen. Wenn du auch den Alphakanal bzw. glColor4b nutzen kannst (habs noch nicht ausprobiert), dann wären sogar 4.3 Mrd Möglichkeiten (alle 32 bit) bzw. 1 Integer oder Single oder 2 Words drin.
Ich hab das mal mit einem Quad probiert, dass ich vor dem UnProject zeichne und danach wieder lösche, das klappt ganz gut soweit. Das Problem wäre also gelöst. Ich habe allerdings schon ein nächstes...
Nämlich das Timebased Movement klappt bei mir dummerweise net so ganz. Hab das alles so gemacht wie im Wiki beschrieben, und EIGENTLICH funktioniert es auch - bei 50 FPS bin ich nicht viel schneller als bei 30 FPS. Nicht viel. Aber doch ein bisschen. Und wenn ich dann gar nichts zeichne und so 700-900 FPS hab, komm ich so gut wie gar nicht mehr von der Stelle. Ist mein OnIdle-Code falsch? Oder ist das normal?
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Hi,
hast du schon mal versucht Ceil in Zeile 6 wegzulassen?
Du willst doch für DrawTime genau einen Float-Wert haben... Dann musst du Zeile 7 auch noch ändern:
Hm, sagt mir jetzt noch nicht so viel... Aber schon einmal vielen Dank im Voraus. Kann es nicht vielleicht sein, dass der OnIdle-Durchlauf schon so lange dauert, dass Drawtime gar nicht mehr die eigentliche Zeit pro durchlauf ist, sondern eben nur der Prozedur Render und diese beim Zeichnen keiner Objekte zu schnell läuft?
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
und DICH hab ich vergessen. Sry. Hole ich heute nach
dann nimm doch den ganzen Durchlauf als DrawTime. Obwohl die Variable auch eher FrameTime heissen sollte. Du musst ja schliesslich die gesamte Zeit berücksichtigen, die ein Durchlauf benötigt. Also auch sämtliche andere Berechnungen.
Jetzt wird die Zeit des gesamten Vorgangs gemessen. Anzeige: DrawTime=17ms, FPS=60. Obwohl ich bis auf drei Achsen nichts zeichne. Hat das jetzt was mit VSync zu tun? Und wenn ja, wie krieg ich das abgestellt? Im Hintergrund besitzt die Applikation übrigens noch ein Fenster mit Delphi-Komponenten..
Also ich meine, ich weiß wie man VSync im Treiber abstellt, aber der nVidia-Treiber gibt an "Force Off", "Force On" oder "Application Controlled" (oder so).
Ich würde sogar nur ein QueryPerformanceCounter pro frame machen. Also immer einfach die differenz zum letzen frame nehmen. Dabei solltest du dann aber auch noch darauf achten die für DeltaTime verwendete Differenz auf 0 bis 100ms einzuschränken.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.