Bab ini berisi kesimpulan dari seluruh bab serta saran yang diharapkan dapat bermanfaat dalam proses pengembangan penelitian selanjutnya.
5.1. Kesimpulan
Berdasarkan hasil studi literatur, analisis, perancangan, implementasi, dan pengujian sistem ini, maka kesimpulan yang didapat adalah sebagai berikut:
1. Setelah melalui proses pengumpulan data penulis menyimpulkan bahwa, dengan pengambilan data langsung ke dunia nyata akan membantu proses tekstur menjadi lebih bagus lagi hasilnya ketimbang mengambil data dari sumber perantara atau sumber kedua, seperti buku dan internet.
2. Setelah melakukan implementasi sistem maka menurut penulis dengn menggunakan markerless membuat aplikasi menjadi lebih praktis untuk digunakan, karena bebas digunaan dimanapun dan kapanpun tanpa harus membawa - bawa marker.
3. Setelah melakukan pengujian sistem maka diperoleh kesimpulan bahwa memanfaatkan Teknologi Augmented Reality di dunia pendidikan menjadikan proses belajar mengajar lebih dinamis dan efisien.
5.2. Saran
Adapun saran-saran yang dapat diberikan penulis untuk pengembangan dan perbaikan sistem ini selanjutnya adalah sebagai berikut:
1. Diharapkan pada penelitian selanjutnya dapat menyediakan beberapa fitur yang lebih interaktif, seperti pilihan audio yang ini didengarkan saat aplikasi berjalan.
2. Diharapkan pada penelitian selanjutnya menyediakan lebih banyak objek 3D agar materi lebih dapat difahami
3. Diharapkan kepada penulis selanjutnya agar menambahkan motion tracking pada aplikasi agar user dapat berinteraksi dengan objek secara realtime
Universitas Sumatera Utara
Daftar Pustaka
Aggarwal, Vineet. 2014. How to Create an Augmented Reality App.
http://www.3pillarglobal.com, 12 Juni 2014 (Diakses 10 Mei 2016).
Indrawaty, Youllia dkk, 2014. Media Pembelajaran Interaktif Pengenalan Anatomi Manusia Menggunakan Metode Augmented Reality (AR), S(1) Teknik
Informatika. Jurnal Informatika. Institut Teknologi Nasional Bandung.
http://lib.itenas.ac.id/kti/wp-content/uploads/2013/10/Jurnal-No.2-vol.4-4.pdf (Diakses 22 Mei 2015).
Jiří Kysela and Pavla Štorková. 2015. Using augmented reality as a medium for teaching history and tourism . Procedia - Social and Behavioral Sciences 174 . 926 – 931
Lazuardy, S. 2012. Masa Lalu, Kini dan Masa Depan Teknologi Augmented Reality.
http://www.kompas.com, 2 Mei 2012 (Diakses 02 Oktober 2016)
Prasetyo, Bambang & Jannah, Lina. 2014. Metode Penelitian Kuantitatif: Teori dan A Aplikasi. Edisi 1. PT. RajaGrafindo: Jakarta
Rodríguez, Miriam et al. 2013. Mobile Serious Game using Augmented Reality for Supporting Children’s Learning about Anima. Procedia Computer Science 25. 375 – 381 oedavan, Rickman. 2014. Unity Tutorial Game Engine.
Bandung. Informatika.
Rizki, Muhammad. 2015. Implementasi Augmented Reality (AR) Pada Pengenalan Hardware Komputer Berbasis Android. Jurnal Skripsi. Universitas Sumatera Utara. Medan
Siregar, Hamdan. 2015. Implementasi Augmented Reality Pada Alat Musik Bonang Jawa Jawa Berbasis Android. Jurnal Skripsi. Universitas Sumatera Utara. Medan Syahfitra, Yuda.2016. Implementasi Augmented Reality (AR) Dalam Pengenalan
Alat-alat Fitness dan Gym Berbasis Platform Android. Jurnal Skripsi. Universitas Sumatera Utara
Turi, Jon. 2014. Gadget Rewind 2008: T-Mobile G1 (HTC Dream).
http://www.engadget.com, 22 June 2014 (Diakses 16 Mei 2016).
Wahyono & Nurrachmadani 2008.
Yoon, S. Roh, K. Hyung, S. Ahn, S. 2010. MARKERLESS AUGMENTED REALITY SYSTEM AND METHOD USING PROJECTIVE INVARIANT.
Foreign Application Priority Data. G09G 5/00. 345/633
Universitas Sumatera Utara
Zarzuela, Mario. Pernas, Francisco J. Martínez, Leire. Ortega, González. 2013.
Mobile Serious Game using Augmented Reality for Supporting Children’s Learning about Animals. Procedia Computer Science 25. 375 – 381
Universitas Sumatera Utara
LAMPIRAN A
public class UDTEventHandler : MonoBehaviour, IUserDefinedTargetEventHandler {
public ImageTargetBehaviour ImageTargetTemplate;
public int LastTargetIndex {
get { return (mTargetCounter - 1) % MAX_TARGETS; } }
private const int MAX_TARGETS = 5;
w private UserDefinedTargetBuildingBehaviour mTargetBuildingBehaviour;
private QualityDialog mQualityDialog;
private ObjectTracker mObjectTracker;
private DataSet mBuiltDataSet;
private ImageTargetBuilder.FrameQuality mFrameQuality = ImageTargetBuilder.FrameQuality.FRAME_QUALITY_NONE;
private int mTargetCounter;
private TrackableSettings mTrackableSettings;
public void Start()
mTargetBuildingBehaviour.RegisterEventHandler(this);
Debug.Log("Registering User Defined Target event handler.");
}
mTrackableSettings = FindObjectOfType<TrackableSettings>();
mQualityDialog = FindObjectOfType<QualityDialog>();
if (mQualityDialog)
public void OnInitialized () {
mObjectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
if (mObjectTracker != null) {
mBuiltDataSet = mObjectTracker.CreateDataSet();
mObjectTracker.ActivateDataSet(mBuiltDataSet);
} }
public void OnFrameQualityChanged(ImageTargetBuilder.FrameQuality frameQuality) // harus ingat
{
public void OnNewTrackableSource(TrackableSource trackableSource) {
IEnumerable<Trackable> trackables = mBuiltDataSet.GetTrackables();
Trackable oldest = null;
imageTargetCopy.gameObject.name = "UserDefinedTarget-" + mTargetCounter;
mBuiltDataSet.CreateTrackable(trackableSource, imageTargetCopy.gameObject);
Universitas Sumatera Utara
mObjectTracker.ActivateDataSet(mBuiltDataSet);
StopExtendedTracking();
mObjectTracker.Stop();
mObjectTracker.ResetExtendedTracking();
mObjectTracker.Start();
}
public void BuildNewTarget()// harus ingat {
mTargetBuildingBehaviour.BuildNewTarget(targetName, ImageTargetTemplate.GetSize().x);
public void CloseQualityDialog() {
if (mQualityDialog)
mQualityDialog.gameObject.SetActive(false);
}
private void StopExtendedTracking() {
bool extTrackingEnabled = mTrackableSettings &&
mTrackableSettings.IsExtendedTrackingEnabled();
if (extTrackingEnabled) {
StateManager stateManager = TrackerManager.Instance.GetStateManager();
t
foreach(var tb in stateManager.GetTrackableBehaviours()) {
var itb = tb as ImageTargetBehaviour;
Universitas Sumatera Utara
if (itb != null)
ImageTargetBehaviour lastItb = trackableList[LastTargetIndex] as ImageTargetBehaviour;
public class Event : MonoBehaviour {
public void EventStartLevel1 (int startEventLevel1) { Application.LoadLevel (startEventLevel1);
}
public void EventStartLevel2 (int startEventLevel2) { Application.LoadLevel (startEventLevel2);
}
public void BackStartLevel0 (int startBackLevel0) { Application.LoadLevel (startBackLevel0);
}
public void BackStartLevel1 (int startBackLevel1) { Application.LoadLevel (startBackLevel1);
public class Rotate : MonoBehaviour { private float rotationRate = 3.0f;
void Update () {
foreach (Touch touch in Input.touches) {
Debug.Log("Touc hing at: " + touch.position);
if (touch.phase == TouchPhase.Began) {
Debug.Log("Touch phase began at: " + touch.position);
} else if (touch.phase == TouchPhase.Moved) { Debug.Log("Touch phase Moved");
transform.Rotate (touch.deltaPosition.y * rotationRate, -touch.deltaPosition.x * rotationRate, 0, Space.World);
} else if (touch.phase == TouchPhase.Ended) { Debug.Log("Touch phase Ended");
}
public class SimpleSelectTransform : SimpleSelect {
public bool AllowScale = true;
protected virtual void Update() {
if (SelectedGameObject != null) {
if (Camera.main != null) {
if (AllowScale == true) {
public void Scale(Transform transform, float scale) {
Universitas Sumatera Utara
if (scale > 0.0f)
public class VideoPlaybackBehaviour : MonoBehaviour {
public string m_path = null;
public Texture m_playTexture = null;
public Texture m_busyTexture = null;
public Texture m_errorTexture = null;
public bool m_autoPlay = false;
private static bool sLoadingLocked = false;
private VideoPlayerHelper mVideoPlayer = null;
private bool mIsInited = false;
private bool mInitInProgess = false;
private bool mAppPaused = false;
private Texture2D mVideoTexture = null;
[SerializeField]
[HideInInspector]
private Texture mKeyframeTexture = null;
private VideoPlayerHelper.MediaType mMediaType =
VideoPlayerHelper.MediaType.ON_TEXTURE_FULLSCREEN;
private VideoPlayerHelper.MediaState mCurrentState = VideoPlayerHelper.MediaState.NOT_READY;
private float mSeekPosition = 0.0f;
private bool isPlayableOnTexture;
private GameObject mIconPlane = null;
private bool mIconPlaneActive = false;
public VideoPlayerHelper VideoPlayer {
Universitas Sumatera Utara
get { return mVideoPlayer; } }
public VideoPlayerHelper.MediaState CurrentState {
get { return mCurrentState; } }
public VideoPlayerHelper.MediaType MediaType {
get { return mMediaType; } set { mMediaType = value; } }
public Texture KeyframeTexture {
mIconPlane = transform.Find("Icon").gameObject;
if (m_path == null || m_path.Length == 0) {
Debug.Log("Please set a video url in the Inspector");
HandleStateChange(VideoPlayerHelper.MediaState.ERROR);
mCurrentState = VideoPlayerHelper.MediaState.ERROR;
this.enabled = false;
} else {
HandleStateChange(VideoPlayerHelper.MediaState.NOT_READY);
mCurrentState = VideoPlayerHelper.MediaState.NOT_READY;
}
mVideoPlayer = new VideoPlayerHelper();
mVideoPlayer.SetFilename(m_path);
transform.localScale = new Vector3(-1 * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
Universitas Sumatera Utara
ScaleIcon();
VideoPlayerHelper.MediaState state = mVideoPlayer.UpdateVideoData();
if ((state == VideoPlayerHelper.MediaState.PLAYING)
|| (state == VideoPlayerHelper.MediaState.PLAYING_FULLSCREEN)) {
GL.IssuePluginEvent(VideoPlayerHelper.GetNativeRenderEventFunc(), 0);
#else
{
private IEnumerator InitVideoPlayer() {
bool isMetalRendering = (VuforiaRenderer.Instance.GetRendererAPI() ==
VuforiaRenderer.RendererAPI.METAL);
if (mVideoPlayer.Init(isMetalRendering)) {
HandleStateChange(VideoPlayerHelper.MediaState.ERROR);
this.enabled = false;
} }
private IEnumerator LoadVideo() {
HandleStateChange(VideoPlayerHelper.MediaState.ERROR);
this.enabled = false;
} }
private IEnumerator PrepareVideo() {
VideoPlayerHelper.MediaState state = mVideoPlayer.GetStatus();
if (state == VideoPlayerHelper.MediaState.ERROR) {
Debug.Log("Cannot prepare video, as the player is in error state.");
HandleStateChange(VideoPlayerHelper.MediaState.ERROR);
this.enabled = false;
bool isOpenGLRendering = (VuforiaRenderer.Instance.GetRendererAPI() ==
VuforiaRenderer.RendererAPI.GL_20);
InitVideoTexture(isOpenGLRendering);
isPlayableOnTexture = mVideoPlayer.IsPlayableOnTexture();
if (isPlayableOnTexture) //harus ingat {
mVideoPlayer.SetVideoTexturePtr(mVideoTexture.GetNativeTexturePtr());
int videoWidth = mVideoPlayer.GetVideoWidth();
}
void OnApplicationPause(bool pause) {
HandleStateChange(VideoPlayerHelper.MediaState.NOT_READY);
mCurrentState = VideoPlayerHelper.MediaState.NOT_READY;
}
#endregion // UNITY_MONOBEHAVIOUR_METHODS
Universitas Sumatera Utara
#region PUBLIC_METHODS public void ShowBusyIcon() {
mIconPlane.GetComponent<Renderer>().material.mainTexture = m_busyTexture;
}
public void ShowPlayIcon() {
mIconPlane.GetComponent<Renderer>().material.mainTexture = m_playTexture;
}
private void InitVideoTexture(bool isOpenGLRendering) {
mVideoTexture.filterMode = FilterMode.Bilinear;
mVideoTexture.wrapMode = TextureWrapMode.Clamp;
}
private void HandleStateChange(VideoPlayerHelper.MediaState newState) {
if (newState == VideoPlayerHelper.MediaState.PLAYING ||
newState == VideoPlayerHelper.MediaState.PAUSED)
case VideoPlayerHelper.MediaState.READY:
case VideoPlayerHelper.MediaState.PLAYING_FULLSCREEN:
mIconPlane.GetComponent<Renderer>().material.mainTexture =
if (newState == VideoPlayerHelper.MediaState.PLAYING_FULLSCREEN) {
float videoWidth = Mathf.Abs(transform.localScale.x);
float videoHeight = Mathf.Abs(transform.localScale.z);
float iconWidth, iconHeight;
} else {
iconWidth = 0.5f;
iconHeight = 0.5f * videoWidth / videoHeight;
}
mIconPlane.transform.localScale = new Vector3(-iconWidth, 1.0f, iconHeight);
}
private void CheckIconPlaneVisibility() {
if (GetComponent<Renderer>().enabled) {
Renderer rendererComp = mIconPlane.GetComponent<Renderer>();
if (rendererComp.enabled != mIconPlaneActive) rendererComp.enabled = mIconPlaneActive;
} } }
Universitas Sumatera Utara