![]() |
Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-)!
Hi Leute :-)!
Also ich probiere grad noch ein wenig rum mit OpenGL, ein richtiges "Projekt" traue ich mir noch nich zu, aber man is ja am lernen, am fummeln :-D und ich möchte erstmal gerne die "Grundgeheimnisse" verstehen!^^ Ich hab das Tutorial auf der DGL Seite zum Thema Selection durchgelesen und es anstatt auf 3 Figuren nur auf eine angewand... nur ja .. hmmm funzt nich :-D:-D:-D (also läuft alles aber egal ob man das Objekt nun anklickt oder irgendwas anderes zeigt er immer an -->"sie haben auf nichts geklickt" ^^... meine Vorstellung wäre sie haben auf Figur geklickt oda so :-) ) Und ich verstehe einfach nich wieso.. ich hoffe ihr könnt helfen :-) hier ma der ganze Code (ka ob man das so macht aber ^^ ich hoffe ihr verzeiht mir das ich hier einfach mal alles hinklatsche!^^ (bin ja n Anfänger und so :-P) mfg Choice :-)
Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, dglOpenGL, glBitmap, ComCtrls; type TForm1 = class(TForm) StatusBar1: TStatusBar; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure IdleHandler(Sender: TObject; var Done: Boolean); procedure FormResize(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Render; private { Private-Deklarationen } StartTime, TimeCount, FrameCount : Cardinal; //FrameCounter Frames, DrawTime : Cardinal; //& Timebased Movement fTexture: TglBitmap2D; // Instanz unserer Textur procedure SetupGL; procedure ErrorHandler; public { Public-Deklarationen } DC : HDC; //Handle auf Zeichenfläche RC : HGLRC;//Rendering Context end; var Form1: TForm1; xs, ys: Integer; const NearClipping = 1; FarClipping = 1000; Figur = 0; namen: array[-1..0] of string = ('nichts','Figur'); implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin DC:= GetDC(Handle); if not InitOpenGL then Application.Terminate; RC:= CreateRenderingContext( DC, [opDoubleBuffered], 32, 24, 0,0,0, 0); ActivateRenderingContext(DC, RC); {fTexture := TglBitmap2D.Create; // Instanz der Klasse erstellen fTexture.LoadFromFile('thelfer04.bmp'); // Datei laden fTexture.GenTexture; // geladene Textur an OpenGL übergeben } SetupGL; end; procedure TForm1.SetupGL; begin glClearColor(0, 0, 0, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau glEnable(GL_DEPTH_TEST); //Tiefentest aktivieren glEnable(GL_CULL_FACE); //Backface Culling aktivieren end; procedure TForm1.FormDestroy(Sender: TObject); begin DeactivateRenderingContext; DestroyRenderingContext(RC); ReleaseDC(Handle, DC); fTexture.Free; end; procedure TForm1.FormResize(Sender: TObject); var tmpBool : Boolean; begin glViewport(0, 0, ClientWidth, ClientHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping); glMatrixMode(GL_MODELVIEW); glLoadIdentity; IdleHandler(Sender, tmpBool); end; function Selection : integer; var Puffer : array[0..256] of GLUInt; Viewport : TGLVectori4; Treffer,i : Integer; Z_Wert : GLUInt; Getroffen : GLUInt; begin glGetIntegerv(GL_VIEWPORT, @viewport); //Die Sicht speichern glSelectBuffer(256, @Puffer); //Den Puffer zuordnen glMatrixMode(GL_PROJECTION); //In den Projektionsmodus glRenderMode(GL_SELECT); //In den Selectionsmodus schalten glPushMatrix; //Um unsere Matrix zu sichern glLoadIdentity; //Und dieselbige wieder zurückzusetzen gluPickMatrix(xs, viewport[3]-ys, 1.0, 1.0, viewport); gluPerspective(60.0, Viewport[2]/Viewport[3], 1, 256); glMatrixMode(GL_PROJECTION); //Wieder in den Projektionsmodus glPopMatrix; //und unsere alte Matrix wiederherzustellen treffer := glRenderMode(GL_RENDER); //Anzahl der Treffer auslesen Getroffen := High(GLUInt); //Höchsten möglichen Wert annehmen Z_Wert := High(GLUInt); //Höchsten Z - Wert for i := 0 to Treffer-1 do if Puffer[(i*4)+1] < Z_Wert then begin getroffen := Puffer[(i*4)+3]; Z_Wert := Puffer[(i*4)+1]; end; if getroffen=High(GLUInt) then Result := -1 else Result := getroffen; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin xs := x; ys := y; statusbar1.SimpleText := 'Sie haben auf ' + namen[selection] + ' geklickt!' + 'Maus koords x:'+inttostr(xs)+ 'Maus koords y:'+inttostr(ys); end; procedure TForm1.Render; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping); glMatrixMode(GL_MODELVIEW); glLoadIdentity; glTranslatef(0, 0, -5); glLoadName(Figur); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(-0.4,0.4,0); //lo glTexCoord2f(0,1); glVertex3f(-0.4,-0.4,0); //lu glTexCoord2f(1,1); glVertex3f(0.4,-0.4,0); //ru glTexCoord2f(1,0); glVertex3f(0.4,0.4,0); //ro glEnd; SwapBuffers(DC); end; procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean); begin StartTime:= GetTickCount; Render; DrawTime:= GetTickCount - StartTime; Inc(TimeCount, DrawTime); Inc(FrameCount); if TimeCount >= 1000 then begin Frames:= FrameCount; TimeCount:= TimeCount - 1000; FrameCount:= 0; Caption:= InttoStr(Frames) + 'FPS'; ErrorHandler; end; Done:= false; end; procedure TForm1.ErrorHandler; begin Form1.Caption := gluErrorString(glGetError); end; end. |
Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-
90% weniger Smileys wären auch eine Wahlmöglichkeit gewesen.
|
Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-
Außer das es imho besser wäre Fragen zu einem Tutorial auch im Forum der entsprechenden Seite zu stellen oder es hier zumindest zu verlinken.
Da du das Tutorial hier schon quasi hin kopiert hast, wieviel davon hast du bis jetzt verstanden und was hast du schon versucht um dein Problem zu lösen? Selection gibt ja offenbar wie du in deiner Ausgabe lesen kannst -1 zurück, d. h. entweder dein Objekt ist nicht auf dem Namestack registriert, oder es wird bei der Überprüfung nicht getroffen. |
Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-
Zitat:
Zitat:
|
Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-
Zitat:
Statt Code tags ruhig Delphi tags benutzen. grüße |
Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-
Zitat:
Ihr habt es soeben geschafft, ein komplett neues Mitglied mit Euren unkonstruktiven und unhöflichen Antworten hier dazu zu bewegen, seinen Account sofort wieder löschen zu lassen. Man kann Neulinge auch um längen höflicher darauf hinweisen, dass übermäßiger Smiley-Gebrauch vom eigentlich Inhalt ablenkt und in normalen Fragestellungen idealerweise auf das nötigste Beschränkt werden sollte. Vielen Dank :evil: |
Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-
Tut mir leid, aber was können wir dafür, wenn er mit Kritik nicht umgehen kann und seine eigenen Fehler nicht sieht? Andere Leute hätten wahrscheinlich darüber gelacht, die Smileys rauseditiert und sich nochmal Mühe bzgl. ihres Problems gegeben. Aber er hat sich dazu entschieden, es persönlich zu nehmen und seinen Account zu kündigen.
Wenn er hier als Newb reinplatzt, seinen ganzen Code hier "hinklatscht" und dann nach dem Motto "nun helft mir mal" Hilfe erwartet, darf er sich nicht wundern, wenn er damit gegen die Wand fährt. Imho wars einfach die Situation "Wie es in den Wald hineinruft, schallt es auch wieder heraus." Wenn das Tutorial funktioniert und sein Konstrukt (immernoch) nicht, an wem liegts dann wohl? An uns bestimmt nicht. Gestern jemand "Wer wird Millionär" geguckt? Da war auch so'ne Situation: Frage -> Publikumsjoker -> Er hat die Antwort geglaubt -> War falsche Antwort. Wessen Verantwortung war das nun? Die vom Joker, weil er die falsche Antwort gegeben hat oder die vom Spieler, weil er sich dazu entschieden hat, die Antwort zu glauben? |
Re: Selectionstut befolgt und trotzdem fehler??? :D Hilfe :-
Zitat:
Es steht hier niemanden zu, andere User derart grob auf Ihre Fehler hinzuweisen. Selbst wir Moderatoren tun das freundlich. So einen Satz bekommt von uns höchstens jemand vor die Nase geklatscht, der sich in dieser Hinsicht als anfänglich Beratungsresistent erweist und auf mehrfaches, höfliches Aufmerksam machen nicht reagiert. Dann muss man halt ab und zu etwas bestimmter reagieren. Fürs nächste mal also bitte die angemessene Höflichkeit walten lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz