Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 21:05

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Feb 27, 2006 23:14 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

ich schon wieder.

Nun hab ich meine Karte gezeichnet und möchte das die verschiebbar wird.

Code:
  1. procedure TForm1.oglPanelMouseMove(Sender: TObject; Shift: TShiftState; X,
  2.   Y: Integer);
  3. var
  4.   viewport: TVector4i;
  5.   pCenterX, pCenterY : Real;
  6.   mvmatrix, projmatrix : TMatrix4d;
  7.   winx, winy, winz: GLdouble;
  8.  
  9. begin
  10.    if (ssLeft in Shift) then
  11.   begin
  12.     glGetIntegerv (GL_VIEWPORT, @viewport);
  13.     glGetDoublev (GL_MODELVIEW_MATRIX, @mvmatrix);
  14.     glGetDoublev (GL_PROJECTION_MATRIX, @projmatrix);
  15.  
  16.     ShowMessage(FloatToStr(matrix[3,0]));  // Immer der gleiche Wert
  17.   end;
  18. end;


Irgendwie bekomm ich das aber nicht gebacken.
Das muss doch noch irgendwie mit der Maus in Verbindung gebracht werden.
Wie macht man denn das am besten ?

Matthias

// Edit Lossy: Code durch Pascaltags ersetzt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 27, 2006 23:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Man sollte nicht direkt auf der Matrix rummanipulieren... das ist genauso evil wie Pointer-Arithmetik ;)

OGL hat mit deiner Maus nix zu schaffen.

Du musst dir also am besten selber ein var Translation: TPoint; erstellen und da deine Mausbewegung hineinrechnen. Vor dem Rendern rufst du dann gltranslate(Translation.X,Translation.Y,0); auf.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 01:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Erstmal ein hoch auf Pointer-Arithmetik, denn ohne sie wäre programmieren langweilig und beschränkt :p

Zu deinem Problem würde ich mal sagen google mal nach "raycast interception","line-plane interception", dass könnte vieleicht eine antwort bringen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 08:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich kann mich Tak nur anschließen. Mit ein bisschen Pointervoodoo ist man in der Lage die Welt zu verbessern. Nichts geht über ein bisschen Pointergewurschtel. :-)

Sonst denke ich aber hat Luke wiederrum recht. Du müsstest deine Mausbewegungen in globalen Variablen festhalten und diese dann vor dem Zeichnen mit Translate anwenden.

Wenn deine Map noch über eine Erdkrümmung verfügt so musst du diese auch mit anwenden. Wohl gemerkt wenn. Das richtet sich aber wieder ganz danach was du vor hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 12:35 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

jap, werd ich machen.
Erst mal hab ich das mit der blöden Kugel oder Spere noch nicht hinbekommen.
Ich hab dei Breite und Länge ( Latitude und Longitude ) eines Punktes auf der erde und muss diesen auf
einer Kugel btw. spere darstellen.

Hab dazu was gefunden, aber das funktioniert nicht wirklich.
Die schreiben dort :

http://de.wikipedia.org/wiki/Kugelkoordinaten

