Adding Text to the Display

  S E N G

  • H

  DirectX Input

  A N S

  Level 12

  U

  N S E N

  Adding Text to the Display

  G

  • H

   All About Fonts

   Creating Fonts and Displaying Text

  A N

   The Finished Program

  S

  Building a Game Display

  U N

   A Too-Simple Wrapper for Sprites  Constructing the Radar

  

Constructing the Health Bar

   Constructing the Ammo Indicator

   The Finished Program S E N

  Simple Input V-Sync and Mouse Lag

  G

  • H

   

  Reading the Keyboard The Source of Mouse Lag

   Reading the Mouse  Disabling V-Sync

  A N

   The Finished Program  The Finished Program

  S

  Raw Mouse Input Picking in Direct3D

  U N

   Initializing Raw Input  The Picking Ray 

  The WM_INPUT Message  Checking Intersection 

   Using the Data The Finished Program

   The Finished Program S E N

   Sekarang kita akan melihat cara untuk membaca

  G

  • H

  input dari keyboard dan mouse, bagaimana cara

  untuk menerapkannya dalam suatu game, dan

  A

  bagaimana membuatnya berinteraksi dengan baik

  N S dalam lingkungan game Anda.

  U

   Pertama, kita akan mempelajari teknik sederhana

  N untuk membaca input dari keyboard dan mouse.

  S E N

   Suatu key state adalah status dari sebuah tombol

  G

  (key), yakni apakah tombol tersebut ditekan atau

  • tidak.

  H A

   Untuk menentukan key state dari sebuah tombol

  N digunakan fungsi GetAsyncKeyState().

  S U N

   Suatu virtual key code adalah suatu code yang ditetapkan pada suatu tombol tertentu di keyboard.

   Perhatikan bahwa ‘A’ dan ‘a’ memiliki virtual key code yang sama. S E N

   Selanjutnya bagaimana caranya untuk mengetahui

  G

  sebuah tombol ditekan atau tidak?

  • H

   Fungsi GetAsyncKeyState() mengembalikan suatu

  A

  SHORT bukan BOOL, karena fungsi ini

  N

  mengembalikan lebih banyak data ketimbang hanya

  S U apakah sebuah tombol ditekan atau tidak. N

   Untuk mengetahui sebuah tombol ditekan, kita cek bit paling signifikan di dalam SHORT yang dikembalikan. S E N

  

 Kita AND-kan nilai yang dikembalikan dengan

  G 0x8000 untuk mengetahui status sebuah key.

  • H

  

Sayangnya, menambahkan code di atas terus-

  A menerus dapat membuat code terlihat rumit. N S

   Dapat dibuat macro untuk menyederhanakan

  U penulisannya sebagai berikut. N

   Dengan menggunakan macro ini, kita dapat dengan mudah menentukan status sembarang key, seperti berikut. S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N

  http://directxtut orial.com/Lesson .aspx?lessonid=9

  • 8-1

   http://msdn.microsoft.com/en- us/library/windows/desktop/dd375731%28v=vs.85%29.aspx

  

   Perhatikan bahwa tombol-tombol huruf dan angka tidak selalu diwakili nilai-nilainya sendiri.

  S E N G

  • H A N S U N

Untuk menggunakannya, Anda memakai nilai hexadecimal, seperti berikut

  S E N  Membaca posisi tetikus (mouse) sangatlah mudah.

  G

   Kita akan gunakan fungsi GetCursorPos(), seperti

  • H berikut.

  A N

  A struct that contains 2 int values,

  S

  x and y

  U N

  Fills a POINT struct with the current mouse position S E N

   Kebanyakan game tidak menggunakan mouse position,

  G namun menggunakan mouse movement.

  • H

  

Solusi yang mudah dan kerap digunakan adalah

  A

  dengan membaca lokasi mouse, lalu memindahkan

  N mouse tersebut ke pusat layar.

  S U

   Saat Anda membaca data mouse kembali, Anda dapat

  N

  memperoleh perubahan mouse, dibandingkan posisi normal mouse tersebut. S E N G

  • Simple function to set the position of the mouse, the

  H

  x and y coordinates

  A N S U N

  Subtract the center position from each mouse coordinate in MousePos to get the mouse change S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N

   Selain fungsi input umumnya terdapat suatu API yang

  G disebut Raw Input.

  • H

   API ini direkomendasikan oleh Microsoft untuk

  A

  pembangunan game, yang dapat memberikan kendali

  N penuh untuk semua perangkat input.

  S U

   Sekarang kita akan mempelajari cara memulai Raw

  N

  Input, dan bagaimana membaca pergerakan mouse

