ঠিক কী কারণে কোনও পৃষ্ঠকে অন্যটি ওভারল্যাপ করে?


10

এক পৃষ্ঠের অন্যটি ওভারল্যাপের কারণ কী তা আমি সত্যিই বুঝতে পারি না। আমি যে 3D ইঞ্জিন তৈরি করছি তাতে আমার কৌশলটি প্রান্তের ক্ষেত্রে ব্যর্থ হচ্ছে।

আমার পদ্ধতিটি পৃষ্ঠ থেকে সুদৃ .় থেকে নিকটতম দিকে আঁকতে বাছাই করা হচ্ছে। ঘনিষ্ঠতা নির্ধারণ করতে, আমি গড় z মানগুলি তুলনা করছি। কখনও কখনও, তবে, ওভারল্যাপিং পৃষ্ঠের ওভারল্যাপিংয়ের তুলনায় একটি উচ্চতর গড় z মান থাকে। সুতরাং, আরও দূরে পৃষ্ঠটি আরও কাছাকাছি রঙ করা হয়েছে - এর ফলে উদ্ভট উপস্থাপনের ফলাফল:

পাশে লাল রঙের একটি অংশ সহ বড় বেগুনি বর্গক্ষেত্র

যা দেখার জন্য বোঝানো হচ্ছে তা হল কেবল কিউবের বেগুনি সামনের পৃষ্ঠ, যখন লাল পার্শ্বের পৃষ্ঠটি বেগুনি রঙের উপরে আঁকা থাকে। বেগুনি পৃষ্ঠের গড় z মান বেশি, এবং 'আরও দূরে'। সুতরাং এই কৌশলটি সঠিক কিনা তা নিয়ে আমার কিছুটা সন্দেহ রয়েছে।

আমি যা চেষ্টা করেছি তা হ'ল ক্যামেরা (অর্থাত্ উত্স) থেকে পৃষ্ঠের দূরত্ব পাওয়া, তবে তারপরে আমার একটি বিন্দু দরকার। আমি প্রতিটি পৃষ্ঠের মাঝখানেটি বেছে নিয়েছি তবে এটি সবসময় কাজ করে বলে মনে হয় না কারণ সমস্ত পৃষ্ঠতল একে অপরের মতো বড় নয়।

সুতরাং, উত্সের দিকে পৃষ্ঠের ঘনিষ্ঠতার ক্রম নির্ধারণের একটি নির্ভরযোগ্য উপায় কী?

উত্তর:


11

আপনি চিত্রশিল্পীদের অ্যালগোরিদম বাস্তবায়নের চেষ্টা করছেন বলে মনে হচ্ছে । আমি অনুমান করছি যে আপনি স্ক্র্যাচ থেকে শিখনের অনুশীলন হিসাবে একটি রাস্টারাইজার লেখার চেষ্টা করছেন, কারণ বেশিরভাগ আধুনিক 3 ডি হার্ডওয়্যার বার্টের উল্লেখ করেছেন (জেড / ডিপথ বাফার) ব্যবহার করে। চিত্রকরগণ সমস্ত ক্ষেত্রে কাজ করতে অ্যালগরিদম ব্যবহার করার জন্য আপনার সম্ভাব্য পরিস্থিতিগুলি সমাধান করার জন্য পৃষ্ঠতলগুলি উপ-বিভাজন করার জন্য প্রস্তুত থাকতে হবে (যেমন উইকিপিডিয়া পৃষ্ঠায় প্রদর্শিত ওভারল্যাপিং বহুভুজের সমস্যা)।

নিকটতম থেকে নিকটতম রেন্ডারিংয়ের মাধ্যমে আপনি পিক্সেল উপস্থাপনে সময় ব্যয় করছেন যা সম্ভবত পরে অন্যান্য বহুভুজ দ্বারা সঞ্চারিত হবে, যখন আপনি বহুভুজগুলিতে টেক্সচার এবং জটিল ছায়াছবিগুলি মূল্যবান চক্রের অপচয় করতে শুরু করেন। এই কারণেই আধুনিক হার্ডওয়্যার আপনাকে সামনে থেকে পিছনে রেন্ডার করতে পছন্দ করবে, গভীরতার বাফার ব্যবহার করে রেন্ডার করা পিক্সেলটি স্ক্রিনের চেয়ে বেশি দূরে রয়েছে কিনা তা নির্ধারণ করতে (এবং তাই এটি বাতিল করা যেতে পারে)।

এমনকি বেশিরভাগ আধুনিক ত্বরণের হার্ডওয়্যার সহ আপনাকে এখনও কোনও আধা-স্বচ্ছ বহুভুজকে সামনের দিকে এবং সামনের দিকে রেন্ডার করতে হবে, সমস্ত অস্বচ্ছ বহুভুজগুলি রেন্ডার হয়ে গেলে কেবল এটিই রেন্ডারিং করতে হবে।


