मैं पिछले कुछ दिनों में पहली बार एक रेट्रेटर को हैकिंग कर रहा हूं। हालांकि, कुछ quirks हैं जो मुझे परेशान करते हैं और मैं वास्तव में नहीं जानता कि कैसे काम करना है। शुरुआत के बाद से वहां से एक दृश्य में गोलाकारों का आकार है - जब प्रस्तुत किया जाता है, तो वे वास्तव में अंडाकार की तरह दिखते हैं। बेशक, दृश्य में परिप्रेक्ष्य है, लेकिन अंतिम आकार अभी भी अजीब लगता है। मैंने नमूना प्रतिपादन संलग्न किया है, मेरी समस्या विशेष रूप से छवि के निचले बाएं हिस्से में प्रतिबिंबित क्षेत्र पर दिखाई दे रही है।रेट्रैसर ओवल के रूप में गोलाकार क्यों प्रस्तुत करता है?
मैं वास्तव में नहीं जानता कि यह क्या कारण हो सकता है। यह रे-क्षेत्र चौराहे कोड है जो इस प्रकार लग रहा है हो सकता है:
bool Sphere::intersect(Ray ray, glm::vec3& hitPoint) {
//Compute A, B and C coefficients
float a = glm::dot(ray.dir, ray.dir);
float b = 2.0 * glm::dot(ray.dir, ray.org-pos);
float c = glm::dot(ray.org-pos, ray.org-pos) - (rad * rad);
// Find discriminant
float disc = b * b - 4 * a * c;
// if discriminant is negative there are no real roots, so return
// false as ray misses sphere
if (disc < 0)
return false;
// compute q
float distSqrt = sqrt(disc);
float q;
if (b < 0)
q = (-b - distSqrt)/2.0;
else
q = (-b + distSqrt)/2.0;
// compute t0 and t1
float t0 = q/a;
float t1 = c/q;
// make sure t0 is smaller than t1
if (t0 > t1) {
// if t0 is bigger than t1 swap them around
float temp = t0;
t0 = t1;
t1 = temp;
}
// if t1 is less than zero, the object is in the ray's negative direction
// and consequently the ray misses the sphere
if (t1 < 0)
return false;
// if t0 is less than zero, the intersection point is at t1
if (t0 < 0) {
hitPoint = ray.org + t1 * ray.dir;
return true;
} else { // else the intersection point is at t0
hitPoint = ray.org + t0 * ray.dir;
return true;
}
}
या यह एक और बात हो सकती है। क्या किसी को कुछ पता है? बहुत बहुत धन्यवाद!
इसके अलावा, मुझे यह भी महसूस होता है कि मेरी अपवर्तन बंद है (दाईं ओर क्षेत्र देखें, अपवर्तन सूचकांक 1.8 है)। क्या आप लोग इसके साथ सहमत हैं? – user1845810
क्या होता है जब आप स्क्रीन के केंद्र में केवल एक गेंद प्रस्तुत करते हैं – OopsUser