Simulasi Sistem Penembakan Meriam Tiga Dimensi Menggunakan Joystick Berbasis Visual Basic.

(1)

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