ওয়ার্পিংয়ের আসল গণিতের জন্য, এটি খুব জটিল হয়ে উঠতে পারে, আপনি এখানে কেন শুরু করবেন না ? ।
আপনি এখন কীভাবে এটি প্রয়োগ করতে পারেন সে সম্পর্কে আমি এখনই কথা বলব, ধরে নিই যে আপনি কীভাবে আপনার ডিফর্মেশনটি কম করবেন তার জন্য আপনি ইতিমধ্যে গণিত পেয়েছেন।
2 উপায়:
1) প্রতিটি ফ্রেম, সিলিন্ডার মডেলের প্রতিটি ভার্টেক্সটি দেখুন এবং কোনও উপায়ে এটি অফসেট করুন।
2) আপনি রেন্ডারিংয়ের সাথে ভার্টেক্স শ্যাডারে শীর্ষেগুলি অফসেট করুন । ওপেনজিএল ইএস 2.0 ভার্টেক্স শেডারগুলিকে সমর্থন করে। সুতরাং আপনি ভাগ্যবান, এক উপায়ে।
আপনি কি পর্দায় প্রদর্শিত অবজেক্টটিকে কেবল বদ্ধ করতে চান , বা আপনি কি সেই বস্তুটি মুছতে চান যাতে গেমের প্রতিটি বস্তু জানে যে এটি বিকৃত হয়েছে?
আপনি যদি ভার্টেক্স শ্যাডারে বস্তুটি গুটিয়ে ফেলেন , তবে তা প্রদর্শন / রাস্টারাইজেশনের ঠিক আগেই ঘটে থাকে , সুতরাং এর অর্থ গেমের কোনও অবজেক্টই বিকৃতি সম্পর্কে জানতে পারবে না । আপনি যদি কেবল কোনও স্ক্রিন সেভার তৈরি করেন বা ডিফর্মেশনগুলি এত ছোট হয় তবে অবজেক্টটির সংঘর্ষযোগ্য আকারে তাদের কোনও প্রভাব নেই যদি এটি ঠিক থাকে।
আপনি যখন জ্যামিতি দোমড়ানো প্রান্তবিন্দু shader মডেলের মূল ছেদচিহ্ন আসলে না সরানো , (তারা শুধুমাত্র সরানো প্রদর্শিত )।
ভার্টেক্স শ্যাডারে বিকৃতি
Undeformed:
অঙ্গবিহীন
এটি সিজি টিউটোরিয়ালের 6 অধ্যায়ে , (প্রোগ্রাম # 14)।
এই বিকৃতি তৈরির শেডার কোডটি এরকম
// choose a displacement amount
float displacement = scaleFactor * 0.5 * sin(position.y * frequency * time) + 1 ;
// displace it in the direction of the normal
float4 displacementDirection = float4(normal.x, normal.y, normal.z, 0) ;
// move the vertex
float4 newPosition = position + displacement * displacementDirection ;
// transform (as normal)
oPosition = mul(modelViewProj, newPosition) ;
সুতরাং আপনি দেখতে পাচ্ছেন, ডিসপ্লে করার আগে এটি সঠিকভাবে ঘটে (জিপিইউতে ভার্টেক্স শ্যাডার ঘটে) তাই সিপিইউ কোডটিতে রূপান্তরিত ভার্টেক্স অবস্থানটি অ্যাক্সেস করার কার্যত কোনও উপায় নেই (জিপিইউ থেকে সিপিইউতে ডেটা প্রেরণের উপায় রয়েছে (প্রাথমিকভাবে টেক্সচারের মাধ্যমে) তবে আমরা সেখানে যাবে না)।