ওপেনগলতে আলো বোঝার চেষ্টা করছেন, কীভাবে বাস্তবের সূর্যের আলো অনুকরণ করবেন?


13

আমি জানি না যে আমি কিছু ভুল করছি বা কিছু অনুপস্থিত করছি তবে আমি একটি রোদ দিনের মতো সূর্যের আলো অনুকরণ করতে চাই।

যখন বিষয়টি দিকনির্দেশক আলোর মুখোমুখি হয়, তখন এটি ভালভাবে আলোকিত হয় এবং সেখানে কোনও সমস্যা নেই। আমি যদি বস্তুর আশেপাশে যাই এবং এটি ফিরে দেখি তবে অন্ধকার। এটি খুব বেশি অন্ধকার নয় কারণ আমি ব্যবহার করছি GL_AMBIENTতবে এটি একটি রৌদ্রোজ্জ্বল দিনের জন্য এখনও খুব অন্ধকার। আমি যদি মানটি বাড়িয়ে তুলি তবে এটি আর কখনও ভাল লাগবে না কারণ আলোর মুখোমুখি অবজেক্টটির পাশটি খুব উজ্জ্বল হবে।

পরিবেষ্টনের আলোতে আর একটি বিরক্তিকর সমস্যা রয়েছে, যখন বস্তুর পিছনের দিকে তাকানো হয় তখন আমি কোনও আকৃতি দেখতে পাচ্ছি না, কেবল একটি সরল রঙ। ব্যাখ্যা করা শক্ত, এখানে কয়েকটি ছবি:

অবজেক্ট ফ্রন্ট: http://i.stack.imgur.com/YW53X.png
অবজেক্ট পিছনে: http://i.stack.imgur.com/Qufha.png

আপনি সহজেই দেখতে পাচ্ছেন, সামনের দিকটি দেখতে দুর্দান্ত দেখাচ্ছে, আপনি সেই লাল জিনিসটির আকৃতি দেখতে পারবেন। পিছনের দিকে, এটি সমতল, আপনি একই আকার দেখতে পারবেন না।

এখন, আমি জানি যে আমি কোনও বস্তুর পেছনের দিকে চেয়ে আছি এবং আমি আলোর দিকে তাকিয়ে যাচ্ছি এবং এটি সামনের দিকের চেয়ে গাer় হওয়া উচিত। তবে এটি এতটা সরল দেখাচ্ছে না। সূর্যের আলোর বিপরীতে যখন কোনও বস্তুর দিকে তাকানোর সময় আমরা এটি দেখতে পাই না তখন আমরা দেখতে পাই যে বস্তুগুলি কিছু আকার তৈরি করে।

আমি কীভাবে ওপেনজিএলে একই (বা অনুরূপ) প্রভাব ফেলতে পারি?

আমার আলো বর্তমানে এটির মতো সংজ্ঞায়িত হয়েছে:

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);

আমি পরামর্শ দিচ্ছি যে আপনি যদি সম্ভব হয় তবে শেডারের ব্যবহার বিবেচনা করুন। ওপেনজিএল স্থির-ফাংশন পাইপলাইন মোটামুটি সহজ আলোক মডেল ব্যবহার করে, তবে শেডাররা আপনাকে গণিতে সম্পূর্ণ নিয়ন্ত্রণ দেয়।
অবিশ্বাস্য ভিক্ষু

উত্তর:


11

পরিবেষ্টিত আলোকের সাহায্যে আপনার অবজেক্টগুলি খুব উজ্জ্বল প্রদর্শিত হবে কারণ বিস্তৃত আলোটি পরিবেষ্টিত আলোতে যুক্ত করা হয়েছে এবং ছড়িয়ে পড়া আলো ডিফল্ট ১.০ এ পরিণত হয়েছে। এটি 1.5 পর্যন্ত যোগ করে এবং 1.0 এর উপরে সমস্ত কিছু ক্ল্যাম্প করা হয়। বিচ্ছুরিত আলোকে 0.5 তে সেট করুন:

float difLight0[4] = {0.5f, 0.5f, 0.5f, 1.0f};
glLightfv(GL_LIGHT0, GL_DIFFUSE, difLight0);

দ্বিতীয় সমস্যাটি সমাধান করা কঠিন। আপনি পৃষ্ঠে কিছু সূক্ষ্ম বিবরণ যুক্ত করার চেষ্টা করতে পারেন যেমন টেক্সচার বা টুপি ম্যাপ। ওপেনজিএলে পরিবেষ্টনের আলো ধ্রুবক, তবে বাস্তব বিশ্বে এটি কখনও হয় না। বাস্তব বিশ্বের অনুকরণ করতে, বৈশ্বিক আলোকসজ্জা সমাধানের কিছু ফর্মের প্রয়োজন। পরিবেষ্টনযুক্ত উপস্থিতি এখানে অনেক সহায়তা করে তবে কেবল ওপেনএল রাজ্যগুলি সেট করার চেয়ে প্রয়োগ করা শক্ত। আপনি আপনার 3 ডি মডেলিং সফ্টওয়্যারটিতে আপনার মডেলটির শিখুনটি পরিবেশন করতে পারেন বা এসএসএও ব্যবহার করতে পারেন , তবে আমি বিশদে যাচ্ছি না।

