Deutsch
Forum

ogl und xpse

 

Andreas
Koch
Hallo zusammen,

eine kurze Frage zum Thema opengl und xpse: gibt es eine Möglichkeit, einen ogl("xyz",...) Befehl in eine nproc einzubauen?
Konkret geht es um den Befehl oGL("TestMouse", X, Y, Z), bzw @oGL("TestXY", X, Y, Z, SX, SY).
Der Testmodus von opengl funktioniert nicht immer so dolle und ich versuche auf dem Weg, ihn zu umgehen.

Schönen Gruß

Andreas Koch
 
14.01.2013  
 



Grüße!

Nein, ganz speziell dies geht leider noch nicht -

es war mir in ersten Tests nicht gelungen, aus der Assembler-DLL heraus an den
XProfan-OGL-Context anzubinden und glaube, dass OGL da etwas dagegen hat.

Ich weiß aber nicht genau woran das liegt aber in meinen ersten Tests mit reinem
nativen Profan, dass ohne die Runtime auskommt, kann man auch OpenGL nativ
nutzen. Diese spezielle XPSE-Version ist aber noch nicht öffentlich.

Was ich nicht getestet hatte war den ganzen OGL-Context aus einer nProc heraus
zu erzeugen, dies könnte imho funktionieren.
 
14.01.2013  
 




Andreas
Koch
Erst einmal danke für die Antwort. Sorry, ich habe das Thema jetzt 2mal eingestellt. (ich hatte das nicht mehr gefunden.)
Nächste Frage: Verstehe ich deinen letzten Absatz richtig, dass ich die Api-Befehle, für die der ogl-Befehl steht, versuchen kann zu nutzen?
Wenn ja, wo finde ich denn die API-Befehle für oGL("TestMouse", X, Y, Z), bzw @oGL("TestXY", X, Y, Z, SX, SY))?
 
14.01.2013  
 




RGH
Für die OpenGL-Api gibt es zahlreich (meist englische) Dokumentationen im Netz, auch direkt bei Microsoft. (Google hilft.)
Viele der XProfan-OpenGL-Funktionen vereinen aber mehrere API-Aufrufe, teilweise auch mit komplexer Logik, um die Open-GL-Programmierung zu vereinfachen.Wenn man in XProfan z.B. einen Würfel mit einem Aufruf erledigt, brauch es in nativer API eine ganze Reihe von Aufrufen.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
14.01.2013  
 




Andreas
Koch
Mein erster Versuch war auch, einen OpenGL-API Ersatz für die beiden obigen Funktionen zu finden, was nicht so ganz erfolgreich war.
Deswegen vermutete ich auch, dass eine ganze Reihe von Befehlen dahinter steckt, die in XProfan zu einer Funktion zusammengefügt wurden. Um die Api-Befehle nachschlagen und direkt anwenden zu können, müsste ich aber wissen, wie die heißen. Deswegen meine Frage, was hinter oGL("TestMouse", X, Y, Z), bzw @oGL("TestXY", X, Y, Z, SX, SY)) steckt.

PS: wiki.delphigl.com hat mich bisher bei opengl immer weitergebracht.
 
14.01.2013  
 




RGH
Bitte sehr: Der Original-Code in Delphi:
procedure fnOGLTestMouse; {-----------------------} var x, y, z: double; ix, iy: longint; fx, fy, fz: double; modelview: array[1 .. 16] of double; projection: array[1 .. 16] of double; viewport: array[1 .. 4] of longint; R: TRect; Begin if oGLWnd = 0 Then FehlerNr(400,''); GetClientRect(oGLWnd,R); LesePara(ParStack,',',0); x := RPar.Dbl; LesePara(ParStack,',',0); y := RPar.Dbl; LesePara(ParStack,')',0); z := RPar.Dbl; glGetDoublev(GL_MODELVIEW_MATRIX, @modelView); glGetDoublev(GL_PROJECTION_MATRIX, @projection); glGetIntegerv(GL_VIEWPORT, @viewPort); gluProject(x, y, z, @modelView, @projection, @viewPort, fx, fy, fz); ix := sqr(round(fx) - Mausx); iy := sqr((R.Bottom - round(fy)) - Mausy); If (ix + iy) > 0 then RPar.Lng := round(sqrt(ix + iy)) else RPar.Lng := 0; RPar.Typ := 2; Found := True; End; procedure fnOGLTestXY; {--------------------} var x, y, z: double; ix, iy: longint; dx, dy: longint; fx, fy, fz: double; modelview: array[1 .. 16] of double; projection: array[1 .. 16] of double; viewport: array[1 .. 4] of longint; R: TRect; Begin if oGLWnd = 0 Then FehlerNr(400,''); GetClientRect(oGLWnd,R); LesePara(ParStack,',',0); x := RPar.Dbl; LesePara(ParStack,',',0); y := RPar.Dbl; LesePara(ParStack,',',0); z := RPar.Dbl; LesePara(ParStack,',',0); dx := RPar.Lng; LesePara(ParStack,')',0); dy := RPar.Lng; glGetDoublev(GL_MODELVIEW_MATRIX, @modelView); glGetDoublev(GL_PROJECTION_MATRIX, @projection); glGetIntegerv(GL_VIEWPORT, @viewPort); gluProject(x, y, z, @modelView, @projection, @viewPort, fx, fy, fz); ix := sqr(round(fx) - dx); iy := sqr((R.Bottom - round(fy)) - dy); If (ix + iy) > 0 then RPar.Lng := round(sqrt(ix + iy)) else RPar.Lng := 0; RPar.Typ := 2; Found := True; End;
(Da das Forum nur XProfan-Code richtig formatieren kann, sieht es etwas seltsam aus. Mit wäre es lieber, es gäbe ein Tga, das die Formatierung so lässt, wie ich sie mühevoll eingerichtet habe.)

