Enter your email address:

Delivered by

Uploud File di Ziddu dan dapat uang broo
Uploud File di Deposit Files
Tampilkan postingan dengan label Transformasi 3D. Tampilkan semua postingan
Tampilkan postingan dengan label Transformasi 3D. Tampilkan semua postingan

Kelompok 3 Transformasi 3D

Label: , ,

============================================
= 1. MOKHAMAD IRWAN ALIFI (076403020009)
= 2. SLAMET WAHYU UTOMO (076403020005)
= 3. IRWANTO (070403020031)
= 4. M. NURIL ANWAR (070403020013)
= 5. M. RIDHO SANTOSO (070403020020)
= 6. MIEISA PALUPI (086403020002)
= 7. DWI SUGI P. (076403020006)
= 8. ARIF ARDIASYAH (070403020016)
============================================
Transformasi pada obyek tiga dimensi
Pada obyek tiga dimensi dapat dilakukan 3 transformasi pokok yaitu penggeseran (translation), perputaran (rotasi) , pembesaran (scaling). Adapun jenis transformasi lain adalah pembebanan (shearing), dan pencerminan (mirroring). Didalam program, transformasi ini juga dapat dilakukan dengan mengubah persamaan menjadi operasi matriks 4x4. Adapun persamaan setiap transformasi adalah sebagai berikut.
1. Penggeseran (translation)
( x’, y’,z’ ) = ( Tx +x, Ty +y, Tz +z)
dengan x’,y’, z’ : koordinat hasil transformasi
x,y,z : koordinat titik awal
Tx,Ty, Tz : faktor penggeseran kearah x, y, z
2. Pembesaran (scaling)
( x’,y’,z’ ) = (Sx *x, Sy *y, Sz *z)
dengan Sx,Sy, Sz : faktor pembesaran kearah x, y, z
3. Perputaran (rotation)
a) terhadap sumbu x
( x’,y’, z’ ) = (x , y *cos q +z*sinq, - y *sinq+z*consq)
b) terhadap sumbu y
( x’,y’,z’ ) = ( x *cos q +z*sinq,y , - x *sinq+z*consq)
c) terhadap sumbu z
(x’,y’, z’ ) = ( x *cos q +y*sinq, - x*sinq+y*consq , z )
dengan q : sudut putar berlawanan arah jarum jam

Teknik penampilan obyek 3 dimensi

Pada sistem dua dimensi obyek gambar dua dimensi dapat langsung di aplikasikan pada layar karena memiliki dimensi yang sama, kalaupun ada perbedaan hanya pada arah sumbunya. Koordinat Cartesian memiliki sumbu y arah ke atas, sedangkan koordinat layar sumbu y ke arah bawah. Akan tetapi dengan sedikit modifikasi atau menggunakan fungsi bahasa pemrograman tertentu misalnya Borland C++ 4.0 keatas dengan fungsi terpasang, koordinat layar dapat disesuaikan dengan kordinat kartesian dengan sumbu y ke arah atas. Pada sistem tiga dimensi setiap titik memiliki 3 koordinat yaitu koordinat x, y, dan z, sedangkan layar hanya memiliki sumbu x dan y. Oleh karena itu diperlukan transformasi dari koordinat tiga dimensi atau disebut dengan koordinat dunia menjadi koordinat dua dimensi. Beberapa metode untuk menampilkan efek tiga dimensi pada layar dua dimensi selain metode kamera sintetis yaitu proyeksi paralel, dan proyeksi perspektif.

a. Proyeksi Paralel

Proyeksi paralel merupakan teknik dasar untuk penyajian obyek tiga dimensi pada layar dua dimensi, yang bertumpu pada 3 sudut pandang. Pandangan depan, pandangan samping dan pandangan atas. Contoh proyeksi paralel seperti pada gambar 1. Untuk menggambarkan proyeksi paralel dalam tiga dimensi diperlukan beberapa sudut pandang minimal atas, samping dan depan kemudian di proyeksikan dalam koordinat tiga dimensi sehingga seperti terlihat pada gambar

Proyeksi parallel merupakan teknik yang relatif sederhana tetapi gambar yang ditampilkan masih sulit untuk dibayangkan sebagai image tiga dimensi, seperti pada gambar 1. Untuk itu dikembangkan cara lain yaitu dengan teknik proyeksi perspektif seperti pada gambar 2.

b. Proyeksi Perspektif


Proyeksi perspektif adalah bentuk gambar tiga dimensi seperti yang dilihat pada kenyataan sesungguhnya seperti yang terlihat oleh mata manusia ataupun kamera. Teknik ini lebih menggambarkan keadaan yang sesungguhnya tetapi untuk obyek dalam bentuk gambar rangka (wire frame) untuk kedalaman tertentu dapat menimbulkan dualisme gambar. Misalnya bagian yang terkesan didalam kadang-kadang juga terkesan di luar.

c. Kamera sintetis

