আমি আমার নিজের 3 ডি ইঞ্জিনটি জাভাস্ক্রিপ্টে ঘূর্ণায়মান করছি এবং কেবল ক্যানভাস অঙ্কন ব্যবহার করছি, কোনও ওয়েবজিএল নেই। এটি আরেকটি মাইনক্রাফ্ট ক্লোন; আমি বাক্স পছন্দ, আমাকে বিচার করবেন না।
এখনও অবধি, একটি জিনিস ব্যতীত সবকিছু আশ্চর্যজনকভাবে কাজ করে: 3 ডি-তে, যখন কিছু অনুভূমিকার কাছাকাছি ক্লিপিং প্লেনের পিছনে যায়, তখন পর্দায় তাদের প্রজেকশনটি উদ্ভট হয়ে আসে (ধরে নেওয়া যাক বিমানের সন্ধানে ব্যবহৃত অন্যান্য উল্লম্বগুলি সামনে রয়েছে)।
আমি এই পয়েন্টগুলি ক্লিপিংয়ের চেষ্টা করেছি কিন্তু তারপরে আমি এই শীর্ষগুলি ব্যবহার করে এমন সারফেসগুলি গর্ত দেখতে পাচ্ছি। ওয়েবজিএল / ওপেনগিএলে গ্রাফিক্স কার্ডটি এই পয়েন্টগুলির যত্ন নেয় এবং বিমানটি সঠিকভাবে রেন্ডার করা হয়, তবে আমার কাছে হার্ডওয়্যারটিতে অ্যাক্সেস নেই তাই আমার নিজের এটি কোডিং করতে হবে।
আমি এটি সম্পর্কে কী নিশ্চিত তা নিশ্চিত নই, বর্তমানে সর্বশেষ যে জিনিসটি মনে আসল তা হ'ল প্লেয়ারের কাছাকাছি ক্লিপিং প্লেনের পিছনে থাকা পয়েন্টগুলির প্রবর্তনটিকে প্রত্যাবর্তন করা, যা যুক্তিসঙ্গত বলে মনে হয় যেহেতু অবশ্যই সামনে থাকা পর্দার জন্য আমার একটি পয়েন্ট প্রজেক্ট করা উচিত ভার্টেক্স এর।
আমার মতামত এখানে:
কী ঘটে তা চিত্রিত করার জন্য এখানে কিছু চিত্র দেওয়া হয়েছে:
দূর থেকে নীল বাক্স পুরোপুরি ভাল রেন্ডার করে।
খেলোয়াড়ের কাছাকাছি ক্লিপিং প্লেনের কিছু অংশ যখন পিছনে যায় আমি বিপরীত প্রক্ষেপণ করি, তবে এটি সঠিক দেখাচ্ছে না:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
মনে রাখবেন পিছনে ধূসর বাক্সটি পুরোপুরি সরিয়ে ফেলা হয়েছে কারণ তার মুখ আঁকার জন্য ব্যবহৃত সমস্ত দিকগুলি প্লেয়ারের পিছনে রয়েছে।
উপরে বা নীচের দিকে তাকালে এটি ঘটে।
এর পিছনে গণিতটি কীভাবে তৈরি করা যায় তা আমি জানি না, আমি আশা করছি যে ইতিমধ্যে কেউ একই সমস্যায় পড়েছে এবং আমাকে সহায়তা করতে পারে।
lineTo(x,y)
ফাংশনটি এখনও বলা যেতে পারে, কেবল আমি জানি না এটি কীভাবে আচরণ করে ... এটি একটি উদ্ভট মাত্রা, আমি সম্মত।