Saya tidak tahu apakah saya melakukan sesuatu yang salah atau melewatkan sesuatu tetapi saya ingin mensimulasikan cahaya matahari, seperti di hari yang cerah.
Ketika objek menghadap cahaya directional, itu menyala dengan baik dan tidak ada masalah di sana. Jika saya berkeliling objek dan melihat kembali, itu gelap. Tidak terlalu gelap karena saya menggunakan GL_AMBIENT
tetapi masih terlalu gelap untuk hari yang cerah. Jika saya meningkatkan nilainya, itu tidak akan pernah terlihat lebih baik karena sisi objek yang menghadap cahaya akan terlalu terang.
Dan ada masalah lain yang mengganggu dengan cahaya sekitar, ketika melihat bagian belakang objek, saya tidak bisa melihat bentuk apa pun, hanya warna polos. Sulit dijelaskan, berikut beberapa gambar:
Obyek Depan: http://i.stack.imgur.com/YW53X.png
Objek Kembali: http://i.stack.imgur.com/Qufha.png
Seperti yang dapat Anda lihat dengan mudah, sisi depan terlihat bagus, Anda dapat melihat bentuk benda merah itu. Di sisi belakang, polos, Anda tidak bisa melihat bentuk yang sama.
Sekarang, saya tahu bahwa saya melihat bagian belakang sebuah objek dan saya melihat ke arah cahaya dan itu harus lebih gelap daripada sisi depan. Tapi seharusnya tidak terlihat begitu polos seperti ini. Bukan itu yang kita lihat ketika melawan cahaya matahari melihat beberapa objek, kita melihat bahwa objek membentuk beberapa bentuk.
Bagaimana saya dapat memiliki efek yang sama (atau serupa) pada OpenGL?
Cahaya saya saat ini didefinisikan seperti ini:
float posLight0[4] = {-1.0f, 1.0f, 1.0f, 0.0f};
float ambLight0[4] = {0.5f, 0.5f, 0.5f, 0.5f};
glLightfv(GL_LIGHT0, GL_POSITION, posLight0);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambLight0);
Jawaban:
Dengan cahaya sekitar objek Anda tampak terlalu terang karena cahaya difus ditambahkan ke cahaya sekitar, dan cahaya difus standar ke 1.0. Ini menambahkan hingga 1,5, dan semua yang di atas 1,0 dijepit. Atur cahaya difus ke 0,5:
Masalah kedua lebih sulit untuk dipecahkan. Anda dapat mencoba menambahkan beberapa detail halus ke permukaan seperti tekstur atau benjolan peta. Di OpenGL cahaya ambient konstan, tetapi di dunia nyata tidak pernah demikian. Untuk mensimulasikan dunia nyata, beberapa bentuk solusi penerangan global diperlukan. Ambient occlusion sangat membantu di sini, tetapi lebih sulit untuk diterapkan daripada hanya mengatur status OpenGL. Anda dapat memanggang oklusi ambien ke simpul model Anda di perangkat lunak pemodelan 3D Anda atau menggunakan SSAO , tetapi saya tidak akan menjelaskan detailnya.
Yang dapat Anda lakukan dengan mudah adalah menambahkan sumber cahaya redup lain dari beberapa arah lain (mis. Arah berlawanan). Ini tidak akan realistis, tetapi setidaknya itu akan memberikan bentuk untuk sisi belakang objek Anda juga.
Juga pertimbangkan untuk menambahkan highlight specular ke aplikasi Anda. Itu akan membuat benda mengkilap.
Anda juga dapat menentukan warna terang dan material secara terpisah, terutama jika standarnya tidak sesuai untuk Anda.
sumber
GL_SPECULAR
danGL_SHININESS
tampaknya tidak menghasilkan efek apapun meskipun ... saya lakukan perubahanglMaterialfv
untukglMateriali
karena tidak kompilasi. Dan juga mencoba nilai yang lebih besar seperti 128. Kelihatannya sama dengan saya ... Mungkin masalahnya ada pada model saya yang dimuat (obj / mtl), harus melihat.Cahaya ambient OpenGL adalah satu warna, tetapi cahaya sekitar di dunia nyata biasanya lebih terang dari atas dan lebih gelap dari bawah. Anda dapat memperkirakan ini di OpenGL dengan mengatur cahaya sekitar menjadi biru sangat gelap, dan menambahkan cahaya arah biru tua mengarah ke bawah. Itu, ditambah cahaya arah putih terang yang datang dari mana pun matahari berada, dapat mendekati cahaya luar dengan cukup baik.
Apa yang benar-benar harus Anda lakukan adalah menulis shader yang menghitung cahaya per piksel, tetapi untuk sampai ke sana dari mana Anda akan mengambil sedikit waktu.
sumber
Jawaban yang Anda dapatkan di sini cukup bagus. Hanya satu tambahan. Setelah Anda menginginkannya lebih bagus, coba terapkan hamburan atmosfer
sumber