Metode pendekatan yang telah dibahas dengan teknik proyeksi diatas masih belum mampu menghasilkan efek 3 dimensi dengan baik. Pada proyeksi paralel yang terlihat oleh pengamat hanyalah bagian depan obyek sedang bagian yang lebih jauh untuk posisi x, dan y yang sama tak terlihat. Sedangkan pada proyeksi perspektif mata harus terletak pada sumbu koordinat z, yang berarti bidang pandang harus berimpit dengan bidang koordinat, misalnya xy. Dengan ketentuan ini maka penyajian obyek tiga dimensi menjadi terbatas. Untuk mengatasi hal tersebut sebelum diproyeksikan diperlukan proses transformasi rotasi sehingga suatu obyek dapat dipandang dari berbagai posisi, atas, bawah, samping dan lain sebagainya. Terdapat dua cara yang identik untuk memandang suatu obyek dari berbagai sisi yakni bidang pandang (view plane) pada posisi tetap, obyek diputar atau bidang pandang berputar sedangkan obyek tetap. Bila digunakan cara kedua dengan bidang pandang dianggap sebagai film dalam kamera, maka suatu obyek dapat di pandang dari berbagai sisi dengan menggerakkan dan memutar kamera. Metode ini sering disebut dengan metode kamera sitetis (synthetic camera) seperti pada gambar 3.


Contoh menggunakan Delphi 7

Screen Shoot



Script :



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;
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);
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(true,true,1.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;
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;

end.



Download Sample Program

Download Program Source





Kelompok 1 Transformasi 3D

Label:

GAMBAR TRANFORMASI 3D







































unit Unit1;


interface
....
....
var
Form1: TForm1;
scr : tbitmap;
implementation
uses math,tridi;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
scr:=tbitmap.create;
scr.width:=320;
scr.height:=240;
scr.PixelFormat:=pf32bit;
end;

end.

{$i getresult}
var scene:tscene;
gruplampu:tlightgroup;
lampu:array[0..10] of tbaselight;
tank:tobj3d;
procedure initgame;
begin
tank:=tobj3d.create;
loadmodel(tank,'tank1.obj',0);

textures[0]:=ttexture.createsolid($ffffff);

scene:=tscene.create(320,240);

gruplampu:=tlightgroup.create(scene,255,255,255);
lampu[0]:=tsunlight.create(gruplampu,-50,50,-200,50,0);

end;
procedure gameloop;
begin
scene.reset;
scene.addlights(gruplampu);
camx:=0;
camy:=0;
camz:=-1000;
tank.rotate(1,0,0);
tank.submit;
scene.uploadgeom(@vertexs[0],@faces[0],wnv,wnf);
scene.drawscene(true,1+2);
scene.uploadlight;
scene.modulate;
end;

// kode ditambahkan pada form create
procedure TForm1.FormCreate(Sender: TObject);
begin
scr:=tbitmap.create;
scr.width:=320;
scr.height:=240;
scr.PixelFormat:=pf32bit;
initgame;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
gameloop;
getresult(scr,scene);
canvas.Draw(0,0,scr);
end;



Kelompok 2 program 3 dimensi

Label:

Pendahuluan

Salah satu bentuk perkembangan terakhir penerapan komputer dalam

bidang grafika adalah pada aplikasi simulasi obyek tiga dimensi atau lebih

dikenal dengan sebutan kenyataan semu (virtual reality-VR). Aplikasi ini

dijumpai pada berbagai bidang dari yang sifatnya hiburan, rancang-bangun,

sampai pada simulasi untuk keperluan riset ilmiah.

Untuk mendukung adanya VR selain diperlukan suatu metode untuk

memvisualisasikan obyek 3 dimensi pada layar 2 dimensi juga didukung

perangkat keras berupa monitor yang langsung dipakai seperti memakai

kacamata dan sensor-sensor yang dipakai oleh pemakai.

Pada implementasi yang lebih sederhana dapat digunakan komputer yang

dipakai sehari-hari dengan layar monitor sebagai media penampil dan

berbagai alat input yang umum dipakai misalnya keyboard, mouse, joystick,

dan lain sebagainya.

Untuk menampilkan efek 3 dimensi pada layar 2 dimensi dengan

animasinya dapat digunakan metode analogi kamera sintetis. Dengan

metode ini suatu obyek nyata dapat dipandang dari kamera dari berbagai

jarak dan sudut pandang. Dengan mengubah jarak, sudut, dan arah

pandang akan didapatkan efek gambar dan animasi 3 dimensi di layar

kamera dari suatu obyek.

Pada implementasinya, agar didapatkan kinerja yang optimum, setiap

bagian dari obyek dibagi menjadi poligon-poligon, sehingga titik-titik yang

diproses merupakan titik acuannya saja dan setiap titik dibentuk poligon dan

diberi warna dengan kecerahan sesuai dengan posisi terhadap sumber

cahaya sintetis. Dengan demikian kualitas gambar semakin baik bila

kerapatan poligon persatuan luas semamin tinggi dengan konsekwensi beban

memori menjadi lebih tinggi dan kecepatan proses rendah, sehingga animasi

lebih kasar.

Visualisasi obyek 3 dimensi dengan komputer ini memungkinkan suatu

obyek 3 dimensi dapat dimanipulasi dan hasilnya dapat langsung terlihat

secara visual. Selain itu suatu obyek juga dapat dilihat dari berbagai jarak

dan sudut pandang serta dapat dilihat pula dalam bentuk kerangka (wire

frame) maupun solid dengan demikian apa yang terlihat lebih mendekati

pada obyek yang sesungguhnya.

Transformasi pada obyek tiga dimensi

Pada obyek tiga dimensi dapat dilakukan 3 transformasi pokok yaitu

penggeseran (translation), perputaran (rotasi) , pembesaran (scaling).

Adapun jenis transformasi lain adalah pembebanan (shearing), dan

pencerminan (mirroring). Didalam program, transformasi ini juga dapat

dilakukan dengan mengubah persamaan menjadi operasi matriks 4x4.

Adapun persamaan setiap transformasi adalah sebagai berikut.

1. Penggeseran (translation)

( x, y,z) = ( Tx +x, Ty +y, Tz +z)

dengan x,y, z: koordinat hasil transformasi

x,y,z : koordinat titik awal

Tx,Ty, Tz : faktor penggeseran kearah x, y, z

2. Pembesaran (scaling)

( x,y,z) = (Sx *x, Sy *y, Sz *z)

dengan Sx,Sy, Sz : faktor pembesaran kearah x, y, z

3. Perputaran (rotation)

a) terhadap sumbu x