dengan menggunakan pesan WM_INPUT yang dihasilkan oleh Raw Input. S E N

   Sebelum menggunakan Raw Input, kita harus

  G menginisialisasinya terlebih dahulu.

  • H

   Kita harus memberitahu Windows perangkat mana

  A

  yang ingin kita kendalikan → mendaftarkan

  N perangkat.

  S U N

   Sebelum memanggil fungsi ini, kita harus mengisi struct untuk memberitahu apa yang akan diregister.

   Untuk meregister suatu perangkat, kita gunakan fungsi RegisterRawInputDevices().

  S E N G

  • H A N S U N

  A series of input devices, use ‘0x01’ A device within a usage page Customization flags S E N

   Fungsi ini digunakan untuk meregister mouse dan

  G memiliki 3 parameter.

  •  Yang pertama adalah suatu pointer ke struct

  H A RAWINPUTDEVICE yang telah dibuat sebelumnya. N

   Parameter kedua adalah jumlah perangkat yang

  S diregister (hanya 1 untuk contoh ini). U N

   Terakhir adalah ukuran struct RAWINPUTDEVICE. 

Dengan menggunakan fungsi ini, kita dapat meregister beberapa perangkat sekaligus dengan

  membuat suatu larik RAWINPUTDEVICE structs dan melewatkan pointer ke larik tersebut di dalam parameter pertamanya. S E N G

  • H A N S U N

  http://directxtutorial.com/Lesson.aspx?lessonid=9-8-2 S E N G

  • H A N S U N

  http://directxtutorial.com/Lesson.aspx?lessonid=9-8-2 S E N

   Setelah meregister perangkatnya, sekarang akan kita

  G lihat cara membaca datanya.

  • H

   Untuk membaca data di dalam Raw Input API, akan

  A digunakan WM_INPUT message. N S

   Kapanpun terdapat input untuk ditangani dari API ini,

  U

  WM_INPUT message akan mengirimkannya pada

  N kita untuk digunakan.

   Kita letakkan WM_INPUT message di dalam WindowProc. S E N G

  • H A N S U N
S E N

  A struct which will be filled with all the input information we want

  G

  • H

  Contains some general data that is

  A

  sent every time there is any input

  N

  message, regardless of where it’s from

  S U N

  Filled with the information about the mouse movement S E N G

  • H A N S U

  http://

  N

  direct xtutor ial.co m/Les son.as px?les sonid

   Memanggil fungsi ini akan mengisi RAWINPUT struct kita dengan seluruh informasi dari suatu input event.

  

Fungsi ini merupakan fungsi utama yang paling

penting.

  S E N G

  • H A N S U N
S E N

   Setelah mengisi RAWINPUT dengan informasi yang

  G

  

dibutuhkan, kita dapat menggunakannya untuk

  • H

    memutar teapot dengan masukan dari mouse.

  A

   2 langkah:

  N S 1.

  Create a BOOL to keep track of the mouse

  U

  button’s state

  N 2.

  It there is movement, rotate the teapot S E N

   Karena WM_INPUT message hanya akan

  G

  memberitahu kita kapan status mouse berubah, kita

  • H harus menyimpan record-nya sendiri.

  A N S U N

  S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N

   Sekarang kita akan membahas topik permasalahan

  G

  

yang kerap ditemui dalam games, bahkan yang

  • H terbaik sekalipun.

  A

   Terdapat 2 permasalahan umum, yakni input lag dan

  N tearing.

  S U

   Sekarang kita akan membahas V-Syncing dan

  N bagaimana V-Sync akan memengaruhi input.

  S E N

   Istilah ini muncul sebelum era monitor LCD

  G modern.

  • H

   Pada masa CRT, images digambarkan dengan suatu

  A

  light-pin yang bergerak secara horizontal sepanjang

  N