আপনি ঠিক বলেছেন যে আমি একটি সাধারণ রেন্ডারার তৈরি করছি। মুল বক্তব্যটি হ'ল আমি কোনও 3 ডি লাইব্রেরি ব্যবহার করছি না। আমি সমস্ত প্রজেকশন গণনা নিজেই করছি এবং তারপরে 2D অঙ্কন গ্রন্থাগার ব্যবহার করে লাইনগুলি আঁকছি। এটি সেখানে দ্রুততম নয় এবং আমি প্রতি পিক্সেল ভিত্তিতে কিছুই করছি না। আমার প্রতিটি পৃষ্ঠের মাত্র 4 পয়েন্ট রয়েছে এবং একটি রঙ দিয়ে আয়তক্ষেত্রাকার আকারটি পূরণ করুন। যেহেতু আমি এক সময় একটি সম্পূর্ণ পৃষ্ঠ অঙ্কন করছি, তাই আমি কি এই কথাটি সঠিকভাবে বলতে পারি যে আমাকে আবার সামনের দিকে টানতে হবে?
pimvdb

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

রজার পার্কিনস ঠিক আছে। আপনি বহুভুজগুলি কাটা না করে আপনি সেভাবে সঠিক জেড-বাছাই করতে সক্ষম হবেন না (যার অর্থ আপনার কাছে সর্বদা কিছু প্রান্তের কেস থাকবে)। এটি বরং ধীর হয়ে উঠতে পারে।
বাম্মজ্যাক

আমি এটা কাজ পেয়েছিলাম! আমি যা করেছি তা হ'ল ব্যাকফেস ক্লুলিং এবং বাছাইয়ের সংমিশ্রণ: একটি কঠিন ঘনক্ষেত্রে কিছু মুখ দৃশ্যমান হয় না অন্যরা (সর্বোচ্চ 3) 3 তাই আমি প্রথমে অ-দৃশ্যমান অংশগুলি এবং সেগুলির উপরে দৃশ্যমান অংশগুলি আঁকলাম। এটি একটি কবজির মতো কাজ করে, আমি যদি এক বা একাধিক দিক সরিয়ে ফেলি তবে সেগুলি ওভারল্যাপিং হয় তবে এখনও সঠিক ক্রমে আঁকা। ধন্যবাদ!
pimvdb

1
এটি কেবল কিউবগুলির মতো সাধারণ উত্তল আকারের জন্য কাজ করবে। আমি আনন্দিত এটি বর্তমানে আপনার জন্য কাজ করছে, তবে এটি কোনও সাধারণ সমাধান নয়।
রিচার্ড ফ্যাবিয়ান

3

আপনার যা আছে তা দৃশ্যমান সমস্যা । একটি সমাধান একটি জেড-বাফার ব্যবহার করে ।


ধন্যবাদ, তবে জেড-বাফারিংয়ের জন্য প্রতি পিক্সেল রেন্ডারিং দরকার যদি আমি ভুল না করি। আমি এটি করছি না - আমি কিউবের অনুমিত পয়েন্টগুলির মধ্যে সোজা লাইন আঁকছি। জেড-বাফারিং কি এখনও সম্ভব?
pimvdb

এমনকি যদি আপনি সরল রেখাগুলি আঁকেন, চিত্রটি স্ক্রিনে আসার আগে এক পর্যায়ে (বা বিটম্যাপ ফাইল) এটি পিক্সেল ফর্ম্যাটে থাকবে।
বার্ট ভ্যান হিউকেলোম

এটি সঠিক তবে আমার অঙ্কন পাঠাগারটি 20fps সহ পিক্সেল রেন্ডারিং করতে খুব ধীর। ধন্যবাদ যদিও.
pimvdb

2

তাদের গড় জেড-মান অনুসারে মুখগুলি বাছাই করা কার্যকর হয় না, কারণ গড় জেড-মানটি শীর্ষে বা এমনকি পৃষ্ঠ পিক্সেলের প্রকৃত জে-মান সম্পর্কিত কোনও তথ্য সরবরাহ করে না।

উদাহরণ (সতর্কতা, ASCII শিল্প এগিয়ে):

          /
         /
cam     /
-->    / 
      /
     /--       <--B
    /
    ^--A

দুটি মুখ এ এবং বি রয়েছে ক্যামেরার দৃষ্টিকোণ থেকে এ বি এর সামনে রয়েছে তবুও বি এর গড় জেড-মান আরও কম। আসুন অন্য জেড-মানগুলি দেখুন:

  • এ এর সর্বনিম্ন জেড-মান 4
  • এ এর সর্বাধিক জেড-মান 11
  • সুতরাং এ এর ​​গড় জেড-মান 7.5
  • বি এর সর্বনিম্ন জেড-মান 6 হয়
  • বি এর সর্বাধিক জেড-মান 8 হয়
  • সুতরাং বি এর গড় জেড-মান 7 হয়