Einige Anmerkungen:
LesePara list den nächsten Parameter der Programmzeile. Das Ergebnis wird in beiden Funktionen in RPar.Lng (Long-Integer) zurückgeliefert.Fehler 400 besagt, dass OGL nicht initialisiert wurde und es somit kein OGL-Fenster gibt.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
14.01.2013  
 




Andreas
Koch
Danke für die Hilfe, ich denke, daran kann ich mich langhangeln.

Schönen Gruß

Andreas
 
14.01.2013  
 




RGH
Hilfreich vielleicht auch noch OGLStartTest und OGLEndTest:
procedure oGLStartTest(mx, my, dx, dy: integer); {---------------------------------------------} var viewport: array[1 .. 4] of longint; wh: double; R: TRect; width, height: integer; begin // Store our Viewport glGetIntegerv(GL_VIEWPORT, @viewport); // Tell OpenGL the size of our select buffer glSelectBuffer(512, @SelectBuffer); // Change our render mode to GL_SELECT glRenderMode(GL_SELECT); // Init the namestack glInitNames; glPushName(0); glMatrixMode(GL_PROJECTION); glPushMatrix; glLoadIdentity; // Zoom the view to dx/dy pixel around the mouse position gluPickMatrix(mx, viewport[4]-my, dx, dy, @viewport); GetClientRect(oGLWnd,R); Height := R.Bottom; Width := R.Right; if (Height = 0) then Height := 1; if OGLwh <= 0 then wh := Width/Height else wh := OGLwh; gluPerspective(45.0, wh, 0.1, oGLDepth); End; function oGLEndTest:longint; {--------------------------} var Hits, Hit, i : Integer; HitZValue : GLUInt; begin glMatrixMode(GL_PROJECTION); glPopMatrix; // Now store the number of hits in Hits Hits := glRenderMode(GL_RENDER); // Now we look which hit has the lowest Z-Value i.e. was in front Hit := -1; HitZValue := High(GLUInt); for i := 0 to Hits-1 do if SelectBuffer[(i*4)+1] < HitZValue then begin Hit := SelectBuffer[(i*4)+3]; HitZValue := SelectBuffer[(i*4)+1]; end; Result := Hit; end;
 
XProfan X2
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
14.01.2013  
 



[offtopic]
RGH (14.01.13)
(Da das Forum nur XProfan-Code richtig formatieren kann, sieht es etwas seltsam aus. Mit wäre es lieber, es gäbe ein Tga, das die Formatierung so lässt, wie ich sie mühevoll eingerichtet habe.)



Habe Deine Postings dahingehend fix bearbeitet.

Werde einfach ein 2. Code-Tag für einführen.
[/offtopic]
 
14.01.2013  
 



Andreas Koch (14.01.13)
Erst einmal danke für die Antwort. Sorry, ich habe das Thema jetzt 2mal eingestellt. (ich hatte das nicht mehr gefunden.)


Jojo, kein Streß.

Gibt auch eine Forenübergreifende Übersicht aktueller Themen:  [...] 
Kannst Dein Thema einfach auch selbst löschen, einfach unten rechte bei Themenoptionen.
 
14.01.2013  
 




Andreas
Koch
Noch ein kurzer Nachtrag,

auf der Seite von Uwe Pascal Niemeyer [...]  gibt es eine zip-Datei (opengl2004.zip), worin sich sehr viele Beispiele zur Programmierung mit opengl befinden. Soweit ich das überblicken kann, wird dabei auf ogl("xyz",...) Befehle gänzlich verzichtet. Ich vermute, die Codes stammen aus einer Zeit bevor openGl in xprofan eingebunden war. Sie funktionieren aber noch tadellos. Da war auch ein Beispiel dabei, das die Original-Delphi Codes von RGH im Wesentlichen abbildet. Allen, die mit opengl zu tun haben, kann ich diese Beispiele nur empfehlen.

Schönen Gruß

Andreas Koch
 
20.01.2013  
 



Stimmt, die sind super. Ich hatte damals damit ein 3D-Snake programmiert und weiß das man damit richtig komplexe Umgebungen herzaubern kann.
 
20.01.2013  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

20.497 Betrachtungen

Unbenanntvor 0 min.
Sven Bader14.10.2021
p.specht08.03.2017
funkheld22.05.2016
Georg Teles13.01.2016
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

iF (7x)
Andreas Koch (5x)
RGH (4x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie