Saya baru-baru ini menemukan Q / A ini dan sekitar setahun yang lalu atau lebih ketika saya mulai bepergian menyusuri jalan ini; Saya akan menemukan ini sebagai sumber daya dan halaman referensi yang sangat bagus sehubungan dengan pertanyaan saya sendiri.
Bagian 1:
-Pendahuluan-
Sedikit tentang diri saya:
Pada pertengahan hingga akhir 80-an ketika saya masih di Sekolah Dasar, saya akan membongkar stereo sampah, VCR, dan perangkat elektron lainnya yang berasal dari 50-an hingga 80-an dan akan melihat papan sirkuit dan selalu ingin tahu bagaimana mereka melakukannya bekerja ... Bagaimana mereka benar-benar memperoleh sinyal siaran, menghasilkan audio, video, melakukan ini dan itu dll ... Saya bisa mengenali bagian-bagian individual di sana-sini seperti resister, kapasitor, dioda dan transistor, tetapi tidak tahu apa yang mereka lakukan atau bagaimana mereka berfungsi di usia yang begitu muda.
Selama bertahun-tahun saya selalu luar biasa dalam Matematika, Fisika dan Kimia. Saya mengerti matematika sampai tingkat tinggi dan bahkan dapat membaca beberapa sirkuit sederhana atau dasar dari sekolah menengah dan sekolah menengah saya yang datang kemudian, tetapi saya tidak pernah berhasil belajar tentang gerbang logika dan bagaimana mereka dibangun ... belajar Aljabar Boolean di Sekolah Menengah dari kelas Logika, Probabilitas, dan Statistik Honours saya. Semua kelas matematika dan sains saya adalah kelas kehormatan. Saya tidak mengambil Kalkulus sampai semester kedua di community college. Saya diuji dari Aljabar Perguruan Tinggi dan mengambil Trigonometri sebagai kursus penyegaran. Tingkat matematika tertinggi saya di kelas adalah Kalkulus II dari satu variabel.
Saya sudah bermain video game sejak saya berusia sekitar 3 atau 4 tahun. Sebagai seorang anak saya memiliki Atari, NES, Sega Genesis dan PS1. Ketika saya semakin tua dan memasuki usia remaja akhir saya dan awal 20-an saya telah memperoleh PS2 dan SNES dengan judul pilihan yang dipilih. Ini juga tidak memperhitungkan game PC yang sejauh Doom!
Saya selalu menjadi gamer Console dan PC dan ini tidak termasuk permainan pinball dan arcade.
Saya diberi PC pertama saya ketika saya berusia sekitar 12 tahun untuk Natal di awal tahun 90-an. Hari-hari DOS 6.0 dan Win 3.11 atau OS / 2. Sejak itu saya selalu akrab dengan keluarga sistem operasi "Windows" dan semua sistem yang saya miliki adalah Arsitektur Intel. Saya memiliki pengalaman terbatas dengan Apple atau Mac dari sekolah atau perguruan tinggi, tetapi saya tidak pernah memiliki hak istimewa untuk bekerja pada sistem Linux. Saya punya Cygwin dan saya sudah mencoba belajar bash, tetapi saya sudah terbiasa dengan sintaks Dos atau Command Prompt.
Pada awal 90-an saya akan mendapatkan satu atau dua salinan PC-World dan akan mengetikkan potongan kode ke QBasic yang saya tidak tahu dengan baik dan akan mencoba membuat program-program itu bekerja. Satu-satunya yang berhasil adalah program untuk mengubah penekanan tombol pada deretan tombol beranda menjadi bunyi nada dering yang berbeda. Maksud saya bukan nada dering pada telepon seluler yang saya maksudkan adalah frekuensi terus menerus selama Anda menekan tombol.
Selalu menjadi hasrat saya untuk tidak hanya ingin tahu bagaimana perangkat elektronik bekerja dalam lingkungan di tingkat digital dan logis, untuk belajar bagaimana memprogram komputer, tetapi saya selalu memiliki keinginan untuk ingin membuat video sendiri. permainan. Bahkan di awal 90-an saya ingin membuat game Frogger dan Tetris ...
Ini menjadi motivasi dan keinginan utama saya untuk mengatasi salah satu jenis pemrograman atau pengembangan perangkat lunak terberat dalam bidang Ilmu Komputer dan itu adalah Desain Mesin Game 3D. Ada bidang lain dalam Ilmu Komputer yang sama tangguhnya, namun setiap mesin permainan canggih biasanya atau biasanya akan mencakup hampir semua dari mereka sebagai komponen individu atau sub mesin membutuhkan teknik dan atau sifat mereka.
Saya memiliki latar belakang dalam pemrograman dari masa SMA saya, tetapi ini terbatas pada Visual Basic yang mengerikan. Saya mulai mengambil dan belajar C / C ++ sekitar tahun 2002 - 2003 tidak sampai beberapa tahun setelah saya lulus dari SMA pada tahun 1999. Bahkan sampai hari ini saya tidak memiliki pengalaman kuliah di bidang Ilmu Komputer atau Teknik Komputer, tetapi melalui dedikasi dan tekad, saya telah belajar hampir setiap konsep yang ada ketika datang ke komputer, perangkat keras, pemrograman, algoritma, dll dan saya masih terus belajar sebanyak yang saya bisa ...
Selama masa-masa awal belajar C / C ++, saya memang memiliki akses ke internet tetapi internet saat itu masih dalam tahap awal, situs-situs seperti Amazon, Youtube, Facebook dll. Bahkan belum ada, itu masih zaman 56k modem dial up yang pasang saluran telepon Anda jika Anda tidak memiliki saluran khusus kedua. Butuh beberapa menit hanya untuk membuat gambar ke layar, apalagi pemutaran video terus menerus.
Jadi ketika datang untuk meneliti dan belajar bagaimana memprogram dalam C ++, sumber daya terbatas dan sebagian besar dalam format teks. Ketika mencoba untuk menangani proyek-proyek dari hari-hari awal tutorial internet, banyak dari proyek-proyek itu tidak sepenuhnya lengkap, penulisnya adalah profesional atau mahasiswa dan mereka membuat banyak asumsi bahwa pembaca sudah akrab dengan banyak konsep yang dibutuhkan seperti kompilasi , menghubungkan dan debugging dan integrasi perpustakaan.
Untuk seseorang yang tidak tahu apa-apa tentang topik-topik itu, mereka bingung karena mereka tidak tahu apa yang salah, atau bagaimana cara memperbaikinya, dan bagaimana membuatnya bekerja dengan baik. Butuh waktu berjam-jam bagi saya untuk mencoba-coba dengan sumber daya yang sangat terbatas. Meminta bantuan seperti sekarang kami dapat dengan situs web ini atau mencari penjelasan terperinci yang dapat Anda temukan di cppreference tidak tersedia! Jika Anda secara pribadi tidak mengenal siapa pun, tidak banyak yang dapat Anda minta bantuan!
Seiring berjalannya waktu saya memang meningkatkan beberapa pengetahuan saya di sana-sini, dan akhirnya internet meningkat menjadi DSL, dan sekarang internet Kecepatan Tinggi, situs web menjadi lebih interaktif, video mulai muncul, kualitas video menjadi lebih baik seiring berjalannya waktu, situs-situs seperti ketika Youtube mulai muncul dan segalanya menjadi sedikit lebih mudah di sisi penelitian. Semakin banyak tutorial tersedia, beberapa bagus dan bermanfaat di mana yang lain mengajarkan praktik buruk ...
Saya juga menghabiskan banyak waktu untuk menemukan dan memperoleh alat yang diperlukan untuk pengembangan. Saya harus belajar sintaks bahasa, proses kompilasi dan kompilasi, menghubungkan, membangun, dan debugging. Kemudian saya harus belajar tentang berbagai perpustakaan dan API yang tersedia di luar sana dan cara mengkonfigurasi proyek atau solusi saya untuk menautkan semua dependensi itu.
Selama bertahun-tahun saya telah menyaksikan bahasa C ++ tumbuh, berkembang dan beradaptasi dari waktu ke waktu. Pada awalnya ia tetap hampir sama selama bertahun-tahun, tetapi dalam 10 tahun terakhir ia telah berubah secara dramatis dalam rentang singkat ini sejak awal.
Saya menyebutkan semua ini karena C ++ adalah salah satu bahasa terberat untuk dikuasai sepenuhnya karena keserbagunaannya, kekuatannya, set fitur yang kaya dan kemampuan untuk memungkinkan Anda menembak diri sendiri di kaki! Dan bahkan dengan semua peringatannya, itu adalah salah satu bahasa yang paling kuat dan disukai yang digunakan dalam industri terkemuka sebagai standar untuk jenis pengembangan ini karena ketika dilakukan dengan benar itu cepat, singkat, dapat diandalkan dan menggunakan cetak kaki terkecil.
Sejak itu saya telah belajar mandiri dalam C / C ++ selama bertahun-tahun dengan tujuan dan fokus pada pembelajaran Pemrograman Grafik 3D dan Desain Mesin Game. Saya telah menghabiskan 100 hingga 1.000 jam untuk mencari, meneliti, dan banyak lagi dalam membaca, mempelajari, dan menerapkan pengetahuan itu ke dalam perancangan produk dan aplikasi yang bermanfaat. Saya selalu memiliki keinginan dan keinginan untuk ingin belajar lebih banyak untuk meningkatkan keahlian dan keterampilan saya.
Ini adalah tahap pertama, kemudian saya mulai membaca dan bekerja dengan DirectX 9.c, yang telah saya lakukan di C / C ++ dan bahkan C #. Kemudian saya pindah ke DirectX 10 dan Legacy OpenGL 1.0. Dari DirectX 11 dan OpenGL 3.x - 4.x mereka datang dan sekarang saya bahkan telah mencoba tangan saya di Vulkan.
Saya telah membangun mesin permainan yang sukses bekerja melalui berbagai tutorial online baik dalam format teks dan video. Saya sudah menyatakan bahwa saya memiliki latar belakang yang kuat dalam matematika tetapi terbatas pada Kalkulus I & II. Saya harus belajar sendiri Vektor Kalkulus yang saya ketahui dari kelas Fisika berbasis Kalkulus saya di perguruan tinggi, tetapi untuk Aljabar Linier dengan Transformasi Afin dan Geometri Analitik, saya harus mempelajarinya sendiri ketika persamaan, fungsi, metode, algoritma, dan konsep dibutuhkan. Kemudian saya harus belajar bagaimana menerjemahkannya menjadi kode yang efisien, mudah dibaca, dapat diandalkan, dapat digunakan kembali yang generik dan bebas bug semaksimal mungkin dengan melakukan debugging ratusan hingga ribuan jam.
Ini merupakan perjalanan yang luar biasa untuk mempelajari topik dan algoritma yang mencakup manajemen memori, penghitungan referensi, pemasangan, rekursi, dan banyak lagi yang digunakan dalam banyak, jika tidak semua komponen mesin gim di mana mereka sangat luas. Saya bisa mendaftar semuanya di sini, tetapi itu akan menjadi informasi yang cukup untuk mengisi 3 atau 4 ruang jawaban yang layak ditulis. Namun, saya akan memasukkan daftar topik umum bukan hanya sub topik mereka.
Berikut adalah topik atau daftar subjek dalam apa yang terdiri dari mesin permainan yang berfungsi penuh yang mencakup semua teknik rending yang berbeda, mengatur saluran pipa rendering dan shader, teknik naungan dan pencahayaan melalui shader, pemrosesan sebelum dan sesudah, frame buffer, back buffer , pemuatan gambar, pemuatan dan penguraian model dan audio, menciptakan bentuk-bentuk primitif dengan sifat-sifat bahan warna, tekstur dan koordinat normal dengan pemetaan tekstur manual, transformasi objek, tipe kamera, hierarki grafik adegan, kelas manajer untuk tekstur, audio, font, & shader dan manajemen memori, sistem pencatatan dengan penanganan pengecualian, teknik pemrograman multi-threaded dan paralel, jaringan, mesin fisika, deteksi tabrakan, penghasil partikel, animasi, game AI, pembangkitan medan, kotak langit dan kubah langit, perenderan air,dedaunan dan banyak lagi ..., GUI dengan font bertekstur untuk rendering teks, overlay HUD, inventaris, pembuatan peta dan makro, sistem negara dan mesin negara, dan akhirnya menulis parser untuk membuat bahasa skrip Anda sendiri untuk mengotomatisasi sebagian besar objek ini agar memiliki kemampuan untuk mengubah nilai data di dalam mesin tanpa harus mengkompilasi ulang hanya dengan memuat file data untuk mengisi objek dan struktur data dalam wadah masing-masing pada saat startup aplikasi.dan akhirnya menulis parser untuk membuat bahasa skrip Anda sendiri untuk mengotomatiskan banyak objek ini untuk memiliki kemampuan untuk mengubah nilai data dalam mesin tanpa harus mengkompilasi ulang hanya dengan memuat dalam file data untuk mengisi objek data dan struktur dalam wadah masing-masing saat startup aplikasi.dan akhirnya menulis parser untuk membuat bahasa skrip Anda sendiri untuk mengotomatiskan banyak objek ini untuk memiliki kemampuan untuk mengubah nilai data dalam mesin tanpa harus mengkompilasi ulang hanya dengan memuat dalam file data untuk mengisi objek data dan struktur dalam wadah masing-masing saat startup aplikasi.
Selama bertahun-tahun saya telah tertarik untuk ingin belajar bahasa assembly, dari mereka saya ingin belajar tentang kompiler, assembler dan sistem operasi sederhana, maksud saya cara kerja internal mereka, bagaimana mereka dibangun dan dirancang.
Waktu terus berjalan dan kemudian saya sedikit melangkah dan mulai mempelajari emulasi perangkat keras. Saya fokus secara khusus pada NES tetapi ingin belajar emulasi hardware dari CPU secara umum. Ini membuat saya belajar tentang set instruksi di mana saya sudah tahu konsep dan apa itu karena saya sudah akrab dengan keluarga x86 Intel sampai taraf tertentu, tapi sekarang saya harus belajar Set Instruksi 6502.
Namun dengan menyelami ini, saya akhirnya melakukan lebih banyak penelitian dan mulai belajar tentang Arsitektur Set Instruksi dari perspektif Teknik. Ini membuat saya belajar tentang bagaimana CPU dibangun dari gerbang logika dan bagaimana gerbang logika dibangun dari transistor bersama dengan berbagai komponen listrik lainnya. Jadi saya akhirnya belajar tentang ini dari dua perspektif dari atas ke bawah. Kedua metode itu sangat efektif dan saya pikir belajar dari keduanya membantu membangun jembatan atau celah di mana perangkat lunak memakan perangkat keras.
Dari sini, saya harus menyegarkan kembali pada Aljabar Boolean saya dan saya akhirnya belajar tentang K-Maps, Tabel Implikasi, Mesin Negara baik Mealy dan Moore dan berbagai hal lain yang menghubungkan Logika Biner dan Aritmatika dengan Gerbang Logika Fisik dan Sirkuit Terpadu. Dan ini membawa saya ke masa lalu kesal di mana saya mulai bekerja dengan Logisim, dan mulai belajar HDL, VHDL, Verilog dll ...
Saya telah mempelajari semua ini di waktu luang saya ketika saya bisa sepanjang 15 - 18 tahun terakhir.
Berikut adalah beberapa situs dan tautan yang telah memandu saya selama bertahun-tahun. Banyak di antaranya baru-baru ini karena banyak situs yang awalnya saya pelajari dari tidak ada lagi, saya kehilangan tautan dan tidak ingat, atau mesin pencari mendorong mereka di bagian paling belakang dari daftar pencarian mereka ...
Bahasa - C ++
Tutorial Grafik 3D dan Situs Web Sumberdaya
Seri dan saluran Youtube mencakup topik-topik di atas serta perangkat keras, komputer, dan teknik listrik. Ada terlalu banyak untuk dicantumkan sehingga saya akan mencantumkan beberapa di antaranya di sini yang menurut saya paling berguna dan banyak akal. Saya tidak akan memberikan tautan tetapi Anda dapat mencari youtube untuk saluran ini.
- 3Blue1Brown - Matematika Tingkat Lanjut
- Bisqwit - Pemrograman C / C ++ Lanjut (Proyek Aplikasi) - Emulator Perangkat Keras NES
- Jason Turner - Teknik pemrograman C ++ Modern Tingkat Lanjut
- javidx9 - Pemrograman C / C ++ Lanjut (Proyek Aplikasi) - Emulator Perangkat Keras NES / Beberapa Majelis
- MIT OpenCourse - Program Kuliah di Matematika dan Ilmu Komputer
- Kursus Online Bilkent - Program Kuliah di Ilmu Komputer dan Teknik Komputer (MIPS Desain CPU)
- Cherno - Advanced C / C ++ Topik dan Aplikasi Pemrograman - Pengembangan Mesin Game
- Ben Eater - Rekayasa Perangkat Keras - Aplikasi Praktis melalui Breadboards
- Neso Academy - Rekayasa Perangkat Keras - Teori dan Konsep
- Socratica - pemrograman Python
- Sederhananya - Rekayasa Perangkat Keras - Teori dan Konsep
- Bitwise - Advanced C / C ++ Merancang Assembler melalui Emulasi Perangkat Keras
- Bo Qian - C ++ Topik dalam struktur data dan algoritma.
- LineByLine - Pemrograman Vulkan
- Joshua Shucker - Pemrograman Vulkan
- www.MarekKnows.com - C ++, Matematika 3D, dan Pengembangan Mesin Game
Dan ini tidak memperhitungkan beberapa buku yang saya miliki tentang topik-topik ini.
-Catatan- Tolong jangan memilih ini karena ini hanya pesan ke pembaca pengalaman pribadi saya dan tidak ada upaya untuk menjawab atau referensi pertanyaan asli. Dalam beberapa hari berikutnya ketika saya punya waktu; Saya akan menambahkan jawaban tindak lanjut untuk memberikan pemikiran tentang pertanyaan OP sambil memberikan tautan yang bermanfaat sebagai referensi dan serangkaian sumber daya dan saya akan memperbarui jawaban ini juga untuk menyertakan beberapa tautan di sini dan untuk memodifikasi catatan ini. Sudah terlambat dan saat ini saya tidak punya waktu untuk mengoreksi dan mengedit apa yang sudah saya tulis. Saya akan melakukan ini ketika saya bisa ".