Registriert: So Dez 19, 2004 00:27 Beiträge: 454 Wohnort: Nürnberg
Also, ich programmiere gerade mein erstes Spiel, und des laden eines Levels funktioniert schon (WOW )
Jetzt hab ich 2 Probleme:
1. Wenn ich mit den Pfeiltasten darin navigiere dann bewege ich mich nicht AUF dem Punkt, sondern immer UM den Punkt herum (ich sehe also dann immer in die Richtung des Punktes.
Code:
glTranslatef(0,0,-Pos.z);
glRotatef(ax,0,1,0);
das rufe ich vor dem Zeichnen auf, und so berechne ich wie er sich bewegen soll:
Code:
if Key = VK_UP then
pos.z:=pos.z-cos(ay);
if Key = VK_DOWN then
pos.z:=pos.z+cos(ay);
if Key = VK_LEFT then
ax := ax -1;
if Key = VK_RIGHT then
ax := ax +1;
2. Wenn ich mich drehe kann ich "durch" die Wände (also Würfel) schauen, wie kann ich des abstellen bzw. verhindern!
1.Hier dürften ein paar Tip's stehen :
http://www.delphigl.com/script/do_show.php?name=camera&action=2 2. Du solltest nicht nur den z-Wert der Position verändern, sondern auch den x-Wert, sonst bewegst du dich nur entlang der z-Achse.
Ich vermute die Drehung in deinem Fall kommt dadurch zustande, dass du erst Translierst und dann Rotierst. Aufgrund der natur von Matrizen (mit der ich mich nicht auskenn) muss man es aber soweit ich weiß genau andersherum machen.
Bei der aktuellen Methode dürftest du dich immer um einen Punkt drehen(mit links und rechts), wobei du die Distanz mit vorwärts und rückwärts ändern kannst.
3. Vieleicht hilft dir ja dieser Codeabschnitt von meiner Kameraklasse weiter (ich habe mal meine Überlegungen drinstehen lassen, vieleicht nützen sie ja was):
Code:
type
PCamera =^TCamera;
TCamera =packedrecord
pos: TVec3F;
angle : TXY;
end;
{...}
const
AnglechangeFac =180/pi;
procedure TCam_MoveForward(var Camera : TCamera;const Distance : Float);
begin
// /| sin(alpha)= x/D <>sin(alpha)*D =x
// D / | x cos(alpha)= z/D
// /____|
// z
with camera do
begin
withposdo
begin
x := x -sin(angle.y)*Distance;
z := z -cos(angle.y)*Distance;
end;
end;
end;
procedure TCam_Activate(Camera : TCamera);
begin
With Camera do
begin
//sicherstellen, dass der Winkel zwischen 0 und 2*pi liegt [wenn nicht, ist zwar erstmal egal, aber bei größeren Werten sinkt irgendwann die Genauigkeit und noch später könnte es zu fehlern führen)
weände (oder was auch immer) sind ja net schräg dort oder?
wenn sie nach ner reihe sind, dann prüfst du einfach ob do die seite der wand gewechselt hast, wenn ja dann x ODER Z wert zurücksetzen, net beides, sonst kannste net so an der wand dran lang rutschen.
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
die bleiben gleich. denn wenn du jeden renderpass um (0,-5,0) verschiebst, bewegt sich doch nichts.
wenn du aber bei jedem tastendruck auf die pfeil-unten taste ein var y:integer um eins erhöhst und das im renderpass als gltranslatef(0,y,0) umsetzt, bewegst du dich jedesmal ein stück rückwärts. das heisst gltranslate setzt nur einen "globalen vektor", der in deinem renderpass zu den vertexpositionen nur dazugerechnet wird.
hoffe du konntest mir folgen.
wenn nicht: nein, gltranslate verändert nicht deine irgendwo gespeicherten vertexdaten(wie sollte es auch, hat es ja gar keinen zugriff und ausserdem keine ahnung, in welchem format und vor allem wo du deine vertexes speicherst).
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.