Ardianta_Pargo

Main.pas

Jun 12th, 2014
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.08 KB | None | 0 0
  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   OpenGL, MyOpenGL, Mesh, StdCtrls, ExtCtrls, ComCtrls,Transf3D;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Panel1: TPanel;
  12.     GroupBox1: TGroupBox;
  13.     ETRZ: TEdit;
  14.     ETRY: TEdit;
  15.     ETRX: TEdit;
  16.     Trx: TLabel;
  17.     Label1: TLabel;
  18.     Label2: TLabel;
  19.     TranslasiBtn: TButton;
  20.     GroupBox2: TGroupBox;
  21.     Label3: TLabel;
  22.     Label4: TLabel;
  23.     Label5: TLabel;
  24.     ESZ: TEdit;
  25.     ESY: TEdit;
  26.     ESX: TEdit;
  27.     SkalaBtn: TButton;
  28.     GroupBox3: TGroupBox;
  29.     Label7: TLabel;
  30.     Label8: TLabel;
  31.     Label9: TLabel;
  32.     Label10: TLabel;
  33.     ERZ: TEdit;
  34.     ERY: TEdit;
  35.     ERX: TEdit;
  36.     RotasiBtn: TButton;
  37.     ESudut: TEdit;
  38.     VertexView: TListView;
  39.     Label6: TLabel;
  40.     Button1: TButton;
  41.     Button2: TButton;
  42.     Button3: TButton;
  43.     Memo1: TMemo;
  44.     procedure FormCreate(Sender: TObject);
  45.     procedure FormPaint(Sender: TObject);
  46.     procedure TranslasiBtnClick(Sender: TObject);
  47.     procedure SkalaBtnClick(Sender: TObject);
  48.     procedure RotasiBtnClick(Sender: TObject);
  49.     procedure FormResize(Sender: TObject);
  50.     procedure Button1Click(Sender: TObject);
  51.     procedure Button2Click(Sender: TObject);
  52.     procedure Button3Click(Sender: TObject);
  53.   private
  54.     { Private declarations }
  55.     ftrx, ftry, ftrz:real;
  56.     frx, fry, frz:real;
  57.     fsx,fsy,fsz:real;
  58.     fsudut:real;
  59.     fmode_transformasi:byte;
  60.     fKubus:TKubus;
  61.     fTransf:TTransf3D;
  62.     procedure AmbilVertex;
  63.     procedure TransformVertex;
  64.   public
  65.     { Public declarations }
  66.   end;
  67.  
  68. var
  69.   Form1: TForm1;
  70.  
  71. implementation
  72.  
  73. {$R *.DFM}
  74.  
  75. const
  76.  TRANSF_TRANSLASI = 0;
  77.  TRANSF_ROTASI = 1;
  78.  TRANSF_SKALA = 2;
  79.  
  80. procedure TForm1.TransformVertex;
  81. var
  82.  index:integer;
  83.  vp,v:TVertex3D;
  84. begin
  85. for index:=0 to fKubus.VertexCount-1 do
  86.  begin
  87.   v:=fKubus.Vertex[index];
  88.   fTransf.Transform(v.vertex, vp.vertex);
  89.   fKubus.ChangeVertex(index,vp.vertex.x, vp.vertex.y, vp.vertex.z);
  90.  end;
  91. end;
  92.  
  93. procedure TForm1.AmbilVertex;
  94. var
  95.  index:integer;
  96.  item:TListItem;
  97. begin
  98.  //bersihkan VertexView
  99.  VertexView.Items.Clear;
  100.  for index:=0 to fKubus.VertexCount-1 do
  101.   begin
  102.    item:=VertexView.Items.Add;
  103.    with fKubus do
  104.     begin
  105.      item.Caption:= Format('%2.2f',[Vertex[index].vertex.x]);
  106.      item.SubItems.Add(Format('%2.2f',[Vertex[index].vertex.y]));
  107.      item.SubItems.Add(Format('%2.2f',[Vertex[index].vertex.z]));
  108.     end;
  109.   end;
  110. end;
  111.  
  112. procedure TForm1.FormCreate(Sender: TObject);
  113. begin
  114.  
  115.  fKubus:=TKUbus.Create(false,true,4.0,1.0,0.0);
  116.  fKubus.ChangeColor(KUBUS_ATAS,1.0,0.0,0.0);
  117.  fTransf:=TTransf3D.Create;
  118.  
  119.  ftrx:=0;
  120.  ftry:=0;
  121.  ftrz:=0;
  122.  
  123.  frx:=0;
  124.  fry:=0;
  125.  frz:=0;
  126.  
  127.  fsx:=0;
  128.  fsy:=0;
  129.  fsz:=0;
  130.  fmode_transformasi:=9;
  131.  
  132.  glDC:=GetDC(Handle);
  133.  InitOpenGL(glDC);
  134.  Axis3D:=TAxis3D.Create;
  135.  glEnable(GL_DEPTH_TEST);
  136. // glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
  137.  
  138.  glViewport(Panel1.Width,0,Width-Panel1.Width,Height-Memo1.Height);
  139.  
  140.  glMatrixMode(GL_PROJECTION);
  141.  glLoadIdentity;
  142.  
  143.  gluPerspective(45, (width - Panel1.Width)/height,1.0, 100.0);
  144.  gluLookAt(3.0, 2.0, 3.0,
  145.            0.0, 0.0, 0.0,
  146.            0.0, 1.0, 0.0);
  147.  glMatrixMode(GL_MODELVIEW);
  148.  glLoadIdentity;
  149. end;
  150.  
  151. procedure TForm1.FormPaint(Sender: TObject);
  152. var
  153.  index:integer;
  154.  v,vp:TPoint3D;
  155. begin
  156.  glClearCOlor(0.0, 0.0, 0.0, 0.0);
  157.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  158. { glLoadIdentity;
  159.  case fmode_transformasi of
  160.   TRANSF_TRANSLASI : glTranslatef(ftrx,ftry,ftrz);
  161.   TRANSF_ROTASI    : glRotatef(fsudut, frx, fry, frz);
  162.   TRANSF_SKALA     : glScalef(fsx,fsy,fsz);
  163.  end;}
  164.  
  165.  //fKubus.Draw;
  166.  
  167.  // -- untuk membuat objek limas --
  168.   glPushMatrix();
  169.     glColorMaterial(GL_FRONT, GL_DIFFUSE);
  170.     glEnable(GL_COLOR_MATERIAL);
  171.     glColor3fv(red);
  172.     glRotatef(angle, X,Y,Z);
  173.    
  174.     glBegin(GL_TRIANGLES);
  175.         glNormal3f(1,0,1);
  176. // first triangle
  177.         glVertex3f(1,0,1); //
  178.         glNormal3f(0,2,0); //
  179.         glVertex3f(0,2,0); //
  180.         glNormal3f(-1,0,1); //
  181.         glVertex3f(-1,0,1); //
  182.         glNormal3f(-1,0,1);
  183. // second triangle
  184.         glVertex3f(-1,0,1); //
  185.         glNormal3f(0,2,0); //
  186.         glVertex3f(0,2,0); //
  187.         glNormal3f(-1,0,-1); //
  188.         glVertex3f(-1,0,-1); //
  189.         glNormal3f(-1,0,-1);
  190. // third triangle
  191.         glVertex3f(-1,0,-1); //
  192.         glNormal3f(0,2,0); //
  193.         glVertex3f(0,2,0); //
  194.         glNormal3f(1,0,-1); //
  195.         glVertex3f(1,0,-1); //
  196.         glNormal3f(1,0,-1);
  197. // last triangle
  198.         glVertex3f(1,0,-1); //
  199.         glNormal3f(0,2,0); //
  200.         glVertex3f(0,2,0); //
  201.         glNormal3f(1,0,1); //
  202.         glVertex3f(1,0,1); //
  203.     glEnd();
  204.    
  205.     {we also have to draw a square for the bottom of the pyramid so that as it rotates
  206.     we wont be able see inside of it but all a square is is two triangle put together}
  207.    
  208.     glColor3fv(green);
  209.     glBegin(GL_TRIANGLES);
  210.         glNormal3f(-1,0,1);
  211.         glVertex3f(-1,0,1);
  212.         glNormal3f(-1,0,-1);
  213.         glVertex3f(-1,0,-1);
  214.         glNormal3f(1,0,1);
  215.         glVertex3f(1,0,1);
  216.         glNormal3f(1,0,1);
  217.         glVertex3f(1,0,1);
  218.         glNormal3f(-1,0,-1);
  219.         glVertex3f(-1,0,-1);
  220.         glNormal3f(1,0,-1);
  221.         glVertex3f(1,0,-1);
  222.     glEnd();
  223.     glDisable(GL_COLOR_MATERIAL);
  224.     glPopMatrix();
  225.  // -- End untuk membuat obejek limas
  226.  
  227.  Axis3D.Draw;
  228.  glFlush;
  229.  //update daftar vertex
  230.  AmbilVertex;
  231. end;
  232.  
  233. procedure TForm1.TranslasiBtnClick(Sender: TObject);
  234. begin
  235.  ftrx:=StrToFloat(ETRX.Text);
  236.  ftry:=StrToFloat(ETRY.Text);
  237.  ftrz:=StrToFloat(ETRZ.Text);
  238.  fmode_transformasi:=TRANSF_TRANSLASI;
  239.  fTransf.ClearTransformation;
  240.  fTransf.Translation(ftrx,ftry,ftrz);
  241.  TransformVertex;
  242.  Repaint;
  243. end;
  244.  
  245. procedure TForm1.SkalaBtnClick(Sender: TObject);
  246. begin
  247.  fsx:=StrToFloat(ESX.Text);
  248.  fsy:=StrToFloat(ESY.Text);
  249.  fsz:=StrToFloat(ESZ.Text);
  250.  fmode_transformasi:=TRANSF_SKALA;
  251.  fTransf.ClearTransformation;
  252.  fTransf.Scaling(fsx,fsy,fsz,0,0,0);
  253.  TransformVertex;
  254.  Repaint;
  255. end;
  256.  
  257. procedure TForm1.RotasiBtnClick(Sender: TObject);
  258. begin
  259.  frx:=StrToFloat(ERX.Text);
  260.  fry:=StrToFloat(ERY.Text);
  261.  frz:=StrToFloat(ERZ.Text);
  262.  fsudut:=StrToFloat(ESudut.Text);
  263.  fmode_transformasi:=TRANSF_ROTASI;
  264.  fTransf.ClearTransformation;
  265.  fTransf.Rotation(fsudut,frx,fry,frz);
  266.  TransformVertex;
  267.  Repaint;
  268. end;
  269.  
  270. procedure TForm1.FormResize(Sender: TObject);
  271. begin
  272.  glViewport(Panel1.Width,0,Width-Panel1.Width,Height);
  273.  
  274.  glMatrixMode(GL_PROJECTION);
  275.  glLoadIdentity;
  276.  
  277.  gluPerspective(45, (width - Panel1.Width)/height,1.0, 100.0);
  278.  gluLookAt(8.0, 4.0, 9.0,
  279.            0.0, 0.0, 0.0,
  280.            0.0, 1.0, 0.0);
  281.  glMatrixMode(GL_MODELVIEW);
  282.  glLoadIdentity;
  283.  Repaint;
  284. end;
  285.  
  286. procedure TForm1.Button1Click(Sender: TObject);
  287. begin
  288. //perintah reset TRANSLASI
  289.       FormCreate( Sender);
  290.       FormResize(Sender);
  291.       FormPaint(Sender);
  292.       ETRX.Text:='0';
  293.       ETRY.Text:='0';
  294.       ETRZ.Text:='0';
  295.  
  296. end;
  297.  
  298. procedure TForm1.Button2Click(Sender: TObject);
  299. begin
  300. //reset rotasi
  301.    FormCreate(Sender);
  302.    FormPaint(Sender);
  303.    FormResize(Sender);
  304.    ERX.Text:='0';
  305.    ERY.Text:='0';
  306.    ERZ.Text:='0';
  307.    ESudut.Text:='0';
  308. end;
  309.  
  310. procedure TForm1.Button3Click(Sender: TObject);
  311. begin
  312. //reset skala
  313.   FormCreate(Sender);
  314.   FormResize(Sender);
  315.   FormPaint(Sender);
  316.   ESX.Text:='0';
  317.   ESY.Text:='0';
  318.   ESZ.Text:='0';
  319. end;
  320.  
  321. end.
Advertisement
Add Comment
Please, Sign In to add comment