float DE (glm :: vec3 p) {const float स्केल = -1.77 एफ, फिक्स्ड रेडियस 2 = 1.0 एफ, मिनराडियास 2 = (0.5 एफ * 0.5 एफ); Const glm :: vec3 p0 = p; Float dr = 1.0f; (Int n = 0; n & lt; 13; n ++) के लिए {// चिंतन करें पी = (glm :: क्लैंप (पी, -1.0 एफ, 1.0 एफ) * 2.0 एफ) - पी; // स्पेलर उलटा const float r2 = glm :: dot (p, p); यदि (आर 2 और लेफ्टिनेंट; मिनराडीस 2) {कॉस्ट फ्लोट टी = (फिक्स्ड रेडिअस 2 / मिनराडीस 2); पी * = टी; डॉ * = टी; } और अगर (आर 2 और लेफ्टिनेंट; नियत रेडियस 2) {const float t = (fixedRadius2 / r2); पी * = टी; डॉ * = टी; } // स्केल & amp; पी = पी * स्केल + p0 का अनुवाद करें; Dr = dr * abs (स्केल) + 1.0 एफ; } वापसी glm :: लंबाई (पी) / एबीएस (डॉ); } और आउटपुट पूरी तरह से अनबॉक्स-जैसा दिखता है:
मैं नेत्र कैसे बदलूं, ताकि मैं घन को ठीक से देखूं?
मुद्दा यह है कि किरण की लंबाई सामान्यीकृत होनी चाहिए:
glm :: vec3 p = glm :: unProject (glm :: vec3 (x, Y, 0), मॉडलव्यूव्यू, प्रोजेक्शन, ग्ल्म :: वीसी 4 (0,0, चौड़ाई, ऊंचाई)), डीआईआर = ग्ल्म :: अप्रप्रोजेक्ट (ग्लम :: वीसी 3 (एक्स, वाई, 1), मॉडलव्यू, प्रक्षेपण, ग्ल्म :: vec4 (0,0, चौड़ाई, ऊंचाई)) - p; Const फ्लोट लेन = glm :: लंबाई (डीआईआर); Dir = glm :: सामान्यीकृत (डीआईआर); फ्लोट डी = 0; (इंट आई = 0; आई & lt; MAX_ITER; i ++) के लिए (const + float d = DE (p + dir * D); डी + = डी; अगर (डी & gt; लेन) तोड़; ...
Comments
Post a Comment