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

Aktuelle Zeit: Do Jul 17, 2025 15:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 65 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 01:53 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Magellan hat geschrieben:
Also erstmal musst du ZeichneAirport vor ShowText aufrufen. Das liegt daran, dass die Projektionsmodus zum Zeichnen des Textes verändert wird.


Jap, mein Fehler, aber genau das ist es was ein Anfänger wie ich eben einfahc nicht weiss.
Genau deswegen hab ich gefragt ob mir jemand mal den genauen Ablauf der Befehle EINMAL zeigen könnte .

Magellan hat geschrieben:
Außerdem verstehe ich nicht warum du die Negatoren vor den Translationskoordinaten entfernt hast. Die hatten schon ihren Sinn, schließlich willst du die Objekte nicht noch einmal weiter in die Richtung schieben sondern näher zum Betrachter.
Ein weiterer Fehler ist der viel zu hohe Zoom. Versuch' es mal mit -0.1. Damit der Text wieder weiß wird musst du vor'm Zeichnen des Textes wieder glColor aufrufen. Hättest du wie von mir geschrieben auch die Koorinaten deines Punktes entsprechend angepasst, so wäre auch dieser sichtbar gewesen.
Bei mir funktioniert dann zumindest alles.


Natürlich auch richtig, danke, aber das war mir eben auch noch nicht so richtig klar wie das mit dem verschieben funktioniert.
Ich dachte eben man muss die Kamera genau dahin verschieben wo auch der Mittelpunkt ist.

Magellan hat geschrieben:
Ich kann dir nur empfehlen dich mehr mit der Problematik zu beschäftigen und vorallem auch nachzuvollziehen warum wir dir bestimmte Dinge vorschlagen. Vor allem weil die richtigen Vorschläge bereits alle gebracht wurden. Der einzige Fehler, der noch nicht genannt wurde war der Zoomfehler. Und der war wirklich zu finden (vor allem, wenn der Punkt im Zentrum korrekt angezeigt wird).
Bitte verstehe mich nicht falsch aber es wird irgendwann Momente geben wo andere dir vielleicht nicht mehr helfen können und spätestens wenn der Code umfangreicher wird hat keiner mehr wirklich Zeit und Lust sich da erst einzuarbeiten.


Das werd ich natürlich auch machen, keine Frage, aber jeder hat doch mal angefangen oder ?

Ok, soweit dazu. Jetzt funktionierts auch so halbwegs.
Irgendwas stimmt aber trotzdem noch nicht.

Aus irgendeinem Grund ist alles Seitenverkehrt irgendwie.
Dürfte aber ( denke ich zumindest ) eigentlich nicht.

Hier mal das was ich zusammengestoppelt habe :