layar dan zig-zag hingga mencapai bawah layar.

  S U

   Setelah pin tersebut mencapai bawah layar, pin akan

  N kembali ke atas dan mulai lagi dari awal.

   Jeda waktu ini, saat tidak ada penggambaran, disebut dengan vertical sync, disingkat v-sync. S E N

   Di awal perkuliahan, kita telah membahas tearing dan

  G page swapping (page flipping).

  • H

   Teknik page flipping ini dapat disebut juga v-sync,

  A

  karena pertukaran terjadi pada saat jeda waktu

  N

  singkat ketika layar mempersiapkan dirinya kembali

  S U untuk menampilkan gambar lainnya ke layar. N

   Hal ini membuat frame rate tergantung pada refresh rate dari layar monitor Anda.

   Sementara beberapa monitor memiliki refresh rate yang relatif rendah (< 60 fps). S E

   Berdasarkan sifat alamiah sinyal elektronik, suatu mouse

  N akan selalu memiliki lag. G

  Namun, mouse di Windows umumnya bergerak dengan

  H lancar, tanpa terdeteksi adanya lag. A

   Sinyal mouse dijalankan oleh Windows pada thread

  N S

  terpisah, membaca informasi dari mouse tersebut dan

  U segera menggantinya di layar monitor. N

   Kecepatan pemrosesannya tergantung pada kecepatan mouse tersebut bergerak.

   Setelah mouse mengirim informasi ke Windows, kursor

mouse baru segera digambarkan kembali di layar.

   Ingat bahwa tidak seperti pada games, Windows tidak S E N

   Dalam sebuah game dimana mouse mengontrol suatu

  G

  camera, mesin mau tidak mau harus me-render kembali

  • keseluruhan scene saat mouse digerakkan.

  H

   Akibatnya, pergerakan mouse dibatasi oleh frame rate

  A

  monitor, sehingga memperlambat update-rate mouse

  N tersebut.

  S U

   Pada saat menghindari tearing, kita lakukan render pada

  N

  suatu back-buffer, dan saat monitor VSyncing, kita tukar back dengan front buffer-nya.

   Pada dasarnya, apa yang ditampilkan adalah data lama.

 Saat render scene didasarkan pada pergerakan mouse, timbul mouse lag, karena gambar tersebut telah di-render pada beberapa frame sebelumnya. S E N

   Solusi dari mouse lag adalah dengan menonaktifkan V-

  G Sync.

  • H

   Caranya dengan menggunakan PresentationInterval, yang

  A

  

bertujuan mengatur hubungan antara refresh rate

  N monitor dan rate dimana Present() selesai.

  S U N

  S E N

   Terdapat beberapa nilai untuk PresentationInterval,

  G namun yang akan dijelaskan hanya 2.

  • 1.

  H A

   Menggunakan back buffer untuk membentuk suatu antrian

  N

  frames. Setelah 1 frame ditampilkan, frame berikutnya akan

  S mengambil alih dan ditampilkan. U

  Mouse lag No tearing

  N 2.

   Memberitahu DirectX untuk menggunakan back buffer, namun langsung melakukan pertukaran saat render gambar selesai. Artinya tidak ada time lag antara render completion dan image display, tapi bisa muncul tearing. S E N

   Jadi, sebuah game dapat memiliki tearing dan hampir

  G tidak ada mouse lag, atau sebaliknya.

  • H

   Mana yang lebih baik?

  A

   Umumnya gamers dapat lebih menerima tearing

  N S

  

ketimbang mouse lag, karena mouse lag dapat

  U menimbulkan gangguan yang lebih besar. N

   Akibatnya, banyak games yang menyediakan V-Sync sebagai option, dan default-nya disable.

   Trik lain untuk mengurangi visibility tearing adalah

