इसे करने के 2 तरीके हैं:
गोलाकार निर्देशांकों में थीटा और phi को चलाएं, चेहरे और ट्रिस उत्पन्न करें
वांछित टेस्यूलेशन तक पहुंचने तक एक आइकोसैहेड्रॉन और पुनरावर्ती उपविभाजन चेहरे बनाएं।
गोलाकार निर्देशांक का उपयोग करते हुए क्षेत्र
पहले रास्ते के लिए, आप बस थीटा और फि को चलने के लिए एक डबल नेस्टेड का उपयोग करते हैं। जैसे ही आप थीटा और फि चलते हैं, आप अपने गोले को बनाने के लिए त्रिकोणों को घुमाते हैं।
ऐसा करने वाला कोड कुछ इस तरह दिखाई देगा:
for( int t = 0 ; t < stacks ; t++ ) // stacks are ELEVATION so they count theta
{
real theta1 = ( (real)(t)/stacks )*PI ;
real theta2 = ( (real)(t+1)/stacks )*PI ;
for( int p = 0 ; p < slices ; p++ ) // slices are ORANGE SLICES so the count azimuth
{
real phi1 = ( (real)(p)/slices )*2*PI ; // azimuth goes around 0 .. 2*PI
real phi2 = ( (real)(p+1)/slices )*2*PI ;
//phi2 phi1
// | |
// 2------1 -- theta1
// |\ _ |
// | \ |
// 3------4 -- theta2
//
//vertex1 = vertex on a sphere of radius r at spherical coords theta1, phi1
//vertex2 = vertex on a sphere of radius r at spherical coords theta1, phi2
//vertex3 = vertex on a sphere of radius r at spherical coords theta2, phi2
//vertex4 = vertex on a sphere of radius r at spherical coords theta2, phi1
// facing out
if( t == 0 ) // top cap
mesh->addTri( vertex1, vertex3, vertex4 ) ; //t1p1, t2p2, t2p1
else if( t + 1 == stacks ) //end cap
mesh->addTri( vertex3, vertex1, vertex2 ) ; //t2p2, t1p1, t1p2
else
{
// body, facing OUT:
mesh->addTri( vertex1, vertex2, vertex4 ) ;
mesh->addTri( vertex2, vertex3, vertex4 ) ;
}
}
}
तो ऊपर ध्यान दें, केवल ट्रिस का उपयोग करके शीर्ष टोपी और नीचे की टोपी को हवा देना महत्वपूर्ण है, क्वाड्स नहीं।
इकोसाहेड्रल क्षेत्र
एक icosahedron का उपयोग करने के लिए, आप बस icosahedron के बिंदु उत्पन्न करते हैं और फिर उसमें से त्रिकोणों को हवा देते हैं। एक आईकोसह्ड्रोन के कोने मूल पर बैठे हैं:
(0, ±1, ±φ)
(±1, ±φ, 0)
(±φ, 0, ±1)
where φ = (1 + √5) / 2
फिर आपको बस उन वर्ट्स से एक आइकोसैहेड्रोन और विंड फेस के आरेख को देखना होगा। मेरे पास पहले से ही कोड है जो इसे यहां करता है ।