আপনি তাদের সর্বনিম্ন জেড-মান অনুসারে বাছাই করতে চেষ্টা করতে পারেন তবে এমন ক্ষেত্রেও খুব কার্যকর হয় না। কেবলমাত্র একটি জেড-মান ব্যবহার করে স্বেচ্ছাচারিত মুখগুলি সঠিকভাবে সাজানোর কোনও উপায় নেই।

নিওলের অ্যালগরিদম http://en.wikedia.org/wiki/Newell এর_আলগোরিদিম আপনি যা করেন তা হ'ল জেড-মানগুলির সর্বনিম্ন / সর্বাধিক সীমাবদ্ধ করা sort দুটি মুখের ব্যাপ্তি যদি ওভারল্যাপ না করে তবে আপনি কোনটির সামনে আছেন তা নিশ্চিতরূপে জানতে পারবেন। যদি তারা তা করে, কখনও কখনও আপনার মুখগুলি পুরোপুরি বিভক্ত করতে হয়। কখনও কখনও এটি অন্তর্ভুক্তি বা অন্য কোনও কৌশল জন্য প্রতিটি শিখর রেট্রেস যথেষ্ট হবে।


এই চিত্রটি আমি যা অনুমান করতে যাচ্ছিলাম তার স্ক্রিনশটে যা হচ্ছে তার একটি ওভারহেড ভিউ।
8:41

1

এটি করার মাধ্যমে আপনি রেন্ডারিং সম্পর্কে শিখছেন এটি ভাল। যশ। এই উদাহরণস্বরূপ, PS1- তে কোনও "চিত্রকরগণের অ্যালগরিদম" সমাধান নেই, PS1 এ আমরা একে অপরের পাশে থাকাকালীন একই আকারের চারপাশে রাখার চেষ্টা করতাম (যা আপনি হিসাবে করছেন যতদূর আমি বলতে পারি), এবং ব্যাকফেস কুল (যা আপনি করছেন না)

ব্যাকফেস কুলিং তার দিকের জন্য স্ক্রিন স্পেসে পৃষ্ঠের স্বাভাবিকটি পরীক্ষা করে (কেবলমাত্র পর্দার স্থানটি সাধারণ রূপান্তরিত হতে গভীরতার উপাদানটির সাইন পান (আমাদের ক্ষেত্রে এটি স্বাভাবিকের জেড ছিল)) বা দুটি ভেক্টরের ক্রস প্রোডাক্ট ত্রিভুজ অর্থাৎ ক্রস (v1-v0, v2-v0)

আপনি যদি ব্যাকফেস কুলিং বাস্তবায়ন করেন তবে আপনি যে কাজটি চালিয়ে যাচ্ছেন তার পরিমাণও হ্রাস করুন .. ডাবল জয়।


আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ. আমি ব্যাকফেস ক্লুলিং সম্পর্কে পড়েছি তবে মূল বিষয়টি হ'ল আমি এক দিক সরাতে সক্ষম হতে চাই। একটি শক্ত ঘনক দিয়ে এটি কেবল দুর্দান্ত কাজ করতে পারে তবে আমি যদি একপাশে সরিয়ে ফেলি তবে তত্পরতা ঘটছে so সুতরাং এখনও আমার অনুমান করে এগুলি বাছাই করা দরকার। যাইহোক, আমি একটি পৃষ্ঠের মিডপয়েন্টের মাধ্যমে উত্স থেকে একটি রশ্মি জ্বালানোর ধারণাটি নিয়ে এসেছি। যদি সেই রশ্মি পরে অন্য কোনও পৃষ্ঠকে অতিক্রম করে তবে প্রথম পৃষ্ঠটি দ্বিতীয়টিকে ওভারল্যাপ করে। আপনি সম্ভবত আমাকে বলতে পারেন যে ধারণাটি সঠিক কিনা? ধন্যবাদ!
pimvdb

যদিও আপনার ধারণাটি উদাহরণস্বরূপ আপনার ক্ষেত্রে কাজ করে, এমন অনেকগুলি মামলা রয়েছে যেখানে এটি কাজ করছে না। উদাহরণস্বরূপ, আপনার সেখানে একই দৃশ্য রয়েছে, তবে ক্যামেরাটি এমনভাবে কাত হয়েছে যাতে ভুল রেন্ডারিং কোয়াডের কেন্দ্রটি ওভারল্যাপিং না হয় I আমি মনে করি আপনি আপনার আদিমকে ছোট ছোট টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করে ফেলতে চলেছেন।
রিচার্ড ফ্যাবিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.