আপনি দৃষ্টিকোণে আঁকতে পারেন এমন সবচেয়ে বড় ক্ষেত্রটি কীভাবে খুঁজে পাবেন?
উপর থেকে দেখা, এটি হবে:
যোগ করা হয়েছে: ডানদিকে হতাশায়, আমি চারটি পয়েন্ট চিহ্নিত করেছি যা আমি মনে করি যে আমরা কিছু জানি। আমরা ফ্রসামের সমস্ত আটটি কোণ এবং নিকটস্থ এবং দূরবর্তী কেন্দ্রগুলি আনপোজোজ করতে পারি। সুতরাং আমরা পয়েন্ট 1, 3 এবং 4 জানি। আমরা জানি যে পয়েন্ট 2 3 থেকে 4 হিসাবে একই দূরত্ব 4 থেকে 4 হয় তাই আমরা পেতে 1 লাইন 1 থেকে 4 পয়েন্ট 2 নিকটতম পয়েন্ট গণনা করতে পারেন কেন্দ্র? তবে আসল গণিত এবং কোড আমাকে এড়িয়ে চলে।
আমি যতটা সম্ভব মডেলগুলি আঁকতে চাই (যা প্রায় গোলাকৃতির এবং যার জন্য আমার কাছে মিনি মিনি সীমাবদ্ধ গোলক রয়েছে)।
আপডেট: বোবোবোবো এবং নাথান রিডের পরামর্শ অনুযায়ী আমি বৃত্ত অন টু-প্লেন পদ্ধতির প্রয়োগের চেষ্টা করেছি :
function getFrustumsInsphere(viewport,invMvpMatrix) {
var midX = viewport[0]+viewport[2]/2,
midY = viewport[1]+viewport[3]/2,
centre = unproject(midX,midY,null,null,viewport,invMvpMatrix),
incircle = function(a,b) {
var c = ray_ray_closest_point_3(a,b);
a = a[1]; // far clip plane
b = b[1]; // far clip plane
c = c[1]; // camera
var A = vec3_length(vec3_sub(b,c)),
B = vec3_length(vec3_sub(a,c)),
C = vec3_length(vec3_sub(a,b)),
P = 1/(A+B+C),
x = ((A*a[0])+(B*a[1])+(C*a[2]))*P,
y = ((A*b[0])+(B*b[1])+(C*b[2]))*P,
z = ((A*c[0])+(B*c[1])+(C*c[2]))*P;
c = [x,y,z]; // now the centre of the incircle
c.push(vec3_length(vec3_sub(centre[1],c))); // add its radius
return c;
},
left = unproject(viewport[0],midY,null,null,viewport,invMvpMatrix),
right = unproject(viewport[2],midY,null,null,viewport,invMvpMatrix),
horiz = incircle(left,right),
top = unproject(midX,viewport[1],null,null,viewport,invMvpMatrix),
bottom = unproject(midX,viewport[3],null,null,viewport,invMvpMatrix),
vert = incircle(top,bottom);
return horiz[3]<vert[3]? horiz: vert;
}
আমি স্বীকার করছি যে আমি এটি ডানা দিচ্ছি; আমি 2 ডি কোডটি 3 মাত্রায় প্রসারিত করে অভিযোজিত করার চেষ্টা করছি । এটি নিখরচায়কে সঠিকভাবে গণনা করে না; গোলকের কেন্দ্রবিন্দুটি প্রতিবার ক্যামেরা এবং উপরের-বামের মধ্যবর্তী লাইনে এবং এটি খুব বড় (বা খুব কাছে) বলে মনে হয়। আমার কোডে কোন সুস্পষ্ট ভুল আছে? পদ্ধতির, যদি স্থির হয়, কাজ করে?