Registriert: Di Jun 10, 2003 22:41 Beiträge: 8 Wohnort: Bad Ischl / Oberösterreich
Hi Leute,
ich hab schon dieses Forum durchforstet und das Tutorial zur Objektauswahl gelesen. Allerdings krieg ich das ganze, für meinen Fall, nicht auf die reihe.
Ich bin noch newby in Sachen OpenGL und hab mir die GLScene Komponenten installiert und es hat alles wunderbar funktioniert.
Ich hab alle Notwendigen Komponenten auf ein Formular gesetzt und mit ein paar Cubes einen Raum gezeichnet. Ich möchte nun wissen, wie ich es funktioniert, dass man mit der Maus eine der Wände dieses Raumes auswählen kann.
Offensichtlich brauche ich dafür den NameStack. In diesem Fall bekomme ich ja nicht mit, wann die Wände gezeichnet werden um Sie auf den NameStack zu geben. Muss ich den Raum dynamisch erzeugen um ihn auf den NameStack zu bekommen?
Ich hoffe, ich hab die Fragen verständlich Formuliert und würde mich über Ausführliche Antworten oder Verweise zu anderen Beiträgen und Tutorials freuen.
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Die Cube-Objekte in GLScene werden als ganzes gezeichnet und damit auch als ganzes Objekt auf den NameStack gelegt. Damit Du Wände selektieren kannst, must Du 6 Planes verwenden, wobei jede Plane auf den NameStack gelegt wird.
Registriert: Di Jun 10, 2003 22:41 Beiträge: 8 Wohnort: Bad Ischl / Oberösterreich
Hi Leute,
ich hab das Tutorial zur Objektauswahl von Delphigl.de und GL Picking von sulaco.co.za studiert. Die Beispielcodes laufen natürlich einwandfrei. Ich schaffe es jedoch nicht den Code auf meinen Anwendungsfall anzuwenden. Leider werden bei beiden tut's keine Komponenten von GLScenes verwendet. :unsure:
Anbei findet ihr die Sourcen zu meiner Testanwendung. Könntet vielleicht jemand einen Blick darauf werfen und mir sagen wo der Hund begraben ist? Nach Programmstart sieht man 2 Würfel und ich bekomme aber, beim clicken oder zeigen auf die Würfel keinen einzigen Hit zurück, worüber ich mich schon freuen würde.
Oder sollte ich mich vielleicht von den GLScene Komponenten verabschieden? Es ist ja nicht so das, das mich der Hintergrund nicht interessiert, momentan hab ich nur etwas Zeitdruck. :unsure:
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also auf diese Art und Weise kannst du das vollkommen vergessen!!!
Es genügt vollkommen, wenn du deine beiden Würfel einmal erstellst und sie zu GLScene hinzufügst. Alles andere übernimmt die Komponente selber. Du brauchst dich auch nicht darum zu kümmern, dass da namen geladen werden. Das macht die Komponente nämlich auch selber und zwar mit den Speicheradressen der Objekte.
Ich habe hier mal etwas deinen Code aufgeräumt. <!--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'>procedure</span> TForm1.GLSceneViewerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); <span class='reserved'>var</span> Pick: TGLBaseSceneObject; <span class='reserved'>begin</span> SetMousePos(X,Y); Pick := GLSceneViewer.Buffer.GetPickedObject(X, Y); // Dieses Objekt kannst noch als TCube (oder was es auch ist) casten um dann spezifische Einstellungen zu ändern etc. <span class='reserved'>end</span>;
CubeNewRoom := TCube.Create(<span class='reserved'>nil</span>); CubeNewRoom.CubeDepth := <span class='integer'>1</span>; CubeNewRoom.CubeHeight := <span class='integer'>1</span>; CubeNewRoom.CubeWidth := <span class='integer'>1</span>; CubeNewRoom.Position.X := <span class='integer'>3</span>; GLScene.Objects.AddChild(CubeNewRoom); <span class='reserved'>end</span>; </pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3--> Das Rendern übernimmt GLScene automatisch. Entweder per Repaint vom Windows oder per selbst angesteuertem Repaint mittels des GLCadencer.
Noch etwas sehr wichtiges. Nach Möglichkeit solltest du so wenig wie möglich eigenes OpenGL verwenden. Speziell wenn es sich um Matrixoperationen handelt. glRotate, etc. Da glScene für seine Berechnungen nur die internen Einstellungen verwendet werden solche Operatiionen einfach nicht berücksichtigt und somit sieht das Ergebniss dann sehr lustig (interessant) aus.
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.