Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
Damit wird zwar nix selektiert, aber du siehst für ne halbe Sekunde lang den Ausschnitt den du angeklickt hast, und kannst so einfacher feststellen was schief läuft.Ausserdem hab ich die Nearclippingplane auf 1 hochsetzen müssen, da es sonst Probleme gibt.
Das hab ich doch gesagt das sich damit nix mehr selektieren lässt...alllerdings kannst du so sehen, ob deine Klicks auch da landen wo sie hin sollen.So wird die Fehlersuche bei deinem Problem weitaus leichter.
Ich hol meine Mauskoordinaten aus Panel1.MouseMove (mx = x, my =y)
Damit wollte ich Dir zum Ausdruck bringen, dass ich bemerkt habe, dass sich damit nichts selektieren lässt. (Wie geschrieben) wird mit abnehmender z-Achse (also weniger als -1.5) die Selektion in beide Achsenrichtungen verschoben. Der Source ist nach wie vor <a href='http://www.onkeltortysfiles.de/selektion.zip' target='_blank'>hier</a>. Wenn Du mir helfen willst, dann schau ihn Dir doch einfach mal an. Ansonsten werde ich es irgendwann mal rausfinden ... jedenfalls lasse ich die z-Achse jetzt fixiert, da damit eine Selektion zumindest möglich ist ... Sollte mir der letzte Nerv reissen, dann schnapp ich mir wieder mein C++ und wechsle eben wieder zu DirectX, denn da gibts zum Thema Selektion keine Probleme ...
Du solltest bei den gluPerspective Kommandos während der Darstellung und während der Selektion auch tatsächlich den selben Field Of View Parameter verwenden.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Hab mich grade durch den Quellcode gewühlt, und glaube dein Problem gefunden zu haben.Bei mir klappt die Sache mit der Felderauswahl jetzt nämlich unabhängig von der Zoomstufe fast Pixelgenau.Das Problem lag hier : <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre><span class='reserved'>function</span> TForm1.GetSelectionBufferHit : Integer; [...] // Hier übergibst du die CLIENT-Dimensionen (richtig) gluPerspective(<span class='integer'>60.0</span>,Panel1.ClientWidth/panel1.ClientHeight,<span class='integer'>0.1</span>,<span class='integer'>1000</span>); [...] // Hier übergibst du allerdings die Dimensionen des Panels MIT RAND (falsch) SetupViewport(v1DC,RC1,Panel1.Width,Panel1.Height); <span class='reserved'>end</span>;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
So wie du es machst, haben der Viewport zur Selektion, und der den du zur Anzeige nutzt nämlich zwei verschiedene Dimensionen (zwar nur minimal unterschiedlich, aber trotzdem).Daraus entsteht dann anscheinend auch den Problem, denn wenn du die letzte Zeile in deiner Selektionsroutine durch <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>SetupViewport(v1DC,RC1,Panel1.ClientWidth,Panel1.ClientHeight);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3--> ersetzt, dann klappts (zumindest bei mir ) pixelgenau.Natürlich darfst du auch nicht vergessen, wie Mars schon sagt, bei deinen gluViewport-Aufrufen auch immer das selbe FOV anzugeben.
PENG ! Ich habe mich gerade erschossen ... Lieber lieber Son of Satan ... sei doch so lieb und schick mir mal den von Dir modifizierten Source an meine EMail : \[EMAIL=web.master.noba@freenet.de\]web.master.noba@freenet.de\[/EMAIL\] Der Grund hierfür sind folgende Bilder : (geschossen bei z: -2.4)
(geschossen bei z:-3.4)
Sorry, aber auch mit den neuen Modifikationen zerren sich die Achsen in beide Richtungen .... (der rote Kreis markiert die Mausposition beim Klick und der Strich zeigt zum selektierten Feld).
Vielleicht hat ja mein Compiler nen Virus ... oder ich ... oder wir beide
Ich hab mir Dein SelectionTut mal vorgeknöpft und hab mir erlaubt, z mal auf 700 zu stellen (bei allem, was darüber ist, sieht man die Sonne nicht mehr) und siehe da ... man konnte einwandfrei alles selektieren ...
Also wenn Ihr mir jetzt keinen Rat mehr geben könnt, dann schreibe ich das ganze nochmal neu ... vielleicht funtzts ja dann ...
@ SoS nimm mal das Progg. Dann schalte im Hauptmenü auf die höchste Zoom-Stufe und geh mit den Pfeiltasten ganz nach rechts oben. Wenn Du das oberste rechte Feld selektieren kannst, ohne dass du mit dem Mauszeiger 2 x 2 Felder weiter rechts unten bist, dann hat mein Delphi echt ne Macke weg ... oder wie gesagt vielleicht sogar ich
Ich habe jetzt nochmal den gesamten Source <a href='http://www.onkeltortysfiles.de/selection.zip' target='_blank'>hier</a> hochgeladen, falls jemand einen Blick reinwerfen will ...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
So...habs grad mit dem von mir modifiziertem Quellcode probiert, und kann selbst bei höchster Zoomstufe und ganz nach oben rechts verschobener Map alle Felder pixelgenau selektieren.Dort wo ich hinklicke, wird auch selektiert.
Da ich eigentlich nichts ausser dem was ich oben gepostet hab geändert hab, weiss ich jetzt auch nicht wo dran es liegt.Als Anhang gibts hier aber mal die geänderte main.pas. Wenns damit nicht klappt, dann stimmt irgendwas mit deinen Grafiktreiber nicht...
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Hi,
Alzheimer, habe mir mal dein Programm geholt und kann bestätigen, das die Selektion nicht korrekt verläuft. Je weiter rechts das Feld steht, desto mehr muss man zum rechten Rand des Feldes gehen, damit das Feld unter der Maus und nicht das links daneben liegende Feld ausgewählt wird.
@SoS Nachdem ich deine geänderte main.pas eingespielt habe, hat es korrekt funktioniert.
Habe mir jetzt auch die Main.pas gezogen und nachdem ich sie eingespielt habe, hat es auch bei mir korrekt funktioniert ... So ... ich werde mich jetzt mal vor meinen Compi pflanzen und nachforschen, warum es jetzt funktioniert (ich habe die alte Main.pas vorher kopiert) ... ich poste dann nochmal
Sodala nachdem ich die beiden Sourcecodes durch den hauseigenen Interpreter in meiner Birne laufen hab lassen, hab ich folgende Unterschiede festgestellt :
(Zeile 164 im PixelformatDescriptor nach SoS : ) <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>cDepthBits = <span class='integer'>32</span>;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
Dann haben wir noch ... (Zeile 226 bei SetupViewport vorher : ) <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>gluPerspective(<span class='integer'>60.0</span>,width/height,NearClipping,FarClipping);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
(Zeile 226 bei SetupViewport nach SoS : ) <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>gluPerspective(<span class='integer'>45.0</span>,width/height,NearClipping,FarClipping);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
(Zeile 265 bei FormShow nach SoS : ) <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>SetupViewport(v1DC,RC1,Panel1.width, panel1.height);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
(Ich hab bei mir mal aus width clientwidth und aus height clientheight gemacht ... die (neu gewonnene) Präzision bleibt die gleiche ...)
Des weiteren .... (Zeile 343 in function GetSelectionBufferHit vorher : ) <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>gluPerspective (<span class='integer'>45.0</span>, Panel1.Clientwidth/Panel1.clientheight,<span class='integer'>0.1</span>,<span class='integer'>1000</span>);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
(Zeile 343 in function GetSelectionBufferHit nach SoS : ) <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>gluPerspective (<span class='integer'>45.0</span>, Panel1.Clientwidth/Panel1.clientheight,<span class='integer'>1</span>,<span class='integer'>1000</span>);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
Also war bei mir FarClipping mit 1000 statt 256 zu groß, der Tiefenbuffer nur mit 16 Bit statt 32 unterwegs, dann fovy auf 60 statt auf 45 und zNear auf 0.1 statt auf 1 ? :blink:
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
Also war bei mir FarClipping mit 1000 statt 256 zu groß, der Tiefenbuffer nur mit 16 Bit statt 32 unterwegs, dann fovy auf 60 statt auf 45 und zNear auf 0.1 statt auf 1 ?
Von dir genanntes hat eigentlich nix mit dem Selektionsproblem zu tun, und hab ich nur zum Testen verändert.Bis auf die Sache mit dem FOVY (siehe unten) dürften diese Änderungen keine Auswirkung auf die Selektion haben.
@Farclipping : War nur ein Test.Klappt auch mit 256.Da der Z-Puffer allerdings (AFAIK) linear ist, wird der mit steigender Reichweite ungenauer.Bei einer Z-Reichweite von 256 dürfte dieser deshalb genauer sein als bei einer Reichweite von 1000.
@Tiefenpuffer : Wenn man 24Bit oder 32Bit bekommen kann, dann sollte man sich die auch nehmen.Wenn diese nicht zur Verfügung stehen, wählt der Treiber automatisch das nächste passende Format aus.Hier würde ich prinzipiell immer 32 Bit verlangen.
@FovY : Ob 60° oder 45° spielt keine Rolle.Allerdings sollte dein FOVY in deinem Programm IMMER GLEICH SEIN.Du hattes da aber zwei gluPerspective drin, mit jeweils zwei unterschiedlichen FOVY!
@zNear : Auch nicht unbedingt nötig.Klappt bei mir auch mit zNear=1, was im Allgemeinen auch empfehlenswerter ist.Die 0.1 war nur ein Test.
Na wenigstens hauts jetzt hin ... das mit dem FOVY hab ich gar net bemerkt ... *klatsch* :blink: ... jetzt weisst Du wenigstens, warum ich Alzheimer heisse
Mitglieder in diesem Forum: Google [Bot] und 22 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.