আপনি সহজেই যা করতে পারেন তা হ'ল কিছু অন্য দিক থেকে উদাসীন আলোর উত্স যুক্ত করুন (যেমন বিপরীত দিক)। এটি বাস্তবসম্মত হবে না, তবে কমপক্ষে এটি আপনার বস্তুর পিছনের দিকগুলির জন্যও কিছু আকার দেবে।

আপনার অ্যাপ্লিকেশনটিতে স্পেসুলার হাইলাইট যুক্ত করার বিষয়টিও বিবেচনা করুন। এটি বস্তুকে চকচকে করবে।

float specLight0[4] = {0.5f, 0.5f, 0.5f, 1.0f};
glLightfv(GL_LIGHT0, GL_SPECULAR, specLight0);
glMaterialfv(GL_FRONT, GL_SHININESS, 10.0f); // Shininess between 0 and 128

আপনি পৃথকভাবে হালকা এবং উপাদান রঙ নির্দিষ্ট করতে পারেন, বিশেষত যদি ডিফল্টগুলি আপনার পক্ষে উপযুক্ত না হয়।


সুতরাং ওপেনজিজিএলে আমি যা চাই তা করার সহজ ও প্রত্যক্ষ উপায় নেই ... খুব খারাপ। সম্ভবত আমি অন্য আলোর উত্স যুক্ত করার চেষ্টা করব, তবে আমি কীভাবে আলোর ঘনত্বটি নির্দিষ্ট করব?
rfgamaral

GL_SPECULARএবং GL_SHININESSযদিও ... আমি পরিবর্তন করেনি কোনো প্রভাব উত্পাদন করতে বলে মনে হচ্ছে না glMaterialfvকরার glMaterialiকারণ এটা কম্পাইল করা হয় নি। এবং 128 এর মতো বৃহত্তর মানটি চেষ্টা করেও দেখেছি It এটি আমার কাছে একইরকম ... সম্ভবত সমস্যাটি আমার বোঝা মডেলটির (আপত্তি / এমটিএল) সমস্যা রয়েছে, একবার নজর দিতে হবে।
rfgamaral

1
@ নাজগুলেড সবেমাত্র পরীক্ষা করেছেন যে হালকা ০ টি স্পিকুলারটি ডিফল্ট ১.০, তবে উপাদান সূচকটি ডিফল্ট ০.০ এ রয়েছে। সুতরাং glLightfv (GL_LIGHT0, GL_SPECULAR, specLight0) পরিবর্তন করুন; to glMaterialfv (GL_FRONT, GL_SPECULAR, specLight0); এটি GLightModeli (GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE) সেট করাও ভাল; অথবা ক্যামেরাটি ঘোরার সময় স্পষ্টুলারটি ভুলভাবে গণনা করা যেতে পারে।
মিসেল

1
@ নাজগুলেড গৌণ আলোকের জন্য, পরিবেষ্টনের জন্য নির্দিষ্ট এবং শৈলিকটি শূন্য এবং প্রসারণের জন্য 0.2 এর মতো কিছু ছোট মান সেট করুন। আপনি সমস্ত লাইটের পরিবেষ্টনকে শূন্যে সেট করতে পারেন এবং এর পরিবর্তে GL_LIGHT_MODEL_AMBIENT এর সাথে বৈশ্বিক পরিবেশন ব্যবহার করতে পারেন।
মিসেল

2

ওপেনলএল এর পরিবেষ্টিত আলো একক রঙ, তবে বাস্তব বিশ্বে পরিবেষ্টিত আলো সাধারণত উপরে থেকে উজ্জ্বল এবং নীচে থেকে গাer় হয়। আপনি খুব সহজেই অন্ধকারের আলোকে খুব গা blue় নীলতে সেট করে এবং নীচের দিকে একটি গা dark় নীল নির্দেশিক আলো যুক্ত করে এটি ওপেনজিএলে আনুমানিকভাবে আনতে পারেন। এটি, আরও সূর্য যেদিকেই আসে একটি উজ্জ্বল সাদা দিকনির্দেশক আলো, আনুমানিক বাইরে বাইরে বেশ ভাল আলোকিত করতে পারে।

আপনার যা করা উচিত তা হল একটি শেডার লিখুন যা পিক্সেল প্রতি হালকা গণনা করে তবে আপনি যেখান থেকে যাচ্ছেন সেখানে পৌঁছাতে একটু সময় লাগবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.