আমি উত্পন্ন আকারের জন্য কম্পিউটিং নরমালগুলির প্রধানত তিনটি উপায় দেখতে পাচ্ছি।
বিশ্লেষণাত্মক স্বাভাবিক
কিছু ক্ষেত্রে আপনার কাছে স্বাভাবিকগুলি উত্পন্ন করার জন্য পৃষ্ঠের সম্পর্কে পর্যাপ্ত তথ্য রয়েছে। উদাহরণস্বরূপ, গোলকের কোনও বিন্দুর স্বাভাবিক গণনা করা তুচ্ছ। সহজ কথায় বলতে গেলে, আপনি যখন ফাংশনটির ডেরাইভেটিভ জানেন, আপনি সাধারণটিও জানেন।
যদি আপনার কেসটি আপনাকে বিশ্লেষণাত্মক নরমাল ব্যবহারের অনুমতি দেওয়ার পক্ষে যথেষ্ট সংকীর্ণ হয় তবে তারা সম্ভবত নির্ভুলতার দিক দিয়ে সেরা ফলাফল দেবে। যদিও প্রযুক্তিটি খুব ভাল স্কেল করে না: আপনি যদি এমন কেসগুলিও পরিচালনা করতে পারেন যেখানে আপনি অ্যানালিটিক নরমালগুলি ব্যবহার করতে পারবেন না, তবে কৌশলটি সাধারণ ক্ষেত্রে পরিচালনা করা এবং বিশ্লেষককে পুরোপুরি বাদ দেওয়া সহজ হতে পারে।
ভার্টেক্স স্বাভাবিক
দুটি ভেক্টরের ক্রস প্রোডাক্ট একটি ভেক্টরকে তাদের যে বিমানের অন্তর্গত তা লম্ব করে দেয়। সুতরাং একটি ত্রিভুজটির স্বাভাবিক পাওয়া সহজবোধ্য:
vec3 computeNormal(vec3 a, vec3 b, vec3 c)
{
return normalize(crossProduct(b - a, c - a));
}
তদুপরি, উপরোক্ত উদাহরণে, ক্রস পণ্যটির দৈর্ঘ্য আবের অভ্যন্তরের অঞ্চলের সাথে সমানুপাতিক । সুতরাং বেশ কয়েকটি ত্রিভুজ দ্বারা ভাগ করা একটি শীর্ষবিন্দুতে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ওজনকে পৃথক করে ত্রিভুজের পণ্যগুলি যোগ করে সর্বশেষ পদক্ষেপ হিসাবে স্বাভাবিক করা যায়।
vec3 computeNormal(vertex a)
{
vec3 sum = vec3(0, 0, 0);
list<vertex> adjacentVertices = getAdjacentVertices(a);
for (int i = 1; i < adjacentVertices; ++i)
{
vec3 b = adjacentVertices[i - 1];
vec3 c = adjacentVertices[i];
sum += crossProduct(b - a, c - a);
}
if (norm(sum) == 0)
{
// Degenerate case
return sum;
}
return normalize(sum);
}
আপনি quads সঙ্গে কাজ করেন, তাহলে সেখানে একটা চমৎকার কৌতুক আপনি ব্যবহার করতে পারেন হল: একটি চতুর্ভুজ ABCD , ব্যবহার crossProduct(c - a, d - b)
এবং এটি চমত্কারভাবে মামলা পরিচালনা করবে যেখানে চতুর্ভুজ আসলে একটি ত্রিভুজ হয়।
আইজিগো কুইলিজ এই বিষয়টিতে কয়েকটি সংক্ষিপ্ত নিবন্ধ লিখেছিলেন: একটি জালের চতুর নরমালাইজেশন , এবং সাধারণ এবং এন পার্শ্বযুক্ত বহুভুজের ক্ষেত্রফল ।
আংশিক ডেরিভেটিভস থেকে সাধারণ
আংশিক ডেরাইভেটিভগুলি থেকে সাধারণগুলি ফ্রেগমেন্ট শেডারে গণনা করা যায়। পিছনের গণিতটি একই, এই সময়টি স্ক্রিন স্পেসে করা ব্যতীত। অ্যাঞ্জেলো পেস-এর এই নিবন্ধটি কৌশলটি বর্ণনা করেছে: সাধারণ ছাড়াই সাধারণ ।