und schon kommt meine nächte Frage.
Ich habe mir jetzt eine Map Datei aufgebaut, die ich am Start lade.
Jetzt wollte ich gerne, wenn ich irgendwo draufklicke das sich die Figur dort hinbewegt. Wie das allgemein geht in Delphi weis ich, aber wie funktioniert das in OpenGL? Ich kann ja nicht einfach x, y zuweisen. Dan sieht man die Figur später nicht mehr. Wie bekomme ich das am besten hin?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Willst du das nur in 2D machen? Wenn ja, dann geht das ganz einfach in dem du die Mauskoordinaten umrechnest.
In 3D wirds schon schwerer, denn da musst du erstmal den Tiefenwert unter dem Mauscursor auslesen und den inklusive Maus-X und Maus-Y an gluUnproject übergeben um die 3D-Koordinaten der Stelle unter der Maus zu bekommen. Ist aber wenn mans einmal gemacht hat recht einfach.
Ich mache das in 3D. Um den Tiefenwert auslesen zu können, kann ich ja gut die Funktion nehmen von den Selection Tutorial. Wenn ich das nämlich richtig verstanden habe ist bei den Tut Z_Wert der Tiefenwert.
Aber mal zu gluUnproject, der erwartet viele Werte:
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Nein, mit dem Zeug aus dem Selection-Tut kannst du da nix anfangen. Den Tiefenwert (=winz) musst du mit glReadPixels (Argument = GL_DEPTH / Format = GL_FLOAT) auslesen und an gluUnproject übergeben.
Aber die Parameter von gluUnproject sind doch recht aussagekräftig.
Benutz auch mal die Suchfunktion, denn ich hab hier auch schon mehrere Male recht ausführliche Sachen zu gluUnproject gesagt. (Wenn ich mich recht erinnere hab ich sogar mal passenden Quellcode dazu gepostet)
Hm... ich glaube nicht das es ein Fehler ist! Ich denke mehr ich habe ein ganz falschen Code. Darum habe ich auch keine Fehlerbeschreibung gepostet. Mehr oder weniger. "TVertex" in welcher Unit ist das? Und woher bekomme ich diese Unit? Vielleicht geht es dann....
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
TVertex (wenn dus aus dem Thread habe den ich vermute) ist ein von dem Threadersteller selbst deklarierter Typ. Und wie ein TVertex auszusehen hat kommt auf deine Awendung an. Mindestens drei Koordinaten (egal ob Array oder Variable) und ggf. noch Texturkoordinaten, Tangenten, usw.
Sorry, keine ahnung was du damit meinst. Bin Anfänger in OpenGL.
Hm... Ich habe einfach mal gemacht, das ich mit der Pfeiltaste steuern kann die Kamera nicht die Figur. Und habe px mit dem Wert den ich zurück bekomme um 20 erhöht. Wenn ich irgendwo dann mit der Kamera hingehe dann klicke, ist die Figur immer vor mir. Also stimmt irgendwas noch nicht, nur was?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Dann eigne dir bitte erstmal die GL-Grundlagen an. Die Matrizen sind ein sehr wichtiges Konzept, ohne das du nicht sehr weit kommen wirst. Wenn du noch nichteinmal den Unterschied zwischen der Modelansichts- und Projektionsmatrix kennst, dann wird deine GL-Karriere nur von kurzer Dauer sein. Bei etwas wie einer komplexen 3D-API kann man nicht einfach mal mittendrin einsteigen, also les dir am besten mal das RedBook durch, das ist quasi die OpenGL-Anleitung.
Das Red Book ist auf Englisch und ich kann kein Englisch, das sage ich in diesen Forum zum 3 mal. Früher in Delphi hatte ich auch das Problem mit anderen. Früher immer viel gepostet. Jeder hatt mich auf Deutsch ausgelacht das ich nichts kann. Hatt auch ne Zeit gedauert bis ich das alles geraft habe. Weil die nicht aktzeptieren wollten, dass ich so besser lernen kann wenn ich meist Beispiel Quellcodes bekomme. Aber jetzt bin ich sehr sehr gut in Delphi.
Mit OpenGL habe ich erst angefangen sehe bei Forum wo man sich vorstellen kann. Nach dem Post habe ich dann etwas weiter gelernt. Und habe ne Zeit lang nichts gemacht, weil ich auf mein neuen PC gewartet habe. Weil mein anderer PC zu schlecht war. Und rechne jetzt mal die Tage aus wo ich OpenGL gelernt habe? Das ist höchtens 1 Woche noch garnicht mal. Ihr postet meistens nur Links zu Englische Seiten. Und wollt nicht aktzeptieren das manche Leute kein Englisch können. Also auf Deutsch "Tja Pech gehabt lern Englisch", so geht Ihr mit den anderen um, die kein Englisch können.
Jeder Mensch hatt auch eine andere Schreibweise. Also ich will damit sagen, das ich eure Tutorials nicht sogut verstehe. Das einzigste was ich in ca. 1 Woche gelernt habe, ist wie man 3D Räume erstellt. Wie man Türen etc. Öffnet also Objekte bewegen lassen kann und sowas. Und wie man andere Objekte halb Transparent darstellt wie Z.b. ein Fenster. Achja und wie man Map Dateien erstellt. Und wie man von 3ds Max Models laden kann. Jetzt habe ich das Problem mit der x,y Koordinaten. Also wie ich die umwandel in OpenGL (x,y,z) Koordinaten. Und es währe echt nett wenn Ihr mir einfach deutlich erklären würdet wie das Funktioniert. Nützlich währe auch ein Beispiel Quellcode. Ihr denkt ach Beispiel Quellcode und fertig -> NEIN! Ich lerne aus Beispiel Quellcodes besser!!!
Erlich gesagt habe ich keine lust mich jetzt zu streiten wie damals immer, bei Delphi-Groups. Also schreibt BITTE kein Kommentar dazu. Nur wenn es um mein Problem geht - Danke!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Was ich meinte war folgendes (Quellcode) :
Code:
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
// Ansicht setzen
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
// Szene rendern
Ich bin der Annahme das du, nachdem du über gluUnproject die Koordinaten unter einem 2D-Punkt ermittelst, du deine Matrizen nicht so wie oben korrekt zurücksetzt, weshalb deine Ansicht dann auch verändert wird.
Wenn ich das andere noch hinzufüge, dann sehe ich überhaupt nichts mehr. Wenn ich irgendwo hinklicke passiert nichts. Bzw. Es passiert schon was nur man sieht es nicht. Wenn ich irgendwo anders hingehe dan klicke ist die Figur vor mir. Also habe das ja als test genommen um zu sehen was falsch ist:
Code:
if(key='w')or(Key='W')then
begin
X1:=X1-sin(PosY*pi/180);
Z:=Z+cos(PosY*pi/180);
end;
If(key='s')or(Key='S')then
begin
X1:=X1+sin(PosY*pi/180);
Z:=Z-cos(PosY*pi/180);
end;
...
Code:
glTranslatef(X1,-15,z);
So gehe ich jetzt Beispielsweise an einer anderen Stelle (Vorwärts, Rückwärts). Dann klicke ich egal wo und die Figur steht dann vor mir. Also stimmt irgendwas an dieser Procedure noch nicht:
gluUnProject(X,Viewport[3]- Y -1,pz,ModelView,Projection,Viewport,@pX,@pY,@pZ);
end;
Bei OnMouseDown rufe ich diese Procedure so auf:
PositionGL(x,y);
Aber irgendwie nimt er nicht die Maus Koordinaten sondern die Position wo ich gerade bin...warum auch immer. Muss ich vielleicht irgendwas anderes noch aufrufen vorher oder so?
Mitglieder in diesem Forum: 0 Mitglieder und 12 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.