Code:
  1.  
  2. procedure EDDP(rCenterLat, rCenterLon, scale : real);
  3. var
  4.   r08Lat, r08Lon, r26Lat, r26Lon : real;     // Runway 08/26
  5.   r10Lat, r10Lon, r28Lat, r28Lon : real;     // Runway 10/28
  6. begin
  7.   // RWY 08/26 eine Linie
  8.   r08Lat := 51.431242*scale;
  9.   r08Lon := 12.215825*scale;
  10.   r26Lat := 51.433647*scale;
  11.   r26Lon := 12.267444*scale;
  12.  
  13.   // RWY 10/28 auch eine Linie
  14.   r10Lat := 51.418003*scale;
  15.   r10Lon := 12.209653*scale;
  16.   r28Lat := 51.412067*scale;
  17.   r28Lon := 12.244303*scale;
  18.  
  19.   // Achse X ( Lon ) in Gelb
  20.   glBegin(GL_LINES);
  21.    glColor3F(1,1,0);
  22.     glVertex3F(rCenterLat-0.1,rCenterLon,0);
  23.     glVertex3F(rCenterLat+0.1,rCenterLon,0);
  24.   glEnd;
  25.  
  26.   // Achse Y ( Lat ) in
  27.   glBegin(GL_LINES);
  28.    glColor3F(0,1,1);
  29.     glVertex3F(rCenterLat,rCenterLon-0.1,0);
  30.     glVertex3F(rCenterLat,rCenterLon+0.1,0);
  31.   glEnd;
  32.  
  33.   // Runway 08/26
  34.   glBegin(GL_LINES);
  35.    glColor3F(1,0,0);
  36.     glVertex3F(r08Lat, r08Lon, 0);
  37.    glColor3F(0,1,0);
  38.     glVertex3F(r26Lat, r28Lon, 0);
  39.   glEnd;
  40.  
  41.   // Runway 10/28 in rot
  42.   glBegin(GL_LINES);
  43.    glColor3F(1,0,0);
  44.     glVertex3F(r10Lat, r10Lon, 0);
  45.    glColor3F(0,0,1);
  46.     glVertex3F(r28Lat, r28Lon, 0);
  47.   glEnd;
  48. end;
  49.  
  50. procedure EDDF(rCenterLat, rCenterLon, scale : real);
  51. var
  52.   r07LLat, r07LLon, r25RLat, r25RLon : real;     // Runway 07L/25R
  53.   r07RLat, r07RLon, r25LLat, r25LLon : real;     // Runway 07R/25L
  54.   r18Lat, r18Lon, r36Lat, r36Lon : real;         // Runway 18/36
  55. begin
  56.   // Runway 07L/25R
  57.   r07LLat := 50.032617*scale;
  58.   r07LLon := 8.534631*scale;
  59.   r25RLat := 50.045128*scale;
  60.   r25RLon := 8.586981*scale;
  61.  
  62.   // Runway 07R/25L
  63.   r07RLat := 50.027542*scale;
  64.   r07RLon := 8.534175*scale;
  65.   r25LLat := 50.040053*scale;
  66.   r25LLon := 8.586531*scale;
  67.  
  68.   // Runway 18/36
  69.   r18Lat := 50.034439*scale;
  70.   r18Lon := 8.525928*scale;
  71.   r36Lat := 49.998417*scale;
  72.   r36Lon := 8.526083*scale;
  73.  
  74.   // Achse X ( Lon ) in Gelb
  75.   glBegin(GL_LINES);
  76.    glColor3F(1,1,0);
  77.     glVertex3F(rCenterLat,rCenterLon,0);
  78.     glVertex3F(rCenterLat,rCenterLon+0.1,0);
  79.   glEnd;
  80.   glColor3F(1,1,1);
  81.   Form1.PrintText(rCenterLat,rCenterLon+0.1,0,'X');
  82.  
  83.   // Achse Y ( Lat ) in
  84.   glBegin(GL_LINES);
  85.    glColor3F(0,1,1);
  86.     glVertex3F(rCenterLat,rCenterLon,0);
  87.     glVertex3F(rCenterLat+0.1,rCenterLon,0);
  88.   glEnd;
  89.   glColor3F(1,1,1);
  90.   Form1.PrintText(rCenterLat+0.1,rCenterLon,0,'Y');
  91.  
  92.   // Runway 07R/25L
  93.   glBegin(GL_LINES);
  94.    glColor3F(1,0,0);
  95.     glVertex3F(r07RLat, r07RLon, 0);
  96.    glColor3F(0,1,0);
  97.     glVertex3F(r25LLat, r25LLon, 0);
  98.   glEnd;
  99.   glColor3F(1,1,1);
  100.   Form1.PrintText(r07RLat, r07RLon,0,'07R');
  101.   Form1.PrintText(r25LLat, r25LLon,0,'25L');
  102.  
  103.   // Runway 07L/25R in rot
  104.   glBegin(GL_LINES);
  105.    glColor3F(1,0,0);
  106.     glVertex3F(r07LLat, r07LLon, 0);
  107.    glColor3F(0,0,1);
  108.     glVertex3F(r25RLat, r25RLon, 0);
  109.   glEnd;
  110.   glColor3F(1,1,1);
  111.   Form1.PrintText(r07LLat, r07LLon,0,'07L');
  112.   Form1.PrintText(r25RLat, r25RLon,0,'25R');
  113.  
  114.   // Runway 18/36 in rot/grün
  115.   glBegin(GL_LINES);
  116.    glColor3F(1,0,0);
  117.     glVertex3F(r18Lat, r18Lon, 0);
  118.    glColor3F(0,0,1);
  119.     glVertex3F(r36Lat, r36Lon, 0);
  120.   glEnd;
  121.   glColor3F(1,1,1);
  122.   Form1.PrintText(r18Lat, r18Lon,0,'18');
  123.   Form1.PrintText(r36Lat, r36Lon,0,'36');
  124.  
  125. end;
  126.  
  127. procedure TForm1.Render;
  128. var
  129.   rCenterLat, rCenterLon, rCenterAlt : real; // Airport Center
  130.   scale : real;
  131.   rx, ry, rz : integer;
  132. begin
  133.   scale := tbZoom.Position/10;
  134.  
  135.   // Zentrum des Airports Leipzig
  136.   //rCenterLat := 51.414997*scale;
  137.   //rCenterLon := 12.226944*scale;
  138.  
  139.   // Zentrum des Airports EDDF
  140.   rCenterLat := 50.026422*scale;
  141.   rCenterLon := 8.543125*scale;
  142.  
  143.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  144.  
  145.   glMatrixMode(GL_PROJECTION);
  146.   glLoadIdentity;
  147.   gluPerspective(30.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  148.  
  149.   rx := 0;
  150.   ry := 0;
  151.   rZ := 0;
  152.   if rotX.Checked then
  153.     rx := 1;
  154.   if rotY.Checked then
  155.     ry := 1;
  156.   if rotZ.Checked then
  157.     rZ := 1;
  158.  
  159.   //glRotateF(StrToFloat(edAngle.Text),rx,ry,rz);
  160.   //glRotateF(90,0,1,0);
  161.  
  162.   glMatrixMode(GL_MODELVIEW);
  163.   glLoadIdentity;
  164.  
  165.   glTransLateF(rCenterLat*-1,rCenterLon*-1,-5);
  166.  
  167.   glColor3F(1,1,1);
  168.   //PrintText(rCenterLat,rCenterLon,tbZoom.Position*-1, 'EDDP');
  169.   PrintText(rCenterLat,rCenterLon,tbZoom.Position*-1, 'EDDF');
  170.  
  171.   //EDDP(rCenterLat, rCenterLon, scale);
  172.   EDDF(rCenterLat, rCenterLon, scale);
  173.  
  174.   SwapBuffers(DC);
  175. end;
  176.  


Das mit dem Text bitte einfach ignorieren. Ich weiss, das ist so nicht richtig. Geht aber erst mal damit ich weiss was wo ist und mir nicht immer irgendwelche Farben für die Linien einfallen lassen muss damit ich weiss wo die Anfangen und aufhören.

Also das Problem ist das bei EDDP ( Leipzig ) der Runway 08/26 eigentlich ( sieht man schon an den Koordinaten )
Nördlich , also oberhalb, des Zentrums sein müsste. Is er aber nicht.
Er is aber etwas Links vom Zentrum und der Runway 10/28 etwas rechts vom Zentrum.

WO hab ich denn da jetzt was falsch ?
Ich hab schon glRotatef versucht, aber da verschwindet immer alles.
Wie das bei Leipzig aussehen müsste sieht man ja in einem vorigen Posting auf dem Bild und der aktuelle Quelltext hängt natürlich auch dran falls jemand Lust und Zeit hätte sich den nochmal anzuschauen ?

Könnt Ihr mir bitte nochmal helfen ?

Dank Euch

Ach so, LAT ist bei mir immer Latitude wegen den Geokoordinaten. Das ist dann also X.
LON ist Y, nicht Z weil Z später mal noch die Höhe werden soll.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 09:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
glRotate hat nicht funktioniert, weil du damit schon wieder deine Projektionsmatrix bearbeitest hast.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 11:13 
Offline
DGL Member

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

na ich hab das doch aber an vershciedenen Positionen im Quelltext versucht.
Einmal hier :

Code:
  1.  
  2.   glMatrixMode(GL_PROJECTION);
  3.   glLoadIdentity;
  4.   gluPerspective(30.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  5.  
  6.   rx := 0;
  7.   ry := 0;
  8.   rZ := 0;
  9.   if rotX.Checked then
  10.     rx := 1;
  11.   if rotY.Checked then
  12.     ry := 1;
  13.   if rotZ.Checked then
  14.     rZ := 1;
  15.  
  16.   glRotateF(StrToFloat(edAngle.Text),rx,ry,rz);
  17.   glRotateF(90,0,1,0);
  18.  
  19.   glMatrixMode(GL_MODELVIEW);
  20.   glLoadIdentity;
  21.  
  22.   glTransLateF(rCenterLat*-1,rCenterLon*-1,-5);
  23.  
  24.  


aber hier gings auch nicht :

Code:
  1.  
  2.   glMatrixMode(GL_PROJECTION);
  3.   glLoadIdentity;
  4.   gluPerspective(30.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  5.  
  6.   rx := 0;
  7.   ry := 0;
  8.   rZ := 0;
  9.   if rotX.Checked then
  10.     rx := 1;
  11.   if rotY.Checked then
  12.     ry := 1;
  13.   if rotZ.Checked then
  14.     rZ := 1;
  15.  
  16.   glMatrixMode(GL_MODELVIEW);
  17.   glLoadIdentity;
  18.  
  19.   glRotateF(StrToFloat(edAngle.Text),rx,ry,rz);
  20.   glRotateF(90,0,1,0);
  21.  
  22.   glTransLateF(rCenterLat*-1,rCenterLon*-1,-5);
  23.  


Kannst Du mir nicht mal sagen wo das denn nun hin muss ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 11:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Du willst, dass Z bei dir nach oben zeigt. Also musst du auch um Z rotieren. Außerdem solltest du dir mal ansehen wofür die Parameter bei glRotate stehen, denn ich glaube nicht dass
Code:
  1. glRotatef(StrToFloat(edAngle.Text), rx, ry, rz);

genau das tut, was du davon erwartest.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 12:22 
Offline
DGL Member

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

das mit rx, ry hatte ich doch nur mal ausprobiert weil ich nicht genau wusste an was das liegt.

glRotate( angel, x,y,z) heisst , so wie ich das verstanden habe, das man bei angel den Winkel eingibt und x, y, z kann nur 0 oder 1 sein. bei x = 1 wird um die x Achse rotiert , bei y=1 um Y und bei z=1 um die Z Achse.

Aber wohin das nun gehört hast Du mir nicht verraten.

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 22:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Dann ließ dir bitte nochmal genau die Spezifikation von glRotate durch.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 22:43 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Danke für den Hinweis auf das was ich mir schon x mal durchgelsen habe und doch nicht sdchlauer bin, sorry.

Ich möchte gerne wissen wie das geht wenn ich zuerst glTranslatef(12,51,0) gemacht habe und dann glRotate machen will.

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 23, 2006 22:47 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Auch das steht im Redbook ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 10:30 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Also buch hin oder her, es geht nicht.

Ich hab da drin auch gelesen und das so versucht wie die das machen, aber es geht einfach nicht.
Ich hab da irgendwie immer noch ein Verständnis Problem.

Also hab ich nochmal ( genau nach dieser Vorlage http://wiki.delphigl.com/index.php/Tutorial_quickstart )
ein ganz neues Projekt gemacht.

Es geht auch, solange das objekt bei 0,0,0 gezeichnet wird.

Ich muss es aber an 12,51,0 zeichnen ( als Beispiel ) und dort muss es dann um die X achse gedreht werden.

Also halt mich meinetwegen für zu blöd, aber ich hab wirklich überall gelesen und auch hier in der Wiki alles nochmal gelesen und ich komme immerwieder zu dem gleichen Ergebnis... es geht nicht und ich weiss nicht was ich da nur falsch mache.

Also ich versuchs einfach nochmal und vielleicht kannst Du oder jemand anderes vielleicht nur mal dieses Beispiel hier so ändern das das geht. Vielleicht versteh ich es ja dann.
Das Beispiel ist nun wirklich nicht gross, also keine Einarbeitung in den Code oder so.
Dürfte also nu wirklich kein Problem sein, oder doch ?

Also ich packe es und hier ist auch der code :


Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, DGLopenGL, StdCtrls;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     edAngle: TEdit;
  13.     procedure FormCreate(Sender: TObject);
  14.     procedure FormDestroy(Sender: TObject);
  15.     procedure FormResize(Sender: TObject);
  16.     procedure IdleHandler(Sender: TObject; var Done: Boolean);
  17.   private
  18.     { Private-Deklarationen }
  19.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  20.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  21.     procedure SetupGL;
  22.     procedure Init;
  23.     procedure Render;
  24.     procedure ErrorHandler;
  25.   public
  26.     { Public-Deklarationen }
  27.     DC : HDC;  //Handle auf Zeichenfläche
  28.     RC : HGLRC;//Rendering Context
  29.   end;
  30.  
  31. const
  32.   NearClipping = 1;
  33.   FarClipping  = 1000;
  34.  
  35. var
  36.   Form1: TForm1;
  37.  
  38. implementation
  39.  
  40. {$R *.dfm}
  41. procedure TForm1.SetupGL;
  42. begin
  43.   glClearColor(0, 0, 0, 0);         //Hintergrundfarbe
  44.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  45.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  46. end;
  47.  
  48. procedure TForm1.Init;
  49. begin
  50.  
  51. end;
  52.  
  53. procedure TForm1.FormCreate(Sender: TObject);
  54. begin
  55.   DC:= GetDC(Handle);
  56.   if not InitOpenGL then Application.Terminate;
  57.   RC:= CreateRenderingContext( DC,[opDoubleBuffered],32,24,0,0,0,0);
  58.   ActivateRenderingContext(DC, RC);
  59.   ActivateRenderingContext(DC, RC);
  60.   SetupGL;
  61.   Init;
  62.   Application.OnIdle := IdleHandler;
  63. end;
  64.  
  65. procedure TForm1.FormDestroy(Sender: TObject);
  66. begin
  67.   DeactivateRenderingContext;
  68.   DestroyRenderingContext(RC);
  69.   ReleaseDC(Handle, DC);
  70. end;
  71.  
  72. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  73. begin
  74.   StartTime:= GetTickCount;
  75.   Render;
  76.   DrawTime:= GetTickCount - StartTime;
  77.   Inc(TimeCount, DrawTime);
  78.   Inc(FrameCount);
  79.  
  80.   if TimeCount >= 1000 then begin
  81.     Frames:= FrameCount;
  82.     TimeCount:= TimeCount - 1000;
  83.     FrameCount:= 0;
  84.     Caption:= InttoStr(Frames) + 'FPS';
  85.     ErrorHandler;
  86.   end;
  87.   Done:= false;
  88. end;
  89.  
  90. procedure TForm1.ErrorHandler;
  91. begin
  92.   Form1.Caption := gluErrorString(glGetError);
  93. end;
  94.  
  95. procedure TForm1.Render;
  96. begin
  97.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  98.  
  99.   glMatrixMode(GL_PROJECTION);
  100.   glLoadIdentity;
  101.  
  102.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  103.  
  104.   /// ??????????????????????????????????????
  105.   glTranslatef(-12, -51, -5);
  106.   glRotateF(StrToInt(edAngle.Text),0,1,0);
  107.   /// ??????????????????????????????????????
  108.  
  109.   glMatrixMode(GL_MODELVIEW);
  110.   glLoadIdentity;
  111.  
  112.   glBegin(GL_QUADS);
  113.     glColor3f(1, 0, 0); glVertex3f(12, 51, 0);
  114.     glColor3f(0, 1, 0); glVertex3f(11, 51, 0);
  115.     glColor3f(0, 0, 1); glVertex3f(11, 50, 0);
  116.     glColor3f(1, 1, 0); glVertex3f(12, 50, 0);
  117.   glEnd;
  118.  
  119.   SwapBuffers(DC);
  120. end;
  121.  
  122. procedure TForm1.FormResize(Sender: TObject);
  123. var tmpBool : Boolean;
  124. begin
  125.   glViewport(0, 0, ClientWidth, ClientHeight);
  126.   glMatrixMode(GL_PROJECTION);
  127.   glLoadIdentity;
  128.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  129.  
  130.   glMatrixMode(GL_MODELVIEW);
  131.   glLoadIdentity;
  132.   IdleHandler(Sender, tmpBool);
  133. end;
  134.  
  135.  
  136. end.
  137.  


Matthias


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 10:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Der Fehler ist einfach, dass du deine Matrixmanipulationsfunktionen (glTranslate, glRotate) jedes mal aufs neue auf die Projektionsmatrix anwendest. Dann kann nicht das rauskommen, was du dir davon erhoffst. Das haben wir nun aber auch schon sehr häufig geschrieben.

Deine Renderprozedur sieht dann also in etwa so aus:

Code:
  1. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  2.  
  3. {Diesen Teil hier am besten gleich weglassen. Dann kann dir sowas auch nicht passieren. Du hast es ja bereits in deinem OnResize-Ereignis stehen
  4. glMatrixMode(GL_PROJECTION);
  5. glLoadIdentity;
  6. gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  7. glMatrixMode(GL_MODELVIEW);
  8. }
  9. glLoadIdentity;
  10. glRotatef(45, 0, 0, 1);
  11. glTranslatef(-11.5, -50.5, -5);
  12.  
  13. glBegin(GL_QUADS);
  14. glColor3f(1, 0, 0); glVertex3f(12, 51, 0);
  15. glColor3f(0, 1, 0); glVertex3f(11, 51, 0);
  16. glColor3f(0, 0, 1); glVertex3f(11, 50, 0);
  17. glColor3f(1, 1, 0); glVertex3f(12, 50, 0);
  18. glEnd;
  19.  
  20. SwapBuffers(DC);


Aber genau diese Lösung hattest du bereits selbst schon einmal gepostet.

Du rotierst quasi das Viereck um 45 Grad um Z und ziehst es mittels glTranslatef an dich heran (zentriert).

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 11:07 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallöchen,

genau so hab ich das auch versucht, schonmal irgendwann.
Eben hatte ich auch die Neuinitialisierung der Matrix rausgenommen, obwohl das so in dem Tutorial steht.
Vielleicht kann das ja mal geändert werden. So erspart man sie einige Fragen.

So, ja, das sieht auf den ersten Blick so aus als würde das funktionieren, tuts aber nicht.
Genau das ist das Problem.
Um die Z-Achse geht das prima, aber nicht um die X oder Y-Achse.
Und das ist ja das was ich nicht verstehe ????

Also so geht :
Code:
  1.  
  2.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  3.   glLoadIdentity;
  4.  
  5.   glLoadIdentity;
  6.   glRotatef(45, 0, 0, 1);
  7.   glTranslatef(-11.5, -50.5, -5);
  8.  
  9.   glBegin(GL_QUADS);
  10.     glColor3f(1, 0, 0); glVertex3f(12, 51, 0);
  11.     glColor3f(0, 1, 0); glVertex3f(11, 51, 0);
  12.     glColor3f(0, 0, 1); glVertex3f(11, 50, 0);
  13.     glColor3f(1, 1, 0); glVertex3f(12, 50, 0);
  14.   glEnd;
  15.  
  16.   SwapBuffers(DC);
  17.  


Aber so eben nicht

Code:
  1.  
  2.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  3.   glLoadIdentity;
  4.  
  5.   glLoadIdentity;
  6.   glRotatef(45, 0, 1, 0);
  7.   glTranslatef(-11.5, -50.5, -5);
  8.  
  9.   glBegin(GL_QUADS);
  10.     glColor3f(1, 0, 0); glVertex3f(12, 51, 0);
  11.     glColor3f(0, 1, 0); glVertex3f(11, 51, 0);
  12.     glColor3f(0, 0, 1); glVertex3f(11, 50, 0);
  13.     glColor3f(1, 1, 0); glVertex3f(12, 50, 0);
  14.   glEnd;
  15.  
  16.   SwapBuffers(DC);
  17.  


...und das ist es ja was ich nicht verstehe.

Preisfrage ist ... warum nicht ????

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 11:12 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Cross-Post im Delphi-Forum.
http://www.delphi-forum.de/viewtopic.php?p=337959#337959

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 14:20 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Nur so ne Frage... Aber wozu zwei mal hintereinanders glLoadIdentity aufrufen???

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 14:53 
Offline
DGL Member

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

Uups, das war nur ein Kopierfehler. Is in meinem Testprojekt nicht so.

Matthias

Ps.: geht immer noch nicht. Im Delphiforum gehts weiter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 15:32 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hast du dir das Tool am Ende des Tutorial Matrix2 mal angeguckt. Damit solltest du erstmal rumspielen, dann weißt du wie du die Befehle nacheinander anweden musst.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 65 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 14 Queries | GZIP : On ]