কীভাবে আপনি প্রোগ্রামিকভাবে একটি গোলক তৈরি করেন?


25

কেউ দয়া করে ব্যাখ্যা করতে পারেন যে কিভাবে একটি গোলকের সূচি, সূচক এবং জমিনের স্থানাঙ্ক তৈরি করা সম্ভব হবে? কীভাবে এটি করা যায় সে সম্পর্কে ডকুমেন্টেশনের একটি আশ্চর্যজনক অভাব রয়েছে এবং এটি এমন কিছু যা আমি শিখতে আগ্রহী।

আমি স্পষ্টত, গুগলিং, গেমদেব ডট নেট ইত্যাদি দেখে চেষ্টা করেছি তবে যাইহোক, কিছুই গোলকের পয়েন্টের প্রজন্মকে আচ্ছাদিত করে না, সূচিকর্ম করে এবং অঙ্গবিন্যাস করে।


6
আমি এটিকে বন্ধ করতে ভোট দিতে বা ভোট দিতে যাচ্ছি না, তবে আপনি কি সত্যিই আমাকে বলছেন যে google.com/search?q=h++to+ জেনারেটে +++ স্পিরিএর ++++ এর কোনও ফলাফলই কার্যকর ছিল না? যদি এমনটি হয় তবে আপনার সমস্যাটি আরও বিশদে কী তা বোঝাতে হবে।


আইকোস্ফিয়ারের জন্য অনুসন্ধান করুন। বোবা "পোলার গোলক" এর চেয়ে অনেক বেশি স্মার্ট যা অকেজো মুখ তৈরি করে।
নোটবেন

3
লক্ষণীয়, কিছু সাধারণ উদ্দেশ্যে একটি পুরোপুরি সূক্ষ্ম "গোলক" হ'ল ক্যামেরার মুখোমুখি একটি বৃত্তাকার টেক্সচার সহ একটি কোয়াড।
আআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআ

আমি এখানে আমার গেমের স্কাইডোমের জন্য কীভাবে এটি প্রয়োগ করেছি
দঞ্জির

উত্তর:


36

দুটি সাধারণ পন্থা রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

বামতমতমটিকে ইউভি-গোলক এবং ডানদিকের একটি আইকোস্ফিয়ার বলা হয়।

ফাংশন তাকান: অত্যধিক UV পদ্ধতির ব্যবহার করতে থাকে glutSolidSphere()freeglut sourcecode

এখানে একটি আইকোস্ফিয়ার উত্পাদন সম্পর্কে একটি দুর্দান্ত নিবন্ধ: http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

ইউভি-গোলকটি একটি গ্লোব মত দেখাচ্ছে। অনেকগুলি উদ্দেশ্যে এটি পুরোপুরি ঠিক আছে, তবে কিছু ব্যবহারের ক্ষেত্রে যেমন আপনি যদি গোলকটিকে বিকৃত করতে চান তবে এটি পোষাগুলির চারপাশে অনুভূমিকের ঘনত্ব বেশি হওয়ার পক্ষে অসুবিধে হয়। এখানে আইকোস্ফিয়ারটি আরও ভাল, এর শিখরগুলি সমানভাবে বিতরণ করা হয়েছে।

আপনি এটি আকর্ষণীয়ও পেতে পারেন: http://kiwi.atmos.colostate.edu/BUGS/geodesic/text.html এটি মুখগুলিকে জোনে সংগঠিত করার পদ্ধতির বর্ণনা দেয় describes

http://vterrain.org/Textures/spherical.html আপনি কীভাবে সেগুলি টেক্সচার করতে বেছে নিতে পারেন তার একটি দুর্দান্ত বর্ণনা দেয়।


2
যদিও সাধারণ ধারণাটি ভাল, কোনও শ্লাফলি {3,5} পলিটপকে এটি করার একমাত্র উপায় নয়। সাধারণত, আমি ইউভি-ম্যাপিংয়ের জন্য স্ক্লাফ্লি {4, *} পরিবারের (একটি গোলকের ক্ষেত্রে 4,3 ডলার) সাথে কাজ করতে পছন্দ করি।
মার্টিন সোজকা

সূক্ষ্মভাবে টেসেললেটেড আইকোসোহেড্রাল গোলকগুলি উত্পন্ন করতে কিছুটা ব্যয়বহুল কারণ পুনরাবৃত্তভাবে মুখগুলি উপবিভাজন করার প্রয়োজন হয়।
বোবোবোবো

9

এটি করার 2 টি উপায় রয়েছে:

  1. গোলাকৃতির স্থানাঙ্কে থেটা এবং ফাই হাঁটুন, মুখ এবং ত্রিস উত্পন্ন করুন

  2. একটি আইকোশেড্রন তৈরি করুন এবং প্রত্যাশিতভাবে মহকুমা মুখগুলি তৈরি করুন যতক্ষণ না কাঙ্ক্ষিত টেসেলেলেশন পৌঁছে যায়।

গোলাকৃতির স্থানাঙ্ক ব্যবহার করে চলুন