dengan menghindari warna-warna yang sangat kontras. S E N G

  • H A N S U N

  http://directxtutorial.co m/Lesson.aspx?lessonid =9-8-3 S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N

   Saat Anda menggunakan mouse pointer dalam sebuah

  G

  game, tentunya Anda harus tahu apa yang diklik oleh

  • player.

  H A

   Dalam aplikasi 2D hal ini mudah, karena biasanya obyek

  N

  disimpan dalam suatu bentuk faktor persegi dan Anda

  S

  dapat dengan mudah menggunakan koordinat untuk

  U menentukan apakah mouse diklik atau tidak. N

   Untuk 3D, mouse tidak diberikan dalam koordinat 3D, sehingga Anda tidak tahu apa yang Anda klik.

   Namun, Direct3D menyediakan beberapa fungsi yang

memungkinkan Anda menentukan apa yang diklik berdasarkan posisi mouse dan posisi kamera. S E N

   Sebelum Anda menentukan apa yang diklik oleh

  G

  player, Anda harus membuat sebuah garis sepanjang

  • 3D space yang merepresentasikan klik itu sendiri.

  H A N S U N

  http://directxtutorial.com/Lesson.aspx?lessonid=9-8-4 

  Pada gambar sebelah kanan, Anda dapat melihat garis merah yang mewakili setiap titik dalam 3D space yang diklik oleh user. S E N

   Dengan menggunakan beberapa fungsi DirectX kita

  G

  dapat menggunakan ray ini untuk menentukan obyek

  • apa yang beririsan dengannya.

  H A

   Pertama, ray tersebut harus dibuat dalam memory.

  N

   Dapat digunakan 2 buah structs D3DVECTOR3, yang

  S

  satu merepresentasikan posisi kamera, dan lainnya

  U

  merepresentasikan arah mouse klik terhadap posisi

  N kamera.

  

Kedua nilai ini akan disebut sebagai origin dan

direction.

   Untuk menemukan picking ray, kita harus menghitung origin dan direction-nya.

   Beberapa langkah untuk menghitung picking ray: 1.

  • H A N S U N

  Get the current transform matrices, including projection, view, and world

  angle 3. Find the inverse matrix 4.

  S E N G

Use the inverse matrix to shift the origin and direction into model space

  S E N

  

 Pertama kita harus memperoleh matriks-matriks

  G

  yang digunakan untuk me-render gambar 3D terakhir

  • H (mesh).

  A

   Digunakan fungsi GetTransfrom() untuk mengambil

  N

  data dari video memory dan mengisi matriks dengan

  S U nilainya. N

  S E N

   Untuk membuat sebuah garis yang merepresentasi-

  G

  kan mouse klik, kita harus menemukan sudut garis

  • H

    tersebut dalam koordinat x dan y (z infinite).

  A

   Kita akan gunakan nilai float untuk merepresentasi-

  N

  kan dimana garis tersebut mengarah dalam viewing

  S U frustum. N

   Jika Anda melihat viewing frustum dari kamera, maka terlihat seperti sebuah persegi panjang.

   Untuk tujuan picking, kita akan scale “sudut”-nya menjadi (-1,-1) di kiri atas layar, dan (1,1) di kanan bawah. S E N G

  • H A N S U N

  http://directxtutorial.com/Lesson.aspx?lessonid=9-8-4 S E N G

  • H

  

Pada bagian pertama persamaan di atas, terdapat

  A

  ekspresi

  N

  (((2.0f * MousePos.x) / SCREEN_WIDTH) - 1.0f)

  S U

   Ekspresi ini mengambil posisi mouse pada layar dan

  N mengubah skalanya menjadi antara -1 dan 1.

   Di bagian kedua, kita bagi hasilnya dengan suatu cell dari matProjection.

   X dibagi dengan cell (0,0) dan Y dibagi dengan cell (1,1). 

  Nilai kedua cell merepresentasikan sudut dari viewing S E N G

  • H A N S U N

   Setelah memperoleh sudut picking ray, kita gunakan untuk membuat 2 vektor, yakni origin dan direction. S E N

   Dalam rendering, kita mengambil titik-titik,

  G

  memindahkannya dalam dunia (world space), mengatur

  • orientasinya agar sesuai dengan kamera (view space), dan

  H

  me-resize-nya untuk memperlihatkan kedalaman

  A N (projection space).

  S

   Dalam picking, kita lakukan hal sebaliknya.

  U

   Dimulai dengan menentukan lokasi dalam projection

  N

  space, kita harus melakukan un-resize menjadi view space, un-orient menjadi world space, dan undo world transform untuk mendapatkan model space.

  

