ইউনিট নির্বাচনের চেনাশোনাগুলিকে কীভাবে মার্জ করবেন?


16

আমি মার্জড চেনাশোনা নির্বাচনের এই প্রভাবটি কীভাবে তৈরি করব তা জানতে চাই। চিত্রিত করার জন্য এখানে রয়েছে:

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

মূলত আমি এই প্রভাবটি খুঁজছি:

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

চেনাশোনাগুলির মার্জ প্রভাব কীভাবে অর্জন করা যায়? আমি এই প্রভাব সম্পর্কে কোন ব্যাখ্যা পাইনি। আমি জানি যে এই টেক্সচারটি প্রজেক্ট করতে আমি একটি ডিকাল সিস্টেম বিকাশ করতে পারি তবে মার্জিং এফেক্টটি কীভাবে তৈরি করতে হয় তা আমি জানি না।

যদি সম্ভব হয় তবে আমি খাঁটি ছায়া গো সমাধানের সন্ধান করছি।


আপনি "মার্জ ইফেক্ট" বলতে কী বোঝাতে চেয়েছিলেন?
আশ্চর্য

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

আপনি কি শেডার সমাধানের জন্য জেদ করেন? যদি তা না হয় তবে আপনি কেবল এটি আপনার শেষ ছবিতে সমাধান করেছেন।
আজরা

সর্বশেষ স্ক্রিনশটটি কেবলমাত্র আমি লক্ষ্যবস্তু করছি তা দেখায়। চূড়ান্ত ফলাফলটি আগের স্ক্রিনশটগুলির মতো হওয়া উচিত।
ম্যাট

1
হ্যাঁ, আমি সম্মত, আমি মনে করি যে তারা টেক্সচারের সাথে গতিশীলভাবে একটি জাল বৃত্ত তৈরি করে এবং তারপরে মার্জ করার জন্য জাল কেটে দেয়। এটিও একটি ভাল সমাধান তবে আমি মনে করি এটি কার্যকর করার মেয়াদে এটি আরও সীমাবদ্ধ।
মেট

উত্তর:


8

কয়েকটি কৌশল আপনি করতে পারেন:

জেড-বাফার

আপনি অন্যান্য সমস্ত বস্তু রেন্ডার করার পরে, প্রতিটি ইউনিটের জন্য সর্বাধিক জেড মান সহ ছোট আকারের স্বচ্ছ বৃত্ত রেন্ডার করে। তারপরে মাটিতে নির্বাচন চেনাশোনাগুলি ডিকালগুলি সরবরাহ করুন। যেহেতু তারা জেড-অর্ডারে নীচে রয়েছে তাই ইউনিটের অধীনে এগুলি বাতিল করা হবে।

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

স্টেনসিল

পূর্ববর্তী পদ্ধতির মতো একই, তবে এবার স্টেনসিল বাফার ব্যবহার করুন। কিছু স্টেনসিল মান সহ ইউনিটগুলির জন্য ছোট চেনাশোনাগুলি রেন্ডার করুন, তারপরে নির্বাচনের সিদ্ধান্তগুলি সরবরাহ করুন। আপনার স্টেনসিল মান সহ কোনও উপাদান বাতিল করতে স্টেনসিল সেটআপ করুন।


জেড-বাফার কৌশলটি আকর্ষণীয় তবে আমি প্রথম স্বচ্ছ বৃত্ত কীভাবে গ্রাউন্ড ডেসালগুলি ক্লিপ করতে পারে তা পাই না।
মেট

0

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


1
আমি ধরে নিয়েছি আপনি উত্তরটি থেকে অংশটি এড়িয়ে গেছেন - সমস্ত বৃত্তের অবস্থান এবং রেডিয়াসকে শেডারে পাস করার জন্য।
ক্রোমস্টার বলেছেন, 21:44

@ ক্রোম যদি ওপি সমাধানে কোনও আগ্রহ প্রকাশ করে, আমি আরও বিশদ দিতে পেরে খুশি।
জার্ককোএল

0

আপনি কি এই নীল চেনাশোনাগুলি বোঝাচ্ছেন?

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

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


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

সম্পাদনা 2: আপনার সাধারণ লাল / সবুজ উদাহরণের জন্য: আপনি কোনও পিক্সেল রেন্ডার করার আগে, এই পিক্সেলটি ইতিমধ্যে সবুজ নয় কিনা তা পরীক্ষা করুন। যদি এটি হয় তবে রেন্ডার করবেন না। এই কৌশলটি করবে। প্রকৃতপক্ষে, টেক্সচারটিতে লেখার সময় আপনি বৃত্তের বাইরের / অভ্যন্তরের জন্য এমনকি লাল / সবুজ ব্যবহার করতে পারেন এবং তারপরে অঞ্চলটি রেন্ডার করার সময় সেই মানগুলি পড়ুন এবং সেগুলি পছন্দসই রঙে রূপান্তর করতে পারেন।

যদি আমার উত্তরটি কোনও সুযোগেই খুব বিমূর্ত হয় তবে আমাকে জানান।


আমি সাধারণ ধারণাটি পেয়েছি তবে আপনি যেমন বলেছেন, মার্জ হওয়া চেনাশোনাগুলি সম্পর্কে আমার পক্ষে বিমূর্ত হওয়া একটু :)
ম্যাট

0

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

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

একমাত্র সতর্কতা হ'ল গভীর লড়াইয়ের বিষয়ে আপনাকে সতর্ক থাকতে হবে। অভ্যন্তরের পিছনে যে রূপরেখাটি প্রকৃতপক্ষে রয়েছে তা নিশ্চিত করার জন্য আপনি একটি ছোট অফসেট ব্যবহার করতে পারেন এবং গভীরতা পরীক্ষা দ্বারা মুছে ফেলা হবে। একটি বিকল্প ব্যবহার করা হবে glPolygonOffset()

ধরা যাক যে আপনার দুটি বৃত্ত রয়েছে যা xy- সমতলের সমান্তরাল, কেন্দ্রগুলি (x1, y1, z) এবং (x2, y2, z) সহ with এবং আপনার এই আঁকার কাজগুলি:

// Draw interior part of circle, shown in green in the schematic in the question.
drawInterior(x, y, z);

// Draw outline of circle, shown in red in the schematic in the question.
drawOutline(x, y, z);

অঙ্কনের ক্রমটি তখন deltaছোট অফসেটের মতো দেখায় :

glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
drawInterior(x1, y1, z + delta);
drawInterior(x2, y2, z + delta);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
drawOutline(x1, y1, z);
drawOutline(x2, y2, z);

0

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


হ্যাঁ আমি সে সম্পর্কেও ভেবেছিলাম :) তবে আপনি যেমন বলেছিলেন এটি ছাঁটাই সমাধান নয় এবং এটি খুব সাধারণ সমাধান নয় solution কিন্তু ধন্যবাদ !
ম্যাট

এটি বেশ অস্পষ্ট বর্ণনা
ক্রোমস্টার বলেছেন মনিকা

0

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

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


ধন্যবাদ! সুতরাং প্রথমে দৃশ্যমান অংশগুলি আঁকার পরিবর্তে আমার স্টেনসিলের মধ্যে স্বচ্ছ চেনাশোনাগুলি রেন্ডারিং দিয়ে শুরু করা উচিত। তবে আমি কীভাবে গোল স্বচ্ছ চেনাশোনাগুলি রেন্ডার করব? আমি স্টেনসিলটিতে চিত্রের অংশগুলিকে রেন্ডার করতে সীমাবদ্ধ করতে পারি না। আমি যখন স্টেনসিলকে রেন্ডার করি, সমস্ত কিছু সেখানে যায়, আমি ঠিক আছি?
ডুডলমেট

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

হুম, প্রথম / পাসে কেবল স্টেনসিল বাফারে লিখতে একটি কালো / সাদা চিত্র থাকার বিষয়ে কী হবে যাতে কালো 0 হয়ে যায় এবং স্টেনসিলটিতে সাদা 1 হয়। এটা কি সম্ভব?
ডুডলমেট

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