#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <Jpeg.hpp>
#include "GLWektory.h"
#include "Teksturowanie.h"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TGLForm(Owner)
{
ObslugaMyszy=true;
debug_mode=false;
SwobodneObroty=true;
Obracaj(10.0f,0.0f,0.0f);
Caption=(AnsiString)"GLForm, OpenGL "+(char*)glGetString(GL_VERSION);
czyTeksturowacSfere=true;
Teksturowanie=true;
AnsiString nazwyPlikow[TEKSTURY_ILOSC]={"tekstura1.bmp","tekstura2.bmp","tekstura3.bmp","tekstura4.bmp","tekstura5.bmp"};;
glGenTextures(TEKSTURY_ILOSC,Tekstury); //tworzenie tablicy tekstur
for(int i=0;i<TEKSTURY_ILOSC;i++)
{
int TeksturaSzer,TeksturaWys;
unsigned long* Tekstura=WczytajTeksture(nazwyPlikow[i],TeksturaSzer,TeksturaWys);
if (Tekstura!=NULL)
{
glBindTexture(GL_TEXTURE_2D,Tekstury[i]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D,3,TeksturaSzer,TeksturaWys,GL_RGBA,GL_UNSIGNED_BYTE,Tekstura);
delete[] Tekstura; //oryginalne dane sa usuwane
}
}
}
void __fastcall TForm1::RysujScene()
{
glRotatef(Phi3, 0.0, 1.0, 0.0); //wokół OY
gluLookAt(0.0, 0.0, -50.0, 0,0,0, 0,1,0); //położenie kamery
float rozmiar=50.0f;
glTranslatef(0.0, 48.0, -10.0);
RysujPodloze(rozmiar);
float rozmiar1=1.1f;
glTranslatef(-1.0, 0.0-49, 5.0); /*Okreslenie pozycji kuli*/
RysujGLU(rozmiar1);
float rozmiar2=1.1f;
glTranslatef(2.3, 0.0, 0.0); /*Okreslenie pozycji kuli*/
RysujGLU1(rozmiar2);
float rozmiar3=1.1f;
glTranslatef(-1.0, 0.0, -3.0); /*Okreslenie pozycji kuli*/
RysujGLU2(rozmiar3);
float rozmiar4=1.1f;
static float wartosc_x = 0.0;
PozycjaZ1 += 0.02;
glRotatef(Phi1, 0.0, 1.0, 2.0); //wokół OY
glTranslatef(PozycjaX1-0, PozycjaY1, PozycjaZ1-18); /*Okreslenie pozycji kuli*/
RysujGLU3(rozmiar4);
}
void __fastcall TForm1::RysujPodloze(float krawedz) const
{
const float a=krawedz;
glBindTexture(GL_TEXTURE_2D,Tekstury[0]);
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();
glBindTexture(GL_TEXTURE_2D,NULL);
}
void __fastcall TForm1::RysujGLU(float rozmiar)
{
glBindTexture(GL_TEXTURE_2D,Tekstury[1]); /*Piszemy tylko wtedy jeżeli bryła ma być teksturowana*/
glColor3f( 1.0f, 1.0f, 0.0f );
GLUquadricObj* kwadryka=gluNewQuadric();
gluQuadricDrawStyle(kwadryka, GLU_FILL);
{
gluQuadricTexture(kwadryka,GL_TRUE);
}
gluSphere(kwadryka, rozmiar, 50, 50);
gluDeleteQuadric(kwadryka);
}
void __fastcall TForm1::RysujGLU1(float rozmiar)
{
glBindTexture(GL_TEXTURE_2D,Tekstury[2]); /*Piszemy tylko wtedy jeżeli bryła ma być teksturowana*/
glColor3f( 1.0f, 1.0f, 0.0f );
GLUquadricObj* kwadryka=gluNewQuadric();
gluQuadricDrawStyle(kwadryka, GLU_FILL);
{
gluQuadricTexture(kwadryka,GL_TRUE);
}
gluSphere(kwadryka, rozmiar, 50, 50);
gluDeleteQuadric(kwadryka);
}
void __fastcall TForm1::RysujGLU2(float rozmiar)
{
glBindTexture(GL_TEXTURE_2D,Tekstury[3]); /*Piszemy tylko wtedy jeżeli bryła ma być teksturowana*/
glColor3f( 1.0f, 1.0f, 0.0f );
GLUquadricObj* kwadryka=gluNewQuadric();
gluQuadricDrawStyle(kwadryka, GLU_FILL);
{
gluQuadricTexture(kwadryka,GL_TRUE);
}
gluSphere(kwadryka, rozmiar, 50, 50);
gluDeleteQuadric(kwadryka);
}
void __fastcall TForm1::RysujGLU3(float rozmiar)
{
glBindTexture(GL_TEXTURE_2D,Tekstury[4]); /*Piszemy tylko wtedy jeżeli bryła ma być teksturowana*/
glColor3f( 1.0f, 1.0f, 0.0f );
GLUquadricObj* kwadryka=gluNewQuadric();
gluQuadricDrawStyle(kwadryka, GLU_FILL);
{
gluQuadricTexture(kwadryka,GL_TRUE);
}
gluSphere(kwadryka, rozmiar, 50, 50);
gluDeleteQuadric(kwadryka);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
switch (Key)
{
case 'W': PozycjaZ1 = PozycjaZ1 + 1.1; break;
}
RysujScene();
}