Ich bin mit Open GL nicht so sehr vertraut. Trotzdem ein paar Anregungen.
glvertex sieht ja so aus:
void WINAPI glVertex3f(
GLfloat x,
GLfloat y,
GLfloat z
);
A) Demnach findet bei dir praktisch keine Bewegung statt, weil X (dein links/recht) gleich bleibt. Er arbeitet jede Zeile ab, am Anfang steht links, am Ende steht links. Und links bleibt gleich, also auch die Position.
Irgendwie musst du dein Links/Rechts noch dazwischen bringen bzw. anders aufrufen. Das ist hier nicht ersichtlich. (wann wird bei dir der glvertex bereich aufgerufen?)
Im Prinzip muss das ja so geschehen:
positionx = 10
glvertex3f(positionx,...)
Taste links gedrückt: positionx = positionx - 1; // Das hier muss irgendwie dazwischen
glvertex3f(positionx,...)
Taste links gedrückt: positionx = positionx - 1;
Nun ist positionx (X) tatsächlich jeweils eines niedriger geworden.
Ich stelle mir das in etwa so vor (pseudo code):
Code: Alles auswählen
var
int positionx := 100; //startposition
int positiony := 100; //startposition
function bewegung(int x,int y,...ergänzungen): integer
begin
glbegin(gl_QUADS); //Raumschiff
glcolor3f(0,1,0);
glvertex3f(x,y,0);
glend;
end;
procedure TForm1.FormKeyDown(Sender: TObject; Var Key:Word; Shift: TShiftState);
begin
if key =
VK_left then
begin
positionx := positionx-1; // verständlicher als links/rechts; links ist -1 rechts ist +1
bewegung (positionx,positiony,...) // Bewegung gleich bei Tastendruck
end;
if key=
VK_right then
begin
positionx := positionx+1;
bewegung (positionx,positiony,...)
end;
if key=
nach_oben then
begin
positiony := positiony+1;
bewegung (positionx,positiony,...)
end;
...
end;
LG
Epcop