x := r*sin(lat)*cos(lon);
y := r*sin(lat*sin(lon);
z := r*cos(lat);

Das kann aber nicht wirklich so richtig sein oder ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
das müßte so schon stimmen soweit ich das sehe. lat müßte dann bei dir den Winkel zwischen dem Vektor und einer Referenzebene auf der x und y liegen angeben, lon den Winkel auf dieser ebene. Soweit ich das sehe müßten die Winkelbezeichnungen zwar eigentlich umgekehrt sein, aber gut.

Ach ja und um mich meinen Vorrednern anzuschließen, pointerarithmetik lebe hoch. Und was ist bitte evil daran die Matrizen selber zu manipulieren? man sollte schon wissen was man tut, aber dann gehen damit auch schöne sachen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 16:21 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

ich hab nochmal probiert :

Code:
  1.  
  2. procedure TestLatLon;
  3. var
  4.   a : integer;
  5.   p : TVertex3F;
  6.   lat, lon : real;
  7. begin    
  8.     lat := -90;
  9.     lon := 0;
  10.  
  11.     glBegin(GL_POINTS);
  12.  
  13.     For a := 0 to 18 do
  14.     begin
  15.  
  16.         lat := DegToRad(Lat);
  17.         lon := DegToRad(Lon);
  18.  
  19.         p[0] := r*sin(lon)*cos(lat);
  20.         p[1] := r*sin(lon)*sin(lat);
  21.         p[2] := r*cos(lon);
  22.  
  23.         glVertex3F(p[0],p[1],p[2]);
  24.      
  25.         lat := lat + 10;
  26.     end;
  27.    
  28.     glEnd;
  29. end;
  30.  
  31.  


Hmm, eigentlich sollte das eine Linie um die Spere von unten ( -90 ) nach oben (+90) als Latitude ergeben.
Tuts aber nicht. ...

So wie hier der Nullmeridian müsste es etwa aussehen http://www.explorermagazin.de/gps/gpsbasic.htm

grübel grübel...schwitz und Kopfschmerzen :-)
Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 02, 2006 08:05 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

erste Erfolge :-) es funktioniert erst mal !!!! FREU

Sobald ich das ganze Durcheinander in dem Code ein bischen sortiert hab
stelle ich das hier zur Verfügung.

Vorher hab ich aber mal noch ein zwei Fragen :

1. Ich gebe nun auch Text aus. Hab das nach Beispiel aus der Wiki gemacht :

http://wiki.delphigl.com/index.php/wglUseFontOutlines
Meine Erde ist ja nun rund :-) . Der Text wird ja auch ausgegeben, das klappt fein, aber wenn ich einen Text hab der
genau auf der Vorderseite der Erde steht, ( irgendeine Bezeichnung, sagen wir da steht "Leipzig") dann verschwindet manchmal ein Teil des Textes "in" der Texture der Erde. Man sieht dann manchmal nur "Lei"-und die hälfte vom p noch.
Der Rest scheint "in" der Texture zu stehen.
Meine Sphere, auf der die Texture liegt, ist aber um einiges kleiner als der Punkt wo der Text dargestellt wird. Also da ist genug Abstand dazwischen. Was kann denn das sein ?

2. Manchmal sieht es auch so aus als würde man durch die Erdtexture hindurchsehen können.
Wie kann denn das sein ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 02, 2006 09:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Tue bitte uns und dir einen gefallen und erstelle das nächste Mal für Fragen die nicht zum Ursprungsthema passen bitte auch ein neues Thema. Sammelthreads bringen nur Verwirrung und viele (ich teilweise eingeschlossen) schauen sich nicht jeden neuen Beitrag an. Speziell wenn es ein Thema ist was nicht für alle interessant ist. Wenn du ein neues Thema erstellt sind die Fragen klar getrennt und die sprichst auch gleichzeit mehr Leute an.

Jetzt aber mal zu deinem Fontproblem.
1. Mit wglUseFontOutlines erstelltst du 3D Buchstaben. Ob das immer so sinnvoll ist lasse ich erst einmal dahingestellt. Bei deiner ersten Frage vermute ich einmal sehr stark, dass der Text in die Oberfläche reingezeichnet wird und deswegen nur die Hälft siehst. 3D Text ist ein Objekt wie jedes andere. Du kannst den Text natürlich auch in beliebige Richtungen drehen. Das müsstest du entsprechend auch tun. Außerdem solltest du wissen, dass 3D Text recht viel Rechenleistung erfordert, da es mitunter recht viele Flächen sein können. Eine Alternative dazu wären Bitmapsfonts.

2. Da kann man nur Raten. Mach davon am Besten mal ein Bild un Poste es mal hier. Dann können wir dir bestimmt mehr sagen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]