Alasannya daripada meletakkan seluruh titik dalam pipeline 2 kali, akan lebih cepat untuk meletakkan picking S E N

  

 Untuk meletakkan sesuatu dalam pipeline secara

  G backward, pertama harus didapatkan inverse matrix.

  • H A N S

   Inverse matrix dapat diperoleh dengan fungsi

  U D3DXMatrixInverse() . N

   Perhatikan bahwa kita telah memfaktorkan projection menjadi mouse’s angle, sehingga tidak perlu ditemukan lagi di sini.

   Kita hanya akan melakukan inverse terhadap world dan view, yang disimpan dalam matInverse. S E N G

  • H A N S U N
S E N G

  • H

   Untuk origin, kita gunakan

  A

  D3DXVec3TransformCoord(), yang mengambil

  N koordinat dan mengalikannya dengan suatu matriks.

  S U

   Parameter pertamanya adalah pointer ke resulting

  N

  vector, parameter kedua adalah pointer ke original

vector, dan parameter ketiga adalah pointer ke

matriksnya.

   Fungsi ini akan mengubah origin ke dalam posisi kamera dalam model space. S E N G

  • H

   Kita lakukan hal yang serupa untuk direction, namun

  A

  karena direction merupakan suatu normal, bukan

  N

  koordinat, maka digunakan fungsi

  S U D3DXVec3TransformNormal(). N

   Fungsi ini akan mengubah direction menjadi model space.

   Baris ketiga digunakan untuk menormalisasi direction,

yang berarti kita ubah garis direction sehingga panjangnya bernilai 1. S E N G

  • H A N S U N
S E N

   Untuk melakukan picking diperlukan satu fungsi,

  G yakni D3DXIntersect().

  •  Meskipun fungsi ini memiliki banyak parameter,

  H A kebanyakan parameter tersebut bersifat optional. N S U N

   Kita hanya akan menggunakan 4 parameter pertama dan sisanya bernilai NULL. S E N

   Contoh pemanggilannya:

  G

  • H A N

   Jika dimanfaatkan parameter pHit:

  S U N

  S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  http://directxtutorial.com/ http://www.highgraphic.com/thumbs-up-and-down- icons/ Other web resources.

  • H A N S U N

Dokumen yang terkait

ANTARA IDEALISME DAN KENYATAAN: KEBIJAKAN PENDIDIKAN TIONGHOA PERANAKAN DI SURABAYA PADA MASA PENDUDUKAN JEPANG TAHUN 1942-1945 Between Idealism and Reality: Education Policy of Chinese in Surabaya in the Japanese Era at 1942-1945)

1 29 9

EVALUASI PENGELOLAAN LIMBAH PADAT MELALUI ANALISIS SWOT (Studi Pengelolaan Limbah Padat Di Kabupaten Jember) An Evaluation on Management of Solid Waste, Based on the Results of SWOT analysis ( A Study on the Management of Solid Waste at Jember Regency)

4 28 1

Improving the Eighth Year Students' Tense Achievement and Active Participation by Giving Positive Reinforcement at SMPN 1 Silo in the 2013/2014 Academic Year

7 202 3

Teaching speaking through the role play (an experiment study at the second grade of MTS al-Sa'adah Pd. Aren)

6 122 55

The Effectiveness of Computer-Assisted Language Learning in Teaching Past Tense to the Tenth Grade Students of SMAN 5 Tangerang Selatan

4 116 138

The correlation between listening skill and pronunciation accuracy : a case study in the firt year of smk vocation higt school pupita bangsa ciputat school year 2005-2006

9 128 37

Designing the Process Design Process 001

1 44 9

Factors Related to Somatosensory Amplification of Patients with Epigas- tric Pain

0 0 15

The effect of personal vocabulary notes on vocabulary knowledge at the seventh grade students of SMP Muhammadiyah Palangka Raya - Digital Library IAIN Palangka Raya

0 0 20

CHAPTER I INTRODUCTION - The effectiveness of anagram on students’ vocabulary size at the eight grade of MTs islamiyah Palangka Raya - Digital Library IAIN Palangka Raya

0 0 10