( x,y, z) = (x , y *cos q +z*sinq, - y *sinq+z*consq)

b) terhadap sumbu y

( x,y,z) = ( x *cos q +z*sinq,y , - x *sinq+z*consq)

c) terhadap sumbu z

(x,y, z) = ( x *cos q +y*sinq, - x*sinq+y*consq , z )

dengan q : sudut putar berlawanan arah jarum jam

Teknik penampilan obyek 3 dimensi

Pada sistem dua dimensi obyek gambar dua dimensi dapat langsung di

aplikasikan pada layar karena memiliki dimensi yang sama, kalaupun ada

perbedaan hanya pada arah sumbunya. Koordinat Cartesian memiliki sumbu

y arah ke atas, sedangkan koordinat layar sumbu y ke arah bawah. Akan

tetapi dengan sedikit modifikasi atau menggunakan fungsi bahasa

pemrograman tertentu misalnya Borland C++ 4.0 keatas dengan fungsi

terpasang, koordinat layar dapat disesuaikan dengan kordinat kartesian

dengan sumbu y ke arah atas.

Pada sistem tiga dimensi setiap titik memiliki 3 koordinat yaitu koordinat

x, y, dan z, sedangkan layar hanya memiliki sumbu x dan y. Oleh karena itu

diperlukan transformasi dari koordinat tiga dimensi atau disebut dengan

koordinat dunia menjadi koordinat dua dimensi.

Beberapa metode untuk menampilkan efek tiga dimensi pada layar dua

dimensi selain metode kamera sintetis yaitu proyeksi paralel, dan proyeksi

perspektif.

a. Proyeksi paralel

Proyeksi paralel merupakan teknik dasar untuk penyajian obyek tiga

dimensi pada layar dua dimensi, yang bertumpu pada 3 sudut pandang.

Pandangan depan, pandangan samping dan pandangan atas. Contoh

proyeksi paralel seperti pada gambar 1.

Untuk menggambarkan proyeksi paralel dalam tiga dimensi

diperlukan beberapa sudut pandang minimal atas, samping dan depan

kemudian di proyeksikan dalam koordinat tiga dimensi sehingga seperti

terlihat pada :




Proyeksi parallel merupakan teknik yang relatif sederhana tetapi

gambar yang ditampilkan masih sulit untuk dibayangkan sebagai image

tiga dimensi, seperti pada gambar 1. Untuk itu dikembangkan cara lain

yaitu dengan teknik proyeksi perspektif seperti pada gambar 2.

b. Proyeksi perspektif



Proyeksi perspektif adalah bentuk gambar tiga dimensi seperti

yang dilihat pada kenyataan sesungguhnya seperti yang terlihat oleh

mata manusia ataupun kamera. Teknik ini lebih menggambarkan

keadaan yang sesungguhnya tetapi untuk obyek dalam bentuk gambar

rangka ( wire frame) untuk kedalaman tertentu dapat menimbulkan

dualisme gambar. Misalnya bagian yang terkesan didalam kadang-kadang

juga terkesan di luar.


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;
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);
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(true,true,1.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);


fKubus.Draw;
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;

end.


Download Program Lengkap





ShoutMix chat widget