Bagaimana cara membuat cermin atau permukaan reflektif lainnya?

16

Saya hanya ingin tahu bagaimana cara membuat cermin di dalam game 3D? Saran saya adalah / adalah untuk melacak sinar, mengenai objek "cermin" kemudian menggambar gambar kamera kedua ke objek "cermin" yang terletak di "titik" cermin kamera asli dengan menggunakan sisi hit objek cermin sebagai pesawat mirroring.

Kita harus menggunakan satu sinar yang berasal dari pusat kamera asli untuk menentukan titik di mana pusat penglihatan terletak pada bidang cermin.

daemonfire300
sumber
1
Apakah Anda ingin membuat sketsa / gambar "maksud saya" hal ini?
daemonfire300
Anda dapat mencoba memposting ini di stackoverflow.com karena tidak terkait pengembangan game secara langsung; mungkin ada lebih banyak ahli grafis di sana yang dapat membantu Anda.
Ricket

Jawaban:

14

Jika Anda menggunakan OpenGL, bagian FAQ OpenGL 9: Transformasi mencakup cara melakukan hal ini. Dan tidak, itu tidak melibatkan raytracing, karena itu bisa dimengerti cara yang sangat tidak efisien (tapi berkualitas tinggi) untuk mencapai ini.

9.170 Bagaimana cara membuat cermin?

Berikut ini pada dasarnya apa yang dikatakan entri FAQ, dan contoh kode menunjukkan:

  • Siapkan matriks tampilan yang direfleksikan. Melakukan ini untuk mirror yang disejajarkan dengan sumbu dijelaskan dalam paragraf kedua.
  • Gambarkan adegan itu
  • Kembalikan matriks tampilan dan kosongkan buffer kedalaman
  • Jadikan adegan lagi; geometri cermin sebenarnya dalam adegan ini harus tembus cahaya atau seluruhnya transparan, untuk menunjukkan adegan cermin yang sebelumnya dibuat.

Jelas ada banyak ruang untuk optimasi. Saat merender adegan yang dipantulkan, Anda mungkin harus menyisihkan sebanyak mungkin, karena cermin biasanya kecil dan penyisihan di luar layar tidak akan mendukung geometri yang ada di layar tetapi tidak terlihat melalui cermin. Anda juga dapat membuat versi adegan yang disederhanakan melalui cermin. Untuk efek, dan untuk mengaburkan pengguna dari memperhatikan penurunan kualitas, Anda bisa menerapkan shader (misalnya buram, atau mungkin cerah / pudar) saat Anda membuat render cermin Anda.

Saya membayangkan, jika Anda menggunakan DirectX, prosedurnya akan sama.

Ricket
sumber
3
Alternatif, jika Anda memiliki lebih banyak memori daripada waktu render, adalah dengan hanya mencerminkan geometri dunia Anda melalui cermin di editor 3D Anda, maka Anda dapat memodifikasinya agar terlihat seperti yang Anda inginkan (menegakkan tingkat mip yang lebih rendah, dll.). Kami melakukan ini di PS1, di mana barang-barang yang duduk di lantai mengkilap digandakan / terbalik di bawah tanah, dan lantai itu sendiri dibuat semi transparan.
dash-tom-bang
Perhatikan bahwa kode sampel merujuk pada spesifikasi OpenGL yang sudah tidak digunakan lagi. Meskipun demikian konsepnya universal dan mungkin dapat diterapkan secara serupa menggunakan spesifikasi OpenGL terbaru .
patryk.beza