Thema: Delphi OpenGl-Kurs

Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: OpenGl-Kurs

  Alt 7. Mär 2004, 22:58
Zunächst mal ein riesiges DANKÖSCHÖÖÖÖN!!!! Ich habe just vor 3 Tagen entschieden, micht nun endlich mal der 3D-Welt zu stellen, und entschied mich für OGl. Dann fand ich deine Tuts, und habe doch tatsächlich einigermaßen verstanden, worum es geht! Ein gutes deutsches Tut zu finden ist schier unmöglih, und dann auch noch in Delphi. Bist z.Zt. mein ganz persönlicher Held (und das ohne Ironie!)

Dann komme ich auch gleich mal mit einer Frage um die Ecke:
Habe es nun geschafft, es so zu basteln, dass man sich in der Szene wie in üblichen Ego-Shootern zu bewegen (fly-mode), also mit Mouse-Look und W,S,A,D als "Pfeiltasten".
Dann wollte ich zu meinen Würfeln in der Szene ganz gerne ein Licht. Okay, kein Problem, Licht rein, Parameter setzten und glücklich sein. Aber nicht lange . Ich war der festen Überzeugung ein stationäres Licht eingebaut zu haben, aber wenn ich mich durch die Szene bewege, so bewegt sich das Licht in unbestimmter Weise mit (unbestimmt deswegen, weil es kaum nachvollziebar ist, wie es sich nun WIRKLICH bewegt). Das merkt man aber sehr deutlich, da sich die Highlights mit der Kamerabewegung ändern, obwohl die im Gegensatz zu einer Spiegelung ja in erster Linie nix mit der Kameraposition zu tun haben (sollten).

Mal ein Stückchen Code:
Delphi-Quellcode:
procedure TForm1.DrawScene;
var
  i,m: Integer;
const
  light_position : array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glLoadIdentity;
  CheckKeys; // Die diversen Tastendrücke auswerten

    glRotate(RotateY,1,0,0);
    glRotate(RotateX,0,1,0);
    glTranslate(PosX,PosY,PosZ);
    glLightfv(GL_LIGHT0, GL_POSITION, @light_position); // diese Licht SOLLTE stationär sein (zu den GLBoxes), da es in der selben Matrix platziert wird...
    for i := 0 to 9 do for m := 0 to 9 do GLBox[i,m].GLDraw; // ein paar Würfel
    for i := 0 to 9 do for m := 0 to 9 do GLBox2[i,m].GLDraw; // noch ein paar Würfel

  SwapBuffers(h_DC);
  inc(FPS); // Frame-Rate-Counter
end;
Habe schon die wildesten Variationen durch. Aber nix brachte wirklich Erfolg. Was kann ich tun? (Lightmaps, wie in deinem Tut angesprochen, sind für meinen Einsatz etwas "overkill", und Texturen wollte ich erst mal zurückstellen, bis ich den Kram mit der Geometrie im Griff hab.)

Noch was: Wo ist der Unterschied bei Manipulationen der Matrix in:
Code:
glMatrixMode(GL_PROJECTION);
und
glMatrixMode(GL_MODELVIEW);


Vielen heissen Dank nochmal, und schonmal ,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat