struct _player
{
float PozycjaZ;
float PozycjaY;
float PozycjaX;
float angle;
} player;
struct _rect
{
float PozycjaZ, PozycjaY, PozycjaX;
float width, height, length;
} rect;
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TGLForm(Owner)
{
debug_mode=false;
SwobodneObroty=true;
Obracaj(10.0f,0.0f,0.0f);
Caption=(AnsiString)"GLForm, OpenGL "+(char*)glGetString(GL_VERSION);
}
void __fastcall TForm1::RysujScene()
{
glRotatef(0.0, 1.0, 0.0, 0.0); /*wokół OY*/
glTranslatef(PozycjaX+2, PozycjaY, PozycjaZ); /*Przesunięcia*/
float rozmiar1=0.3f;
RysujPlyte(rozmiar1);
StartEngine();
DoEngine();
}
void __fastcall TForm1::RysujPlyte(float krawedz) const /*Utworzenie podłoża*/
{
const float a=krawedz;
glBegin(GL_QUADS);
//tylnia
//dolna
glNormal3f(0,-1,0);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-a,-a,a);
glTexCoord2f(1.0f, 0.0f); glVertex3f(a,-a,a);
glTexCoord2f(0.0f, 0.0f); glVertex3f(a,-a,-a);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-a,-a,-a);
glEnd();
}
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if (Key==VK_ESCAPE) Close();
if (Shift.Empty())
{
switch (Key)
{
case VK_ESCAPE: Close(); break;
case VK_LEFT: PozycjaZ -= 0.1f; break;
case VK_RIGHT: PozycjaZ += 0.1; break;
case VK_UP: PozycjaX += 0.1; break;
case VK_DOWN: PozycjaX -= 0.1; break;
case 'W': PozycjaY += 0.1; break;
if (glIsEnabled(GL_BLEND)) glDisable(GL_BLEND);
else glEnable(GL_BLEND);
}
}
RysujScene();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StartEngine()
{
player.PozycjaZ = 0.0f;
player.PozycjaY = 0.0f;
player.PozycjaX = 0.0f;
rect.PozycjaZ = 0.0f;
rect.PozycjaZ = 0.0f;
rect.PozycjaX = 0.0f;
rect.width = 0.5f;
rect.height = 0.5f;
rect.length = 0.5f;
}
void __fastcall TForm1::DoEngine()
{
if ((PozycjaZ < rect.PozycjaZ + rect.width/2 + 0.1f) && (PozycjaZ > rect.PozycjaZ ))
PozycjaZ = rect.PozycjaZ + rect.width/2 + 0.1f;
if ((PozycjaZ > rect.PozycjaZ - rect.width/2 - 0.1f) && (PozycjaZ < rect.PozycjaZ))
PozycjaZ = rect.PozycjaZ - rect.width/2 - 0.1f;
if ((PozycjaZ < rect.PozycjaZ + rect.width/2) && (PozycjaZ > rect.PozycjaZ - rect.width/2));
if ((PozycjaY < rect.PozycjaY + rect.height/2 + 0.1f) && (PozycjaY > rect.PozycjaY))
PozycjaY = rect.PozycjaY + rect.height/2 + 0.1f;
if ((PozycjaY > rect.PozycjaY - rect.height/2 - 0.1f) && (PozycjaY < rect.PozycjaY))
PozycjaY = rect.PozycjaY - rect.height/2 - 0.1f;
if((PozycjaY < rect.PozycjaY + rect.height/2) && (PozycjaY > rect.PozycjaY - rect.height/2));
if ((PozycjaX < rect.PozycjaX + rect.length/2 + 0.1f) && (PozycjaX > rect.PozycjaX))
PozycjaX = rect.PozycjaX + rect.length/2 + 0.1f;
if ((PozycjaX > rect.PozycjaX - rect.length/2 - 0.1f) && (PozycjaX < rect.PozycjaX))
PozycjaX = rect.PozycjaX - rect.length/2 - 0.1f;
if((PozycjaX < rect.PozycjaX + rect.length/2) && (PozycjaX > rect.PozycjaX - rect.length/2));
}