Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Main;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- OpenGL, MyOpenGL, Mesh, StdCtrls, ExtCtrls, ComCtrls,Transf3D;
- type
- TForm1 = class(TForm)
- Panel1: TPanel;
- GroupBox1: TGroupBox;
- ETRZ: TEdit;
- ETRY: TEdit;
- ETRX: TEdit;
- Trx: TLabel;
- Label1: TLabel;
- Label2: TLabel;
- TranslasiBtn: TButton;
- GroupBox2: TGroupBox;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- ESZ: TEdit;
- ESY: TEdit;
- ESX: TEdit;
- SkalaBtn: TButton;
- GroupBox3: TGroupBox;
- Label7: TLabel;
- Label8: TLabel;
- Label9: TLabel;
- Label10: TLabel;
- ERZ: TEdit;
- ERY: TEdit;
- ERX: TEdit;
- RotasiBtn: TButton;
- ESudut: TEdit;
- VertexView: TListView;
- Label6: TLabel;
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Memo1: TMemo;
- procedure FormCreate(Sender: TObject);
- procedure FormPaint(Sender: TObject);
- procedure TranslasiBtnClick(Sender: TObject);
- procedure SkalaBtnClick(Sender: TObject);
- procedure RotasiBtnClick(Sender: TObject);
- procedure FormResize(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- private
- { Private declarations }
- ftrx, ftry, ftrz:real;
- frx, fry, frz:real;
- fsx,fsy,fsz:real;
- fsudut:real;
- fmode_transformasi:byte;
- fKubus:TKubus;
- fTransf:TTransf3D;
- procedure AmbilVertex;
- procedure TransformVertex;
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.DFM}
- const
- TRANSF_TRANSLASI = 0;
- TRANSF_ROTASI = 1;
- TRANSF_SKALA = 2;
- procedure TForm1.TransformVertex;
- var
- index:integer;
- vp,v:TVertex3D;
- begin
- for index:=0 to fKubus.VertexCount-1 do
- begin
- v:=fKubus.Vertex[index];
- fTransf.Transform(v.vertex, vp.vertex);
- fKubus.ChangeVertex(index,vp.vertex.x, vp.vertex.y, vp.vertex.z);
- end;
- end;
- procedure TForm1.AmbilVertex;
- var
- index:integer;
- item:TListItem;
- begin
- //bersihkan VertexView
- VertexView.Items.Clear;
- for index:=0 to fKubus.VertexCount-1 do
- begin
- item:=VertexView.Items.Add;
- with fKubus do
- begin
- item.Caption:= Format('%2.2f',[Vertex[index].vertex.x]);
- item.SubItems.Add(Format('%2.2f',[Vertex[index].vertex.y]));
- item.SubItems.Add(Format('%2.2f',[Vertex[index].vertex.z]));
- end;
- end;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- fKubus:=TKUbus.Create(false,true,4.0,1.0,0.0);
- fKubus.ChangeColor(KUBUS_ATAS,1.0,0.0,0.0);
- fTransf:=TTransf3D.Create;
- ftrx:=0;
- ftry:=0;
- ftrz:=0;
- frx:=0;
- fry:=0;
- frz:=0;
- fsx:=0;
- fsy:=0;
- fsz:=0;
- fmode_transformasi:=9;
- glDC:=GetDC(Handle);
- InitOpenGL(glDC);
- Axis3D:=TAxis3D.Create;
- glEnable(GL_DEPTH_TEST);
- // glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
- glViewport(Panel1.Width,0,Width-Panel1.Width,Height-Memo1.Height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- gluPerspective(45, (width - Panel1.Width)/height,1.0, 100.0);
- gluLookAt(3.0, 2.0, 3.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- end;
- procedure TForm1.FormPaint(Sender: TObject);
- var
- index:integer;
- v,vp:TPoint3D;
- begin
- glClearCOlor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- { glLoadIdentity;
- case fmode_transformasi of
- TRANSF_TRANSLASI : glTranslatef(ftrx,ftry,ftrz);
- TRANSF_ROTASI : glRotatef(fsudut, frx, fry, frz);
- TRANSF_SKALA : glScalef(fsx,fsy,fsz);
- end;}
- //fKubus.Draw;
- // -- untuk membuat objek limas --
- glPushMatrix();
- glColorMaterial(GL_FRONT, GL_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- glColor3fv(red);
- glRotatef(angle, X,Y,Z);
- glBegin(GL_TRIANGLES);
- glNormal3f(1,0,1);
- // first triangle
- glVertex3f(1,0,1); //
- glNormal3f(0,2,0); //
- glVertex3f(0,2,0); //
- glNormal3f(-1,0,1); //
- glVertex3f(-1,0,1); //
- glNormal3f(-1,0,1);
- // second triangle
- glVertex3f(-1,0,1); //
- glNormal3f(0,2,0); //
- glVertex3f(0,2,0); //
- glNormal3f(-1,0,-1); //
- glVertex3f(-1,0,-1); //
- glNormal3f(-1,0,-1);
- // third triangle
- glVertex3f(-1,0,-1); //
- glNormal3f(0,2,0); //
- glVertex3f(0,2,0); //
- glNormal3f(1,0,-1); //
- glVertex3f(1,0,-1); //
- glNormal3f(1,0,-1);
- // last triangle
- glVertex3f(1,0,-1); //
- glNormal3f(0,2,0); //
- glVertex3f(0,2,0); //
- glNormal3f(1,0,1); //
- glVertex3f(1,0,1); //
- glEnd();
- {we also have to draw a square for the bottom of the pyramid so that as it rotates
- we wont be able see inside of it but all a square is is two triangle put together}
- glColor3fv(green);
- glBegin(GL_TRIANGLES);
- glNormal3f(-1,0,1);
- glVertex3f(-1,0,1);
- glNormal3f(-1,0,-1);
- glVertex3f(-1,0,-1);
- glNormal3f(1,0,1);
- glVertex3f(1,0,1);
- glNormal3f(1,0,1);
- glVertex3f(1,0,1);
- glNormal3f(-1,0,-1);
- glVertex3f(-1,0,-1);
- glNormal3f(1,0,-1);
- glVertex3f(1,0,-1);
- glEnd();
- glDisable(GL_COLOR_MATERIAL);
- glPopMatrix();
- // -- End untuk membuat obejek limas
- Axis3D.Draw;
- glFlush;
- //update daftar vertex
- AmbilVertex;
- end;
- procedure TForm1.TranslasiBtnClick(Sender: TObject);
- begin
- ftrx:=StrToFloat(ETRX.Text);
- ftry:=StrToFloat(ETRY.Text);
- ftrz:=StrToFloat(ETRZ.Text);
- fmode_transformasi:=TRANSF_TRANSLASI;
- fTransf.ClearTransformation;
- fTransf.Translation(ftrx,ftry,ftrz);
- TransformVertex;
- Repaint;
- end;
- procedure TForm1.SkalaBtnClick(Sender: TObject);
- begin
- fsx:=StrToFloat(ESX.Text);
- fsy:=StrToFloat(ESY.Text);
- fsz:=StrToFloat(ESZ.Text);
- fmode_transformasi:=TRANSF_SKALA;
- fTransf.ClearTransformation;
- fTransf.Scaling(fsx,fsy,fsz,0,0,0);
- TransformVertex;
- Repaint;
- end;
- procedure TForm1.RotasiBtnClick(Sender: TObject);
- begin
- frx:=StrToFloat(ERX.Text);
- fry:=StrToFloat(ERY.Text);
- frz:=StrToFloat(ERZ.Text);
- fsudut:=StrToFloat(ESudut.Text);
- fmode_transformasi:=TRANSF_ROTASI;
- fTransf.ClearTransformation;
- fTransf.Rotation(fsudut,frx,fry,frz);
- TransformVertex;
- Repaint;
- end;
- procedure TForm1.FormResize(Sender: TObject);
- begin
- glViewport(Panel1.Width,0,Width-Panel1.Width,Height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- gluPerspective(45, (width - Panel1.Width)/height,1.0, 100.0);
- gluLookAt(8.0, 4.0, 9.0,
- 0.0, 0.0, 0.0,
- 0.0, 1.0, 0.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- Repaint;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- //perintah reset TRANSLASI
- FormCreate( Sender);
- FormResize(Sender);
- FormPaint(Sender);
- ETRX.Text:='0';
- ETRY.Text:='0';
- ETRZ.Text:='0';
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- //reset rotasi
- FormCreate(Sender);
- FormPaint(Sender);
- FormResize(Sender);
- ERX.Text:='0';
- ERY.Text:='0';
- ERZ.Text:='0';
- ESudut.Text:='0';
- end;
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- //reset skala
- FormCreate(Sender);
- FormResize(Sender);
- FormPaint(Sender);
- ESX.Text:='0';
- ESY.Text:='0';
- ESZ.Text:='0';
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment