নিকটবর্তী ক্লিপ বিমানের চেয়ে চোখের আরও কাছাকাছি থাকা ক্লিপিংয়ের শীর্ষগুলি আমি কীভাবে পরিচালনা করব?


13

আমি আমার নিজের 3 ডি ইঞ্জিনটি জাভাস্ক্রিপ্টে ঘূর্ণায়মান করছি এবং কেবল ক্যানভাস অঙ্কন ব্যবহার করছি, কোনও ওয়েবজিএল নেই। এটি আরেকটি মাইনক্রাফ্ট ক্লোন; আমি বাক্স পছন্দ, আমাকে বিচার করবেন না।

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

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

আমি এটি সম্পর্কে কী নিশ্চিত তা নিশ্চিত নই, বর্তমানে সর্বশেষ যে জিনিসটি মনে আসল তা হ'ল প্লেয়ারের কাছাকাছি ক্লিপিং প্লেনের পিছনে থাকা পয়েন্টগুলির প্রবর্তনটিকে প্রত্যাবর্তন করা, যা যুক্তিসঙ্গত বলে মনে হয় যেহেতু অবশ্যই সামনে থাকা পর্দার জন্য আমার একটি পয়েন্ট প্রজেক্ট করা উচিত ভার্টেক্স এর।

আমার মতামত এখানে:

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

কী ঘটে তা চিত্রিত করার জন্য এখানে কিছু চিত্র দেওয়া হয়েছে:

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

দূর থেকে নীল বাক্স পুরোপুরি ভাল রেন্ডার করে।

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

খেলোয়াড়ের কাছাকাছি ক্লিপিং প্লেনের কিছু অংশ যখন পিছনে যায় আমি বিপরীত প্রক্ষেপণ করি, তবে এটি সঠিক দেখাচ্ছে না:

focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;

মনে রাখবেন পিছনে ধূসর বাক্সটি পুরোপুরি সরিয়ে ফেলা হয়েছে কারণ তার মুখ আঁকার জন্য ব্যবহৃত সমস্ত দিকগুলি প্লেয়ারের পিছনে রয়েছে।

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

উপরে বা নীচের দিকে তাকালে এটি ঘটে।

এর পিছনে গণিতটি কীভাবে তৈরি করা যায় তা আমি জানি না, আমি আশা করছি যে ইতিমধ্যে কেউ একই সমস্যায় পড়েছে এবং আমাকে সহায়তা করতে পারে।


1
যদি পয়েন্টগুলি কাছের ক্লিপ বিমানের চেয়ে চোখের আরও কাছাকাছি থাকে তবে সেগুলি ক্লিপ করা উচিত - এবং এটি সম্ভবত আপনাকে কোনও বস্তুর "মাধ্যমে" দেখতে দেয়। এটি সাধারণ আচরণ; সংঘর্ষটি সাধারণত সেই বিশেষ চাক্ষুষ শিল্পকে বাধা দেয়। আপনার ক্লিপিং সমাধানে কি কেবল এটিই ভুল ছিল?

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

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

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

কটাক্ষপাত আছে এই টিউটোরিয়াল , এটা ব্যাখ্যা করে পৃথক ত্রিভুজ এর ক্লিপিং গনা কিভাবে, এবং সামগ্রিকভাবে বস্তু
ѕняєє ѕιиgнι

উত্তর:


1

কাছাকাছি ক্লিপিং প্লেনের উদ্দেশ্য হ'ল এটি একটি ক্লিপিং প্লেন । ক্লিপিং প্লেনের বাইরে থাকা ত্রিভুজগুলি ক্লিপ করা হয় : টুকরো টুকরো টুকরো টুকরো টুকরো যাতে প্রতিটি টুকরো যে অবশিষ্ট থাকে তা ক্লিপিং অঞ্চলের মধ্যে থাকে।

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

সমস্যাটি ক্যামেরার পিছনে থাকা শীর্ষে রয়েছে।

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

ক্লিপিংয়ের কাছাকাছি বন্ধ করা একটি হতাশাকে পিরামিডে পরিণত করে। পিরামিডটি বিন্দুতে থামার কারণ হ'ল পিরামিডের উপরে অবস্থিত পয়েন্টগুলি পিরামিডের চার পাশের পিছনে রয়েছে। সুতরাং ক্যামেরার পিছনে যে কোনও পয়েন্ট (পিরামিডের টিপ) উপরে, নীচে, বাম দিকে এবং পর্দার দৃশ্যমান অঞ্চলের ডানদিকে রয়েছে। সব একই সময়ে.

যেমনটি আমি বলেছি: ক্যামেরার পিছনে থাকা দৃষ্টিকোণ প্রজেক্টের নীচে উল্লম্বগুলি বোঝা যায় না।

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

এটি কোনও সহজ প্রক্রিয়া নয়। এটি গণিতকে জড়িত করবে যা কেবলমাত্র আপনার যদি সমজাতীয় স্থানাঙ্ক ব্যবস্থার সম্পূর্ণ জ্ঞান রাখে তবে তা বোধগম্য হয়। বিকল্পভাবে, কোনও ত্রিভুজ যদি আপনি ক্যামেরার পিছনে থাকে তবে আপনি সোজা করে তুলতে পারেন।


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

0

নিকটবর্তী বিমানের পিছনে ত্রিভুজের কোনও অংশটি যদি আপনি ক্লিপিং বিমানের পিছনে পিক্সেল অবস্থান আছে কিনা তা দেখতে প্রতি পিক্সেল চেক করতে পারেন?

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

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

উপরন্তু এখানে একটি লিঙ্ক আপনি সাহায্য করতে পারে হল: http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter42.html


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