2012-12-28 17 views
7

मैं पिछले कुछ दिनों में पहली बार एक रेट्रेटर को हैकिंग कर रहा हूं। हालांकि, कुछ quirks हैं जो मुझे परेशान करते हैं और मैं वास्तव में नहीं जानता कि कैसे काम करना है। शुरुआत के बाद से वहां से एक दृश्य में गोलाकारों का आकार है - जब प्रस्तुत किया जाता है, तो वे वास्तव में अंडाकार की तरह दिखते हैं। बेशक, दृश्य में परिप्रेक्ष्य है, लेकिन अंतिम आकार अभी भी अजीब लगता है। मैंने नमूना प्रतिपादन संलग्न किया है, मेरी समस्या विशेष रूप से छवि के निचले बाएं हिस्से में प्रतिबिंबित क्षेत्र पर दिखाई दे रही है।रेट्रैसर ओवल के रूप में गोलाकार क्यों प्रस्तुत करता है?

Sample Image

मैं वास्तव में नहीं जानता कि यह क्या कारण हो सकता है। यह रे-क्षेत्र चौराहे कोड है जो इस प्रकार लग रहा है हो सकता है:

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

या यह एक और बात हो सकती है। क्या किसी को कुछ पता है? बहुत बहुत धन्यवाद!

+0

इसके अलावा, मुझे यह भी महसूस होता है कि मेरी अपवर्तन बंद है (दाईं ओर क्षेत्र देखें, अपवर्तन सूचकांक 1.8 है)। क्या आप लोग इसके साथ सहमत हैं? – user1845810

+0

क्या होता है जब आप स्क्रीन के केंद्र में केवल एक गेंद प्रस्तुत करते हैं – OopsUser

उत्तर

4

ऐसा लगता है कि आप वास्तव में विस्तृत field of view (FoV) का उपयोग कर रहे हैं। यह विशेष रूप से किनारों की ओर चित्र को विकृत करते हुए मछली-आंखों के लेंस का प्रभाव देता है। आमतौर पर 90 डिग्री की तरह कुछ (यानी दिशा में 45 डिग्री) एक उचित तस्वीर देता है।

अपवर्तन वास्तव में काफी अच्छा दिखता है; यह उलटा हुआ है क्योंकि अपवर्तन सूचकांक बहुत अधिक है। अच्छी तस्वीरें this question में हैं।

+0

याय, यह समाधान है! मैं इस बारे में सोचा था कि एफओवी उतना ही कम पैरामीटर था जिसे मैंने परियोजना की शुरुआत के बाद कभी नहीं बदला था। अनेक अनेक धन्यवाद :) – user1845810

संबंधित मुद्दे