Simulasi Sistem Penembakan Meriam Tiga Dimensi Menggunakan Joystick Berbasis Visual Basic.
Universitas Kristen Maranatha SIMULASI SISTEM PENEMBAKAN MERIAM TIGA DIMENSI
MENGGUNAKAN JOYSTICK BERBASIS VISUAL BASIC
Yattawuri Arinta Timur / 0622029 E-mail :yattawuri.arinta@gmail.com
JurusanTeknikElektro, FakultasTeknik, Universitas Kristen Maranatha Jalan Prof. Drg. SuriaSumantri 65
Bandung40164, Indonesia
ABSTRAK
Simulasi penembakan meriam 3D menggunakan Visual Basic yang pada awalnya dianggap lambat dan tidak optimal sehingga tidak dapat digunakan untuk membuat tampilan 3D.
Pada tugas akhir ini dibuat simulasi 3D proses penembakan meriam menggunakan TV3D danVisual Basic yang dapat digunakan dengan mudah. Input simulasi 3D berupa posisi target dan meriam dalam koordinat x,y,z yang kemudian digunakan untuk mendapatkan besar sudut azimuth dan elevasi meriam. Sudut azimuth dan elevasi digunakan untuk melakukan proses penembakan meriam. Simulasi 3D ini dapat digerakan secara manual dengan joystick dan juga secara otomatis.
Pada penembakan target bergerak secara otomatis dan manual dengan kecepatan kurang dari 15m/s tidak terjadi kegagalan
(2)
Universitas Kristen Maranatha
THREE DIMENSIONAL CANNON SHOOTING SYSTEM
SIMULATION BASED ON VISUAL BASIC USING A JOYSTICK
Yattawuri Arinta Timur / 0622029 E-mail :yattawuri.arinta@gmail.com
Department of Electrical Engineering, Faculty of Engineering, Maranatha Christian University
Prof.Drg. SuriaSumantri 65 Street Bandung40164, Indonesia
ABSTRACT
The firing of 3D cannon simulation using Visual Basic at first considered slow and not optimum so that it cannot be used to make 3D display.
In this final assignment, the writer makes the firing process of 3D cannon simulation using TV3D and Visual Basic that can be used easily. 3D simulation input is in the form of target position and cannon in coordinates x, y, z that are then used to obtain the cannon azimuth and elevation angles.
The azimuth and elevation angles are used to carry out cannon firing process. This 3D simulation can be moved manually using a joystick and automatically as well. In firing moving target either manually with the speed less than 15 m/s or automatically no failure occurs.
(3)
Universitas Kristen Maranatha
DAFTAR ISI
ABSTRAK ... i
ABSTRACT ... ii
KATA PENGANTAR ... iii
DAFTAR ISI ... v
DAFTAR TABEL ... viii
DAFTAR GAMBAR ... ix
BAB I PENDAHULUAN I.1 Latar Belakang ... 1
I.2 Identifikasi Masalah ... 2
I.3 Tujuan ... 2
I.4 Batasan Masalah ... 2
I.5 Sistematika Penulisan ... 2
BAB II LANDASAN TEORI II.1 Definisi dan Kegunaan True Vision 3D ... 4
II.2 Teori Pembuatan Objek 3D pada True Vision 3D... 5
II.2.1 Penciptaan Obyek ... 5
II.2.1.1 Penciptaan Obyek Implisit ... 5
II.2.1.2 Penciptaan Obyek Eksplisit ... 5
II.2.2 Referensi Obyek ... 6
II.2.3 Kecepatan COM Panggilan ... 7
II.2.4 Optimasi VB ... 8
II.2.4.1 Variabel ... 8
II.2.4.2 Model Matematika ... 9
(4)
Universitas Kristen Maranatha
II.2.5 Optimasi True Vision 3D ... 12
II.2.5.1 Meshsdan Model ... 12
II.2.5.2 Marco ... 12
II.2.5.3 MetodeTiming ... 14
II.2.5.4 DoEvent ... 15
II.2.5.5 Bagian 2D True Vision 3D ... 15
II.3 Perhitungan ... 17
II.3.1 Kondisi Posisi Akhir dari Proyektil ... 17
II.3.1.1 Jarak yang Ditempuh ... 17
II.3.1.2 Waktu yang Ditempuh ... 18
II.3.1.2 Sudut Jangkauan ... 19
II.3. Kondisi Jarak x Sembarang ... 19
II.3.2.1 Ketinggian y ... 19
II.3.2.2 Kecepatan y ... 19
II.3.3 Sudut θ yang DiperlukanKoordinat (x,y) ... 20
BAB III PERANCANGAN DAN ANALISIS III.1 Diagram Alir dan Cara Kerja ... 23
III.1.1 Proses Inisialisasi Model 3D ... 24
III.1.2 Proses Input ... 26
III.1.3 Proses Perhitungan ... 27
III.1.4 Proses Pemilihan Operator ... 27
III.1.5 Proses PergerakanPeluru ... 34
III.2 Data Pengamatan dan Analisis ... 36
BAB IV KESIMPULAN DAN SARAN IV.1 Kesimpulan ... 41
(5)
Universitas Kristen Maranatha DAFTAR PUSTAKA ...…... 42 LAMPIRAN A LISTING PROGRAM
(6)
Universitas Kristen Maranatha
DAFTAR TABEL
Tabel III. 1 Menu Operator ... 28
Tabel III. 2 Data Pengamatan Penembakan Target Diam Kapal ... 36
Tabel III. 3 Data Pengamatan Penembakan Target Diam Kapal ... 37
(7)
Universitas Kristen Maranatha
DAFTAR GAMBAR
GambarIII.1 Diagram Alir ... 23
Gambar III.2 TampilanMeriam ... 25
Gambar III.3 TampilanPeluru ... 25
Gambar III.4 Tampilan Target Pesawat ... 26
Gambar III.5 Tampilan Target Kapal ... 26
GambarIII.6 Diagram AlirPemilihanOperator ... 29
GambarIII.7 Diagram AlirPemilihanView Camera ... 32
GambarIII.8 Diagram AlirPenembakanPeluru ... 34
Gambar III.9 PeluruMengenaiSasaran Target Kapal ... 37
(8)
A-1
LAMPIRAN A
(9)
A-2
LISTING PROGRAM PADA MICROSOFT VISUAL BASIC 6.0
1. Program Global
Option Explicit
Global Const kGravitasi = 9.086 ' Gravitasi Bumi Global Const kAmuZ = 1.9 ' Offset Amunisi Global Const dUmurPeluru = 9
Global Const kTEl = 0.01 ' Time rate : Elevasi Global Const kTAz = 0.01 ' Time rate : Azimuth GlobalConst kTNaTu = 0.01 ' Time rate : Naik Turun GlobalConst kTMaMu = 0.01 ' Time rate : Maju Mundur GlobalConst kBitRight = &H1
GlobalConst kBitLeft = &H2 GlobalConst kBitUp = &H4 GlobalConst kBitDown = &H8 GlobalConst kBitMaju = &H10 GlobalConst kBitMundur = &H20 GlobalConst kBitNaik = &H40 GlobalConst kBitTurun = &H80 Global cInputOk As Byte
Global cFiringOk As Byte Global cAmuOk As Byte
Global cTargetLock As Byte
Global Const kFileDat = "Meriam.txt" Global Const kDir3D = "..\Media\" Global Const kDirObyek = "..\Obyek\" Global Const kDirData = "..\Data\" Global Const kMaxAmu = 7
(10)
A-3
Global iAmuDelay As Integer '-- Gerakan Target --
Global Const Xmin = 100 Global Const Xmax = 800 Global Const Ymin = 550 Global Const Ymax = 730 Global Const Vkapal = 5 Global Const Vpswt = 15 '-- DLL Import --
Type TXyzHpr
X As Single ' X = Absis Y As Single ' Y = Ordinat Z As Single ' Z = Altitude H As Single ' H = Heading P As Single ' P = Pitch R As Single ' R = Roll End Type
Type T_Amunisi bOk As Boolean
dAz As Single ' Azimuth dEl As Single ' Elevasi dR As Single
dT As Single ' Time APos As D3DVECTOR
ARot As D3DVECTOR AMesh As TVMesh AXyzHpr As TXyzHpr End Type
Global aAmunisi(kMaxAmu) As T_Amunisi Type T_Camera
(11)
A-4
sNama As String
dAz As Single ' Azimuth dEl As Single ' Elevasi dX As Single ' Posisi X dY As Single ' Posisi Y dZ As Single ' Posisi Z End Type
Global oCamera(3) As T_Camera Global oGun As TXyzHpr
Global oTarget As TXyzHpr Global oKill As TXyzHpr
Global oTargetAll(1) As TXyzHpr Global iTrajectOk As Integer Global iCuramOk As Integer Global dVpo As Single
Global iCamState As Integer Global iAzState As Integer Global iElState As Integer
Global dVp As Single ' Kecepatan Peluru
Global dVp1 As Single ' Kecepatan Peluru(Naik/Turun) Global dVp2 As Single ' Kecepatan Peluru (Datar) Global dEl As Single ' Elevasi Laras
Global dAz As Single ' Azimuth Meriam
Global dTime As Single ' Time periode dalam 1 loop (render)
' –Peluru --
Global bPeluruOk As Boolean
Global dRr As Single, dRx As Single, dRy As Single, dRz As Single
(12)
A-5
'-- Variable Alam 3D -- Global MyTV As TVEngine Global MyScene As TVScene
Global MyTexFactory As TVTextureFactory Global MyEffects As TVGraphicEffect Global MyParticle As TVParticleSystem Global MyLand As TVLandscape
Global MyInp As TVInputEngine Global MyCamera As TVCamera
Global MyAtmosphere As TVAtmosphere '-- Joystick --
Type T_Joystick
iAz As Long ' Azimuth : Left/Right iEl As Long ' Elevasi : Up/Dn
iBtn(5) As Byte ' Zoom : In/Out, Fire : Y/N, LRF : Mode/Action
iState(5) As Byte ' 0:Az, 1:El, 2:LRF, 3:Zoom, 4:MC, 5:?
End Type
Global oJoy As T_Joystick Global bJoystick As Boolean Global iJsNo As Long
Global iSumJs As Long
Global iSumJsButton As Long
Global iPwmRL As Integer ' Command : Pwm (Right and Left)
Global iPwmUD As Integer ' Command : Pwm (Up and Dn)
Global JsState As TV_JOYSTATE Global JsState2 As TV_JOYSTATE
(13)
A-6
Global oGameController As TVGameController Global GameController2 As TVGameController '-- Suara --
Global oMySound As TVSounds
Global oMySoundE As TVSoundEngine Global sSuaraTembak As String '-- Variabel Meriam --
Global oDasar As TVMesh Global oLaras As TVMesh '-- Variabel Target -- Global oKapal As TVMesh Global oPesawat As TVMesh Global dGerak As Single Global iGerakK As Integer Global iGerakP As Integer Global iTargetOk As Integer '-- Simulasi --
Global isRunning As Boolean Global bAutoOk As Boolean Global iSkenarioNo As Integer '-- Variabel Window --
Global oDisplay As F01Main Global oMenu As F02Menu
(14)
A-7 2. Program Fungsi
Option Explicit
'-- Routine : Extended --
Declare Sub PInitReference Lib "CProjectile.dll" (ByVal iIn As Integer)
Declare Sub PInitMunition Lib "CProjectile.dll" (ByVal iInTraject As Integer, ByVal iInCuram As Integer, ByVal dInSpeed As Single)
Declare Sub PGunToTarget Lib "CProjectile.dll" (oPosIn As TXyzHpr, oPosOut As TXyzHpr)
Declare Sub PGunToKill Lib "CProjectile.dll" (oPosIn As TXyzHpr, oPosOut As TXyzHpr)
Declare Sub PPosByTime Lib "CProjectile.dll" (ByVal dIn As Single, oPosOut As TXyzHpr)
'-- Routine : Program START -- Sub Main()
'-- Posisi Awal (Matematika) -- PInitData
'-- Setting WINDOWS --
Set oDisplay = New F01Main Set oMenu = New F02Menu oMenu.Move 10, 10
oDisplay.Move 20 + oMenu.Width, 10 oDisplay.Show
oMenu.Show PFileInit
oDisplay.PMainLoop PFileClose
(15)
A-8
'-- Routine : Inisialisasi Data -- Sub PInitData()
'-- Camera --
oCamera(0).sNama = "Penembak" oCamera(1).sNama = "Peninjau" oCamera(2).sNama = "Peluru" '-- Meriam --
dVp = 100 ' Kecepatan peluru (100 m/s) dEl = 0' Elevasi awal
dAz = 180 ' Azimuth awal oGun.X = 430 ' Gun
oGun.Y = 30
oGun.Z = 20 ' Tinggi ' Target Kapal
oTargetAll(0).X = 430 oTargetAll(0).Y = 730 oTargetAll(0).Z = 0
oTargetAll(0).H = 90 ' Heading oTargetAll(0).P = 0
oTargetAll(0).R = 0 ' Target Pesawat
oTargetAll(1).X = 430 oTargetAll(1).Y = 730 oTargetAll(1).Z = 200 oTargetAll(1).H = 0
oTargetAll(1).P = -90 ' Pitch oTargetAll(1).R = 180 ' Roll oTarget = oTargetAll(0)
'-- Amunisi -- iAmuNo = 0
(16)
A-9
cAmuOk = 0 iAmuDelay = 0
'-- Init DLL --
iTrajectOk = 1 ' 0=No Trajectory, 1=Using Trajectory
iCuramOk = 0 ' 0:Landai, 1:Curam dVpo = dVp
PInitMunition iTrajectOk, iCuramOk, dVpo End Sub
'-- Routine : Proses pergerakan peluru -- Sub PInitCamera()
Dim ii As Integer
MyCamera.SetPosition 512, 100, 512 For ii = 0 To 2
oCamera(ii).dX = oGun.X oCamera(ii).dY = oGun.Y oCamera(ii).dZ = oGun.Z + 3 oCamera(ii).dAz = 0
oCamera(ii).dEl = 0 Next
'-- Peninjau –
oCamera(1).dAz = oCamera(1).dAz - 90 oCamera(1).dX = oTargetAll(0).X + 10 oCamera(1).dY = oTargetAll(0).Y
oCamera(1).dZ = oTargetAll(0).Z + 5 End Sub
(17)
A-10
Sub PInitTarget() Dim ii As Integer '-- MESH --
Set oKapal = MyScene.CreateMeshBuilder Set oPesawat = MyScene.CreateMeshBuilder
oKapal.Load3DSMesh kDirObyek & "Boat.3DS", True, False oPesawat.Load3DSMesh kDirObyek & "Ship.3DS", True, False oKapal.ScaleMesh 0.1, 0.1, 0.1
oPesawat.ScaleMesh 0.1, 0.1, 0.1 '-- Texture --
oKapal.SetColor RGBA(0.3, 0.3, 0.3, 1) oPesawat.SetColor RGBA(0.3, 0.3, 0.3, 1)
'-- Tampilan 3D : Kapal –
oKapal.SetPosition oTargetAll(0).X, oTargetAll(0).Z, oTargetAll(0).Y
oKapal.SetRotation oTargetAll(0).P, oTargetAll(0).H, oTargetAll(0).R
'-- Tampilan 3D : Pesawat --
oPesawat.SetPosition oTargetAll(1).X, oTargetAll(1).Z, oTargetAll(1).Y
oPesawat.SetRotation oTargetAll(1).P, oTargetAll(1).R, oTargetAll(1).H
oKapal.Enable True oPesawat.Enable False End Sub
Sub PPilihSkenario()
If iSkenarioNo = 1 Then ' Kapal diam oKapal.Enable True
oPesawat.Enable False iGerakK = 0
(18)
A-11
iGerakP = 0
ElseIf iSkenarioNo = 2 Then ' Pesawat Diam oKapal.Enable False
oPesawat.Enable True iGerakK = 0
iGerakP = 0
ElseIf iSkenarioNo = 3 Then ' Kapal bergerak + Pesawat Diam
oKapal.Enable True oPesawat.Enable True iGerakK = 1
iGerakP = 0
ElseIf iSkenarioNo = 4 Then ' Kapal Diam + Pesawat bergerak oKapal.Enable True
oPesawat.Enable True iGerakK = 0
iGerakP = 1
ElseIf iSkenarioNo = 5 Then ' Kapal bergerak + Pesawat bergerak
oKapal.Enable True oPesawat.Enable True iGerakK = 1
iGerakP = 1 End If End Sub
(19)
A-12
Sub PInitMeriam() Dim ii As Integer '-- MESH --
Set oDasar = MyScene.CreateMeshBuilder Set oLaras = MyScene.CreateMeshBuilder
oDasar.Load3DSMesh kDirObyek & "BASE.3DS", True, False oLaras.Load3DSMesh kDirObyek & "LARAS.3DS", True, False oDasar.ScaleMesh 0.1, 0.1, 0.1
'-- Texture --
oDasar.SetColor RGBA(0.1, 0.2, 0.1, 1) oLaras.SetColor RGBA(0.1, 0.2, 0.1, 1) '-- Parent + Child --
oDasar.CreateChild oDasar.AddChild oLaras '-- Posisi Awal --
oDasar.SetPosition oGun.X, oGun.Z, oGun.Y oLaras.SetMeshCenter 0, 20, 0
oLaras.SetPosition 0, 19, 0 '-- Amunisi --
For ii = 0 To kMaxAmu With aAmunisi(ii)
Set .AMesh = MyScene.CreateMeshBuilder
.AMesh.Load3DSMesh kDirObyek & "AMUNISI.3DS", True, False .AMesh.Enable False
.AMesh.SetColor RGBA(0.1, 0.1, 0.1, 1) .AMesh.ScaleMesh 0.1, 0.1, 0.1
.AMesh.SetMeshCenter 0, 20, -70
.AMesh.SetPosition oGun.X, oGun.Z + 1.9, oGun.Y .bOk = False
(20)
A-13
Next End Sub
Sub PJoystickInit()
MyInp.GameControllers.GetControllers iSumJs = MyInp.GameControllers.Count bJoystick = IIf(iSumJs > 0, True, False) If bJoystick Then
Set oGameController = MyInp.GameControllers.Item(1) oGameController.Initialize
iSumJsButton = oGameController.GetButtonCount End If
End Sub
Sub PRendering()
'Clear the screen MyTV.Clear
'Render the sky (you have to call this method just after the terrain rendering)
MyAtmosphere.Atmosphere_Render 'Render the entire landscape MyLand.Render
'Render the trees and the car MyScene.RenderAllMeshes
'Flip all on the screen MyTV.RenderToScreen End Sub
(21)
A-14
'-- Routine : Read Data Joystick -- Sub PJoystickRead()
Dim ii As Integer Dim sTemp As String Dim iJx As Long Dim iJy As Long
Static iCountJs As Integer ' Update values :
iCountJs = IIf(iCountJs > 9999, 0, iCountJs + 1) oGameController.Poll
JsState = oGameController.ControllerState ' Refresh every renderToScreen
' Check Data Joystick ' JS : Fire
If JsState.Buttons(0) Then ' JS : Fire cFiringOk = 2
End If
'-- Meriam : Elevasi + Azimuth --
If Not bAutoOk Then ' Gerakan : Auto If JsState.Y < 4000 Then dEl = dEl + dTime * kTEl ' Up
If JsState.Y > 6000 Then dEl = dEl - dTime * kTEl ' Dn
If JsState.X < 4000 Then dAz = dAz - dTime * kTAz 'Left
If JsState.X > 6000 Then dAz = dAz + dTime * kTAz ' Right
End If End Sub
(22)
A-15
Sub PJoystickRun()
If oJoy.iState(3) Then ' JS : State
If oJoy.iState(0) Then ' Azimuth Run iPwmRL = Abs(oJoy.iAz)
If iPwmRL > 100 Then iPwmRL = 100 End If
If oJoy.iState(1) Then ' Elevation Run iPwmUD = Abs(oJoy.iEl)
If iPwmUD > 100 Then iPwmUD = 100 End If
End If
oJoy.iState(0) = 0 oJoy.iState(1) = 0 oJoy.iState(2) = 0 oJoy.iState(3) = 0 End Sub
'Input keyboard Sub PDataInput()
'-- Time per Frame -- dTime = MyTV.TimeElapsed '-- Camera : Viewing --
If MyInp.IsKeyPressed(TV_KEY_F1) = True Then oMenu.PMenuState 0
If MyInp.IsKeyPressed(TV_KEY_F2) = True Then oMenu.PMenuState 1
If MyInp.IsKeyPressed(TV_KEY_F3) = True Then oMenu.PMenuState 2
(23)
A-16
If MyInp.IsKeyPressed(TV_KEY_RIGHT) = True Then cInputOk = cInputOk Or kBitRight
If MyInp.IsKeyPressed(TV_KEY_LEFT) = True Then cInputOk = cInputOk Or kBitLeft
If MyInp.IsKeyPressed(TV_KEY_UP) = True Then cInputOk = cInputOk Or kBitUp
If MyInp.IsKeyPressed(TV_KEY_DOWN) = True Then cInputOk = cInputOk Or kBitDown
If MyInp.IsKeyPressed(TV_KEY_A) = True Then cInputOk = cInputOk Or kBitMaju
If MyInp.IsKeyPressed(TV_KEY_Z) = True Then cInputOk = cInputOk Or kBitMundur
If MyInp.IsKeyPressed(TV_KEY_S) = True Then cInputOk = cInputOk Or kBitNaik
If MyInp.IsKeyPressed(TV_KEY_X) = True Then cInputOk = cInputOk Or kBitTurun
'-- Meriam : Elevasi + Azimuth --
If bAutoOk Then ' Gerakan : Auto oMenu.PAutoTrack
Else ' Gerakan : Manual
If MyInp.IsKeyPressed(TV_KEY_I) = True Then dEl = dEl + dTime * kTEl ' Up
If MyInp.IsKeyPressed(TV_KEY_K) = True Then dEl = dEl - dTime * kTEl ' Dn
If MyInp.IsKeyPressed(TV_KEY_J) = True Then dAz = dAz - dTime * kTAz ' Left
If MyInp.IsKeyPressed(TV_KEY_L) = True Then dAz = dAz + dTime * kTAz ' Right
End If
(24)
A-17
If MyInp.IsKeyPressed(TV_KEY_F) = True Then cFiringOk = 2 '-- Meriam : Manual / Auto --
If MyInp.IsKeyPressed(TV_KEY_M) = True Then ' Manual If bAutoOk Then
bAutoOk = False
oMenu.PMenuState 10 End If
End If
If MyInp.IsKeyPressed(TV_KEY_N) = True Then ' Auto If Not bAutoOk Then
bAutoOk = True
oMenu.PMenuState 9 End If
End If
If iElState Then ' Elevasi berubah If iElState = 1 Then dEl = dEl - dTime * kTEl ' Dn If iElState = 2 Then dEl = dEl + dTime * kTEl ' Up End If
If iAzState Then ' Azimuth berubah
If iAzState = 1 Then dAz = dAz - dTime * kTAz ' Left If iAzState = 2 Then dAz = dAz + dTime * kTAz ' Right End If
If iAmuDelay Then iAmuDelay = iAmuDelay - 1 If cFiringOk Then PMeriamTembak
'-- Range --
If dEl< 0 Then dEl = 0 If dEl> 87 Then dEl = 87 If dAz < 0 Then dAz = 360 If dAz > 360 Then dAz = 0 End Sub
(25)
A-18
'-- Routine : Proses pergerakan Meriam-- Sub PMeriamTembak()
cFiringOk = 0
If iAmuDelay Then Exit Sub iAmuDelay = 15
iAmuNo = IIf(iAmuNo < 7, iAmuNo + 1, 0)
cAmuOk= cAmuOk Or (2 ^ iAmuNo) 'AmuOk = 1234 5678 oGun.H = dAz
oGun.P = dEl oGun.R = 0
With aAmunisi(iAmuNo) .dT = 0
.AXyzHpr = oGun
.AMesh.SetPosition .AXyzHpr.X, .AXyzHpr.Z, .AXyzHpr.Y .AMesh.SetRotation .AXyzHpr.P, .AXyzHpr.H, 0
.bOk = True
.AMesh.Enable .bOk .APos.X = .AXyzHpr.X .APos.Y = .AXyzHpr.Y .APos.Z = .AXyzHpr.Z .APosOld = .APos End With
bPeluruOk = True
oMySound(sSuaraTembak).Play End Sub
'-- Routine : Proses pergerakan Meriam + Target -- Sub PMeriamMove()
oDasar.SetRotation 0, dAz, 0 ' dAzB=180, saat dAz=0 oLaras.SetRotation dEl, 0, 0
(26)
A-19
If iSkenarioNo < 3 Then Else
If iGerakK > 0 Then With oTargetAll(0) dGerak = Vkapal * dTime * 0.001
If iGerakK = 1 Then 'Kanan .H = 90
.X = .X + dGerak
If .X > Xmax Then iGerakK = 2
ElseIf iGerakK = 2 Then 'Turun .H = 180
.Y = .Y - dGerak
If .Y < Ymin Then iGerakK = 3
ElseIf iGerakK = 3 Then 'Kiri .H = -90
.X = .X - dGerak
If .X < Xmin Then iGerakK = 4
ElseIf iGerakK = 4 Then 'Naik .H = 0
.Y = .Y + dGerak
If .Y > Ymax Then iGerakK = 1 End If
oKapal.SetPosition .X, .Z, .Y oKapal.SetRotation .P, .H, .R End With
End If
If iGerakP > 0 Then With oTargetAll(1) dGerak = Vpswt * dTime * 0.001
(27)
A-20
.X = .X + dGerak
If .X > Xmax Then iGerakP = 2
ElseIf iGerakP = 2 Then 'Turun .Y = .Y - dGerak
If .Y < Ymin Then iGerakP = 3
ElseIf iGerakP = 3 Then 'Kiri .X = .X - dGerak
If .X < Xmin Then iGerakP = 4
ElseIf iGerakP = 4 Then 'Naik .Y = .Y + dGerak
If .Y > Ymax Then iGerakP = 1 End If
oPesawat.SetPosition .X, .Z, .Y oPesawat.SetRotation .P, .H, .R End With
End If End If End Sub
'-- Routine : Proses pergerakan peluru -- Sub PDataPeluru()
Dim bKenaOk As Boolean Dim ii As Integer
Dim dHo As Double Dim dPo As Double
If bPeluruOk Then
For ii = 0 To kMaxAmu With aAmunisi(ii) If .bOk Then
(28)
A-21
dHo = Deg2Rad(.AXyzHpr.H + 180) dPo = Deg2Rad(.AXyzHpr.P)
dVp1 = dVp * Cos(dPo) ' Kecepatan datar (Vxy)
dVp2 = dVp * Sin(dPo) ' Kecepatas naik (Vz)
.APos.X = .AXyzHpr.X + (dVp1 * .dT * Sin(dHo)) .APos.Y = .AXyzHpr.Y + (dVp1 * .dT * Cos(dHo)) .APos.Z = .AXyzHpr.Z + (dVp2 * .dT)
If iTrajectOk Then .APos.Z = .APos.Z - (0.5 * kGravitasi * .dT * .dT)
.AMesh.SetPosition .APos.X, .APos.Z, .APos.Y If .dT > dUmurPeluru Then ' Waktu habis .bOk = False
.AMesh.Enable .bOk cAmuOk = cAmuOk And (255 - (2 ^ ii)) bPeluruOk = IIf(cAmuOk, True, False) oMySound(sSuaraTembak).Play
Else ' Check Ledakan bKenaOk = oKapal.Collision(.APosOld, .APos,
TV_TESTTYPE_BOUNDINGBOX) Or _
oPesawat.Collision(.APosOld, .APos, TV_TESTTYPE_BOUNDINGBOX)
If bKenaOk Then .bOk = False
.AMesh.Enable .bOk cAmuOk = cAmuOk And (255 - (2 ^ ii)) bPeluruOk = IIf(cAmuOk, True, False) oMySound(sSuaraTembak).Play
(29)
A-22
End If End With Next
End If End Sub
Sub PViewCamera()
With oCamera(iCamState) If cInputOk Then
If cInputOk And kBitUp Then .dEl = .dEl + dTime * kTEl If cInputOk And kBitDown Then .dEl = .dEl - dTime * kTEl If cInputOk And kBitRight Then .dAz = .dAz + dTime * kTAz If cInputOk And kBitLeft Then .dAz = .dAz - dTime * kTAz If cInputOk And kBitNaik Then .dZ = .dZ + dTime * kTNaTu If cInputOk And kBitTurun Then .dZ = .dZ - dTime * kTNaTu End If
If iCamState = 0 Then ' Penembak MyCamera.ChaseCamera oDasar, Vector(0, 250, 500), Vector(0, 0, 0), 50, False, 50
ElseIf iCamState = 1 Then ' Peninjau If cInputOk And kBitMaju Then
.dX = .dX + Sin(Deg2Rad(.dAz)) * dTime * kTMaMu .dY = .dY + Cos(Deg2Rad(.dAz)) * dTime * kTMaMu ElseIf cInputOk And kBitMundur Then
.dX = .dX - Sin(Deg2Rad(.dAz)) * dTime * kTMaMu .dY = .dY - Cos(Deg2Rad(.dAz)) * dTime * kTMaMu End If
' Batasan
If .dZ < 1 Then .dZ = 1
If .dEl < -90 Then .dEl = -90 If .dEl > 90 Then .dEl = 90
(30)
A-23
MyCamera.SetCamera .dX, .dZ, .dY, _
.dX + Sin(Deg2Rad(.dAz)), .dZ + Sin(Deg2Rad(.dEl)), .dY + Cos(Deg2Rad(.dAz))
ElseIf iCamState = 2 Then ' Peluru If bPeluruOk Then
.dX = aAmunisi(iAmuNo).APos.X .dY = aAmunisi(iAmuNo).APos.Y
.dZ = aAmunisi(iAmuNo).APos.Z + kAmuZ .dAz = aAmunisi(iAmuNo).dAz
.dEl = aAmunisi(iAmuNo).dEl
MyCamera.SetCamera .dX - Sin(Deg2Rad(.dAz)), .dZ - Sin(Deg2Rad(.dEl)), _
.dY - Cos(Deg2Rad(.dAz)), .dX, .dZ, .dY Else
MyCamera.SetCamera oGun.X + Sin(Deg2Rad(dAz)), oGun.Z + kAmuZ + 0.2 - Sin(Deg2Rad(dEl)), _
oGun.Y + Cos(Deg2Rad(dAz)), oGun.X, oGun.Z + kAmuZ + 0.2, oGun.Y
End If End If
cInputOk = 0 End With End Sub
(31)
A-24 3. Program Menu
Option Explicit
' Bisa diakses oleh Main Public Sub PDataAwal() TextPos(0).Text = oGun.X TextPos(1).Text = oGun.Y TextPos(2).Text = oGun.Z End Sub
Private Sub Form_Load() Me.Show
iSkenarioNo = 1
ShapeSkenario(iSkenarioNo).BackColor = vbGreen End Sub
Private Sub LabelMenu_Click(Index As Integer)
If Index < 3 Then ' View Camera ElseIf Index < 8 Then ' Meriam Move If Index = 3 Then ' Up
iElState = IIf(iElState = 2, 0, 2)
ElseIf Index = 4 Then ' Dn iElState = IIf(iElState = 1, 0, 1)
ElseIf Index = 5 Then ' Stop iAzState = 0
iElState = 0
ElseIf Index = 6 Then ' Left iAzState = IIf(iAzState = 1, 0, 1)
ElseIf Index = 7 Then ' Right iAzState = IIf(iAzState = 2, 0, 2)
End If
(32)
A-25
ElseIf Index = 9 Then ' Auto Track If bAutoOk Then Exit Sub
bAutoOk = True
ShapeMenu(13).BackColor = vbYellow
ElseIf Index = 10 Then ' Manual If Not bAutoOk Then Exit Sub
bAutoOk = False
ShapeMenu(13).BackColor = vbWhite
ElseIf Index = 11 Then ' Tester End If
PMenuState Index End Sub
Public Sub PMenuState(ByVal idx As Integer)
If idx < 3 Then ' View Camera ShapeMenu(iCamState).BackColor = vbWhite
iCamState = idx ' 0=Penembak, 1=Peninjau, 2=Peluru ShapeMenu(iCamState).BackColor = vbGreen
ElseIf idx < 8 Then ' Meriam Move ShapeMenu(3).BackColor = IIf(iElState = 2, vbGreen, vbWhite)
ShapeMenu(4).BackColor = IIf(iElState = 1, vbGreen, vbWhite)
ShapeMenu(5).BackColor = IIf(iElState Or iAzState, vbWhite, vbGreen)
ShapeMenu(6).BackColor = IIf(iAzState = 1, vbGreen, vbWhite)
ShapeMenu(7).BackColor = IIf(iAzState = 2, vbGreen, vbWhite)
ElseIf idx = 8 Then ' Firing ShapeMenu(8).BackColor = vbGreen
(33)
A-26
PFiring
PMenuState 15 DoEvents
ShapeMenu(8).BackColor = vbWhite cFiringOk = 1
ElseIf idx < 11 Then ' Auto Track / Manual LabelMenu_Click 5
ShapeMenu(9).BackColor = IIf(bAutoOk, vbGreen, vbWhite) ShapeMenu(10).BackColor = IIf(bAutoOk, vbWhite, vbGreen) FrameMenu(1).Enabled = IIf(bAutoOk, False, True)
oTarget = oTargetAll(0) ' Kapal cTargetLock = 0
ElseIf idx = 11 Then ' Tester ShapeMenu(11).BackColor = vbGreen
FrameMenu(4).Enabled = True
ElseIf idx = 15 Then ' No Tester ShapeMenu(11).BackColor = vbWhite
FrameMenu(4).Enabled = False
ElseIf idx = 12 Then ' Exit If isRunning Then
isRunning = False Else
End End If End If End Sub
Private Sub LabelSkenario_Click(Index As Integer) ShapeSkenario(iSkenarioNo).BackColor = vbWhite iSkenarioNo = Index
(34)
A-27
PPilihSkenario End Sub
Public Sub PFiring() PDataTarget
PDataCalculation End Sub
Private Sub PDataTarget() oGun.H = dAz
oGun.P = dEl oGun.R = 0 oTarget.H = 0 oTarget.P = 0 oTarget.R = 0 End Sub
Private Sub PDataCalculation() Dim sTmp As String
oKill = oTarget
PGunToKill oGun, oKill
oKill.H = IIf(oKill.H> 180, oKill.H - 360, oKill.H) sTmp = "Gun=[" & Format(oGun.X, "#0.0, ") &
Format(oGun.Y, "#0.0, ") & Format(oGun.Z, "#0.0]") & vbNewLine
sTmp = sTmp & "Tgt=[" & Format(oTarget.X, "#0.0, ") & Format(oTarget.Y, "#0.0, ") & Format(oTarget.Z, "#0.0]") & vbNewLine
sTmp = sTmp & "Kill=[" & Format(oKill.X, "#0.0, ") & Format(oKill.Y, "#0.0, ") & Format(oKill.Z, "#0.0]") & vbNewLine
sTmp = sTmp & "[Az=" & Format(oKill.H, "#0.00, El=") & Format(oKill.P, "#0.00]") & vbNewLine
(35)
A-28
sTmp = sTmp & "[T=" & Format(oKill.R, "#0.00, R=") & Format(oGun.R, "#0.00]")
TextD = sTmp End Sub
Public Sub PAutoTrack() Dim sTmp As String Dim dSudut As Single If iTargetOk = 0 Then '-- Kapal --
oTarget = oTargetAll(0)
oTarget.H = 0 ' Vx diam If iGerakK = 1 Then
oTarget.H = Vkapal ' Vx kanan ElseIf iGerakK = 3 Then
oTarget.H = -Vkapal ' Vx kiri End If
oTarget.P = 0 ' Vy If iGerakK = 2 Then
oTarget.P = -Vkapal ' Vx turun ElseIf iGerakK = 4 Then
oTarget.P = Vkapal ' Vy naik End If
oTarget.R = 0 ' Vz Else
'-- Pesawat --
oTarget = oTargetAll(iTargetOk)
oTarget.H = 0 ' Vx diam If iGerakP = 1 Then
oTarget.H = Vpswt ' Vx kanan ElseIf iGerakP = 3 Then
(36)
A-29
oTarget.H = -Vpswt ' Vx kiri End If
oTarget.P = 0 ' Vy If iGerakP = 2 Then
oTarget.P = -Vpswt ' Vx turun ElseIf iGerakP = 4 Then
oTarget.P = Vpswt ' Vy naik End If
oTarget.R = 0 ' Vz End If
oKill = oTarget
PGunToKill oGun, oKill
oKill.H = IIf(oKill.H > 180, oKill.H - 180, oKill.H + 180)
cTargetLock = 0
dSudut = dEl - oKill.P
If Abs(dSudut) < 0.7 Then dEl = oKill.P
cTargetLock = cTargetLock Or 1 Else
dEl = IIf(dSudut > 0, dEl - dTime * kTEl, dEl + dTime * kTEl)
End If
dSudut = dAz - oKill.H
If dSudut > 180 Then dSudut = 360 - dSudut If dSudut < (-180) Then dSudut = dSudut + 360
If Abs(dSudut) < 0.7 Then dAz = oKill.H
(37)
A-30
Else
dAz = IIf(dSudut > 0, dAz - dTime * kTAz, dAz + dTime * kTAz)
End If
ShapeMenu(13).BackColor = IIf(cTargetLock = 3, vbGreen, vbYellow)
sTmp = "Gun = [" &CInt(oGun.X) & "," & CInt(oGun.Y) & "," & CInt(oGun.Z) & "]" & vbNewLine
sTmp = sTmp & "Tgt = [" &CInt(oTarget.X) & "," &
CInt(oTarget.Y) & "," & CInt(oTarget.Z) & "]" & vbNewLine sTmp = sTmp & "Az = " & Format(oKill.H, "#0.0000") &
vbNewLine
sTmp = sTmp & "El = " & Format(oKill.P, "#0.0000") & vbNewLine
sTmp = sTmp & "R = " & Format(oGun.R, "#0.00") TextD = sTmp
End Sub
Private Sub OptionTgt_Click(Index As Integer) iTargetOk = Index
(38)
A-31 4. Program Main
Option Explicit
Private Sub Form_Load() Me.Show
PInitModel PInitMeriam PInitTarget PInitCamera PJoystickInit End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
isRunning = False End Sub
Private Sub Form_Resize()
If Not MyTV Is Nothing Then MyTV.ResizeDevice
End If End Sub
Private Sub LabelMenu_Click(Index As Integer) If Index = 0 Then ' Exit If isRunning Then
isRunning = False Else
End End If End If End Sub
(39)
A-32
Set MyTV = New TVEngine Set MyScene = New TVScene
Set MyTexFactory = New TVTextureFactory Set MyEffects = New TVGraphicEffect Set MyParticle = New TVParticleSystem Set MyLand = New TVLandscape
Set MyCamera = New TVCamera Set MyInp = New TVInputEngine
'Show the driver window to allow to select 'a video mode
'Init the 3D engine with the driver window results. MyTV.Initialize Me.hWnd
Set MyAtmosphere = New TVAtmosphere
'Set the default directory for the media files MyTV.SetSearchDirectory App.Path
'Load grass texture for the terrain
'Note that TrueVision3D can load DDS textures.
'You can create DDS textures with DXTEX delivred with DirectX8/9 sdk
'or with TexED delivred with the engine SDK.
MyTexFactory.LoadTexture kDirObyek & "terrain.jpg", "terrain"
'Set the general settings for the scene MyScene.SetSceneBackGround 0, 0, 0
MyScene.SetViewFrustum 90, 1500
'Load the sky (TrueVision3D can read JPG, BMP, GIF, DDS, PNG)
MyTexFactory.LoadTexture kDirObyek & "Sunset\Down.jpg", "down"
(40)
A-33
MyTexFactory.LoadTexture kDirObyek & "Sunset\Left.jpg", "Left"
MyTexFactory.LoadTexture kDirObyek & "Sunset\up.jpg", "up"
MyTexFactory.LoadTexture kDirObyek & "Sunset\Right.jpg", "Right"
MyTexFactory.LoadTexture kDirObyek & "Sunset\Front.jpg", "Front"
MyTexFactory.LoadTexture kDirObyek & "Sunset\Back.jpg", "Back"
'Apply the sky in the scene MyAtmosphere.SkyBox_Enable True
MyAtmosphere.SkyBox_SetColor 1, 1, 1, 1 MyAtmosphere.SkyBox_SetDistance 800
MyAtmosphere.SkyBox_SetTexture GetTex("Front"), GetTex("Back"), GetTex("Left"), GetTex("Right"), GetTex("up"), GetTex("down")
'LANSCAPE CREATION MyLand.SetFactorY 0.4
MyLand.GenerateHugeTerrain kDirObyek & "height.jpg", TV_PRECISION_AVERAGE, 4, 4, 0, 0, True
'For testing the best of the terrain engine try this : 'MyLand.SetFactorY 5
'MyLand.GenerateHugeTerrain "..\..\Media\height.jpg", TV_PRECISION_AVERAGE, 16, 16, 0, 0, True
'Change the texture tiling
MyLand.ExpandTexture GetTex("Terrain"), 0, 0, 4, 4 Dim MyLightEngine As New TVLightEngine
Dim li As D3DLIGHT8
(41)
A-34
li.diffuse = DXColor(1, 1, 1, 1) li.Type = D3DLIGHT_DIRECTIONAL li.Direction = Vector(-1, -1, 0)
li.specular = DXColor(0.3, 0.3, 0.3, 1) MyLightEngine.CreateLight li
MyScene.SetSpecularLightning True ' Create sounds
' Sound.LoadSound "drive.wav", , "Driving" ' Sound.Play GetSound("Driving"), True 'Initialize the smoke effect
MyTexFactory.LoadTexture kDir3D & "smoke.bmp", "Smoke", 256, 256
MyParticle.CreateBillboardSystem 50, 0, 10, Vector(0, 0, 0), 0, GetTex("Smoke")
MyParticle.SetParticleTexture GetTex("Smoke")
MyParticle.SetParticleAutoGenerateMode True, 0.4, 0.4, 0.4, 0.4, 0.5, 0, 0.1, 0, 0.01, 0.01, 0.01
MyParticle.SetAlphaBlendingMode TV_CHANGE_ALPHA, D3DBLEND_SRCALPHA, D3DBLEND_ONE
'-- Suara Tembakan --
Set oMySoundE = New TVSoundEngine oMySoundE.Init hWnd
Set oMySound = oMySoundE.CreateSounds sSuaraTembak = "SuaraTembak"
oMySound.AddFile kDirObyek & sSuaraTembak & ".wav" MyTV.DisplayFPS = True
MyTV.SetAngleSystem TV_ANGLE_DEGREE End Sub
(42)
A-35
Dim CamPosX As Single, CamPosZ As Single, ang2 As Single, ang3 As Single, PosY1 As Single
Dim PosY2 As Single, Speed As Single Dim sDebug As String
'Game loop isRunning = True
Do Until MyEffects.FadeFinished = True And isRunning = False Or MyInp.IsKeyPressed(TV_KEY_ESCAPE) = True
'-- Proses Rendering -- PRendering
'-- Proses Input -- PDataInput
If bJoystick Then ' Joystick PJoystickRead
PJoystickRun End If
'-- Proses Meriam bergerak -- PMeriamMove
'-- Proses View Camera -- PDataPeluru
PViewCamera
'-- Debug Only --
sDebug = "Az = " & dAz & vbNewLine & "El = " & dEl & vbNewLine
sDebug = sDebug & "Meriam = " & CInt(oGun.X) & ":" & CInt(oGun.Y) & ":" & CInt(oGun.Z) & vbNewLine
With oCamera(iCamState)
sDebug = sDebug & .sNama & " = [" &CInt(.dX) & "," & CInt(.dY) & "," & CInt(.dZ) & _
(43)
A-36
"] - [ " &CInt(.dAz) & "," & CInt(.dEl) & "]" & vbNewLine
End With
If bPeluruOk Then
With aAmunisi(0).APos
sDebug = sDebug & "Amunisi = " & CInt(.X) & ":" & CInt(.Y) & ":" & CInt(.Z) & vbNewLine
End With End If
TextD = sDebug DoEvents
Loop
Set MyTV = Nothing End
End Sub
Public Sub PDebugJs(ByVal sData As String) TextJs = sData
End Sub
Private Sub TextD_Change() End Sub
(44)
1 Universitas Kristen Maranatha
BAB I
PENDAHULUAN
I.1 Latar Belakang
Meriam adalah sejenis artileri, yang umumnya berukuran besar dan berbentuk tabung, yang menggunakan bubuk mesiu atau bahan pendorong lainnya untuk menembakkan proyektil. Meriam memiliki bermacam-macam ukuran kaliber, jangkauan, sudut tembak, dan daya tembak. Meriam ditembakkan secara manual dengan membakar sumbu. Meriam biasa digunakan sebagai persenjataan Angkatan darat, laut dan udara.
Pada akhir abad ke-15, beberapa teknologi baru dikembangkan untuk membuat meriam menjadi lebih mudah digerakkan. Meriam-meriam berukuran besar mulai ditinggalkan, digantikan dengan meriam yang lebih ringan. Kereta meriam beroda menjadi banyak digunakan dan semakin memudahkan transportasi artileri. Namun sasaran tembak meriam manual hanya dapat ditujukan pada sasaran yang statis seperti pasukan infateri, bangunan dan benteng-benteng pertahanan.
Hingga saat ini, persenjataan infanteri sudah semakin kuat dan akurat, sasaran tembak yang dinamis (bergerak) dan penempatan meriam diberbagai tempat seperti di armada-armada perang yaitu di helikopter dan di atas kapal. Hal ini menyebabkan meriam diharuskan memiliki keakuratan yang tinggi untuk mengenai sasaran tembak. Maka dari itu, pada tugas akhir ini akan dibuat simulasi sistem kendali tembak meriam dengan teknologi yang lebih canggih agar dapat menggerakkan meriam pada jarak jauh dan memiliki keakuratan yang tinggi agar dapat tepat mengenai sasaran tembak.
(45)
2 Universitas Kristen Maranatha I.2 Identifikasi Masalah
Berdasarkan uraian di atas, maka dapat diidentifikasikan permasalahan yang ada yaitu:
a. Bagaimana menampilkan simulasi tiga dimensi suatu sistem kendali tembak meriam?
b. Bagaimana cara memprogram joystick menjalankan tampilan tiga dimensi?
I.3 Tujuan
Tujuan dari Tugas Akhir ini adalah membuat perangkat lunak dan tampilan tiga dimensi suatu sistem kendali tembak meriam menggunakan joystick berbasis
Visual Basic.
I.4 Batasan Masalah
1. Penjelasan tentang radar dan perhitungan tidak dibahas dalam tugas akhir ini. 2. Input data posisi target yang diperoleh dari radar diproses dan diprogram oleh
PC menggunakan Visual Basic 6.0, pada tugas akhir ini posisi target tidak dalam posisi yg sebenarnnya.
3. Input pergerakan meriam diperoleh dari joystick.
4. Output PC berupa tampilan simulasi tiga dimensi dengan menggunakan True
Vision 3D.
I.5 Sistematika Penulisan
Sistematika penulisan laporan ini disusun menjadi empat bab, yaitu sebagai berikut:
(46)
3 Universitas Kristen Maranatha BAB I : PENDAHULUAN
Membahas tentang latar belakang, identifikasi masalah, tujuan, pembatasan masalah, metodologi dan sistematika penulisan Tugas Akhir.
BAB II : LANDASAN TEORI.
Dijelaskan tentang teori-teori penunjang yang diperlukan dalam membuat tampilan 3D dengan menggunakan True Vision 3D serta perhitungan yang diperlukan.
BAB III : PERANCANGAN
Membahas tentang algoritma pemrograman dalam bentuk
flowchart sistem penembakan simulasi dan kebutuhan atau
spesifikasi obyek yang dibutuhkan dalam pembuatan simulasi dan data pengamatan dari uji coba simulasi.
BAB IV : KESIMPULAN DAN SARAN
Membahas kesimpulan dan memberikan saran-saran setelah melaksanakan Tugas Akhir.
(47)
41 Universitas Kristen Maranatha
BAB IV
KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.
IV.1 Kesimpulan
Dalam perancangan perangkat lunak sistem penembakan meriam 3D dengan
True Vision 3D, dapat disimpulkan beberapa hal seperti berikut:
1. Perancangan perangkat lunak sistem penembakan meriam 3D dengan True
Vision 3D berhasil direalisasikan.
2. Dari pengujian sistem, pada penembakan target bergerak secara otomatis dan manual dengan kecepatan kurang dari 15m/s tidak terjadi kegagalan.
IV.2 Saran
Saran-saran yang dapat diberikan untuk perbaikan dan pengembangan Tugas Akhir ini di masa mendatang adalah :
1. Pembuatan model 3D yang digunakan harus sesuai dengan pengskalaan medan latihan yang digunakan agar kalibrasi dan penskalaannya pada simulasi menjadi lebih mudah.
(48)
42 Universitas kristen Maranatha
DAFTAR PUSTAKA
1. Autodesk, “3ds Max MAXScript Essentials”, Focal Press (Elsevier Science & Technology Books), 2006
2. Grahan, Andrew, “3ds Max Modeling for Games”, Focal Press (Elsevier
Science & Technology Books), 2005 3. http://en.wikipedia.org/wiki/Animation
(1)
A-36
"] - [ " &CInt(.dAz) & "," & CInt(.dEl) & "]" & vbNewLine
End With
If bPeluruOk Then
With aAmunisi(0).APos
sDebug = sDebug & "Amunisi = " & CInt(.X) & ":" & CInt(.Y) & ":" & CInt(.Z) & vbNewLine
End With End If
TextD = sDebug DoEvents
Loop
Set MyTV = Nothing End
End Sub
Public Sub PDebugJs(ByVal sData As String) TextJs = sData
End Sub
Private Sub TextD_Change() End Sub
(2)
1 Universitas Kristen Maranatha
BAB I
PENDAHULUAN
I.1 Latar Belakang
Meriam adalah sejenis artileri, yang umumnya berukuran besar dan berbentuk tabung, yang menggunakan bubuk mesiu atau bahan pendorong lainnya untuk menembakkan proyektil. Meriam memiliki bermacam-macam ukuran kaliber, jangkauan, sudut tembak, dan daya tembak. Meriam ditembakkan secara manual dengan membakar sumbu. Meriam biasa digunakan sebagai persenjataan Angkatan darat, laut dan udara.
Pada akhir abad ke-15, beberapa teknologi baru dikembangkan untuk membuat meriam menjadi lebih mudah digerakkan. Meriam-meriam berukuran besar mulai ditinggalkan, digantikan dengan meriam yang lebih ringan. Kereta meriam beroda menjadi banyak digunakan dan semakin memudahkan transportasi artileri. Namun sasaran tembak meriam manual hanya dapat ditujukan pada sasaran yang statis seperti pasukan infateri, bangunan dan benteng-benteng pertahanan.
Hingga saat ini, persenjataan infanteri sudah semakin kuat dan akurat, sasaran tembak yang dinamis (bergerak) dan penempatan meriam diberbagai tempat seperti di armada-armada perang yaitu di helikopter dan di atas kapal. Hal ini menyebabkan meriam diharuskan memiliki keakuratan yang tinggi untuk mengenai sasaran tembak. Maka dari itu, pada tugas akhir ini akan dibuat simulasi sistem kendali tembak meriam dengan teknologi yang lebih canggih agar dapat menggerakkan meriam pada jarak jauh dan memiliki keakuratan yang tinggi agar dapat tepat mengenai sasaran tembak.
(3)
2 Universitas Kristen Maranatha I.2 Identifikasi Masalah
Berdasarkan uraian di atas, maka dapat diidentifikasikan permasalahan yang ada yaitu:
a. Bagaimana menampilkan simulasi tiga dimensi suatu sistem kendali tembak meriam?
b. Bagaimana cara memprogram joystick menjalankan tampilan tiga dimensi?
I.3 Tujuan
Tujuan dari Tugas Akhir ini adalah membuat perangkat lunak dan tampilan tiga dimensi suatu sistem kendali tembak meriam menggunakan joystick berbasis
Visual Basic.
I.4 Batasan Masalah
1. Penjelasan tentang radar dan perhitungan tidak dibahas dalam tugas akhir ini. 2. Input data posisi target yang diperoleh dari radar diproses dan diprogram oleh
PC menggunakan Visual Basic 6.0, pada tugas akhir ini posisi target tidak dalam posisi yg sebenarnnya.
3. Input pergerakan meriam diperoleh dari joystick.
4. Output PC berupa tampilan simulasi tiga dimensi dengan menggunakan True
Vision 3D.
I.5 Sistematika Penulisan
Sistematika penulisan laporan ini disusun menjadi empat bab, yaitu sebagai berikut:
(4)
3 Universitas Kristen Maranatha BAB I : PENDAHULUAN
Membahas tentang latar belakang, identifikasi masalah, tujuan, pembatasan masalah, metodologi dan sistematika penulisan Tugas Akhir.
BAB II : LANDASAN TEORI.
Dijelaskan tentang teori-teori penunjang yang diperlukan dalam membuat tampilan 3D dengan menggunakan True Vision 3D serta perhitungan yang diperlukan.
BAB III : PERANCANGAN
Membahas tentang algoritma pemrograman dalam bentuk
flowchart sistem penembakan simulasi dan kebutuhan atau
spesifikasi obyek yang dibutuhkan dalam pembuatan simulasi dan data pengamatan dari uji coba simulasi.
BAB IV : KESIMPULAN DAN SARAN
Membahas kesimpulan dan memberikan saran-saran setelah melaksanakan Tugas Akhir.
(5)
41 Universitas Kristen Maranatha
BAB IV
KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.
IV.1 Kesimpulan
Dalam perancangan perangkat lunak sistem penembakan meriam 3D dengan
True Vision 3D, dapat disimpulkan beberapa hal seperti berikut:
1. Perancangan perangkat lunak sistem penembakan meriam 3D dengan True
Vision 3D berhasil direalisasikan.
2. Dari pengujian sistem, pada penembakan target bergerak secara otomatis dan manual dengan kecepatan kurang dari 15m/s tidak terjadi kegagalan.
IV.2 Saran
Saran-saran yang dapat diberikan untuk perbaikan dan pengembangan Tugas Akhir ini di masa mendatang adalah :
1. Pembuatan model 3D yang digunakan harus sesuai dengan pengskalaan medan latihan yang digunakan agar kalibrasi dan penskalaannya pada simulasi menjadi lebih mudah.
(6)
42 Universitas kristen Maranatha
DAFTAR PUSTAKA
1. Autodesk, “3ds Max MAXScript Essentials”, Focal Press (Elsevier Science &
Technology Books), 2006
2. Grahan, Andrew, “3ds Max Modeling for Games”, Focal Press (Elsevier
Science & Technology Books), 2005
3. http://en.wikipedia.org/wiki/Animation