প্রথম উপায়ে, আপনি কেবল থেটা এবং ফাইয়ের জন্য ডাবল নেস্টেড ব্যবহার করেন। আপনি থেটা এবং ফাই চলার সাথে সাথে আপনি আপনার গোলক তৈরি করতে ত্রিভুজ স্পিন করেন।

এখানে চিত্র বর্ণনা লিখুন

কোডটি এটি করে এমন কিছু দেখতে পাবেন:

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

সুতরাং উপরে নোট করুন, শীর্ষগুলি এবং নীচের ক্যাপটি কেবল ট্রিস ব্যবহার করে, কোয়াডগুলি নয়, এটি গুরুত্বপূর্ণ to

আইকোসেড্রাল গোলক

আইকোশেড্রন ব্যবহার করতে, আপনি কেবল আইকোশেড্রনের পয়েন্টগুলি তৈরি করেন এবং তারপরে এটি থেকে ত্রিভুজগুলি সরিয়ে ফেলুন। একটি icosahedron ছেদচিহ্ন উৎপত্তি বসে আছেন:

(0, ±1, ±φ)
1, ±φ, 0)
(±φ, 0, ±1)
where φ = (1 + 5) / 2 

এরপরে আপনাকে কেবল সেই আইকোস্যাড্রন এবং বায়ুযুক্ত মুখগুলির ডায়াগ্রামটি সেই ভার্টগুলি থেকে দেখতে হবে। আমার কাছে ইতিমধ্যে কোড রয়েছে যা এটি এখানে করে


অর্ধেক শরীর পেতে কীভাবে কোনও ধারণা, থিতা = পাই / 4 থেকে থিতা = 3 পিআই * 4 এর মতো? এই চিত্রটি পছন্দ করুন: i.stack.imgur.com/Jjx2c.jpg আমি এর উপর দিন কাটাচ্ছি তা সমাধান করতে পারছে না।
টিনা জে

3

যদি পয়েন্টগুলি স্থানীয়ভাবে সমান না হয় তবে বিশ্বব্যাপী অভিন্ন হওয়া উচিত এবং কোনও সেট প্যাটার্ন অনুসরণ করতে হয় না, আপনি ব্যাসার্ধ r এর সাথে একটি গোলকের উপর n পয়েন্ট বিতরণ করতে ডার্ট-নিক্ষেপণ অ্যালগরিদমের বিভিন্ন রূপ ব্যবহার করতে পারেন , গড় ডিস্ট পয়েন্ট পৃথক পৃথক। এই মানগুলি তখন মোটামুটি:

  1. আপনি যদি একটি নির্দিষ্ট পরিমাণের শীর্ষকোষ চান:
    • n = (উল্লম্বের পছন্দসই পরিমাণ)
    • ডিস্ট = 2 × আর × √ ( π / এন )
  2. আপনি যদি শীর্ষ কোণগুলির মধ্যে একটি নির্দিষ্ট গড় দূরত্ব রাখতে চান:
    • n = 4 × π × ( আর / ডিস্ট ) 2
    • ডিস্ট = (কাঙ্ক্ষিত গড় দূরত্ব)

সবচেয়ে সহজ ক্ষেত্রে, আপনি তারপর অভিন্নভাবে দুটি অভিন্ন বিতরণকারী ভেরিয়েবলগুলি u এবং v থেকে (0, 1) বাছাই করে এবং সূত্র θ = 2 × π × u এবং ϕ = অর্ক অনুসারে পোলার স্থানাঙ্কগুলি গণনা করে এলোমেলোভাবে পয়েন্টগুলি বেছে নিতে পারেন them কোস (2 × ভি - 1); তারপরে ইতিমধ্যে বাছাই করা পয়েন্টগুলির খুব কাছে থাকা কোনও পয়েন্ট খারিজ করা। কিছুটা জটিল এবং উল্লেখযোগ্যভাবে আরও ভাল-পারফরম্যান্সকারী অ্যালগরিদমের জন্য, ক্লাইন, জেস্ক্কে, হোয়াইট, রাজ্জাদান এবং ওঙ্কার "পৃষ্ঠাগুলিতে ডার্ট থ্রোয়িং " দেখুন ।

আপনি আপনার প্রথম চারটি পয়েন্ট বাছাই করার পরে (ধরে নিবেন যে এগুলির মধ্যে তিনটিই অবনতিযুক্ত নয় , এটি - তারা একই দুর্দান্ত বৃত্তে পড়ে না তবে এটি অত্যন্ত সম্ভাবনা নয়), আপনি তাদের মধ্যে চারটি মুখ তৈরি করতে পারেন এবং প্রতিবার আপনি যুক্ত করার পরে নতুন পয়েন্ট, আপনি এটি মুখ অনুসারে তিনটি উপ-মুখের মধ্যে বিভক্ত করতে পারেন।

টেক্সচারের উদ্দেশ্যে আপনি পয়েন্টগুলি কিউব মানচিত্রে মানচিত্র করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.