গেম বিকাশে আপনি সর্বাধিক সাধারণ স্প্লাইলে কী খুঁজে পাবেন?


11

গেমের বিকাশের সর্বাধিক সাধারণ স্প্লাইনগুলি এখানে তালিকাবদ্ধ করুন, কোনও বক্ররেখাটিকে ব্যবস্থার জন্য পদ্ধতিটির কতগুলি পয়েন্ট প্রয়োজন এবং আপনি কীভাবে একটি ডেটা টাইপ তৈরি করতে পারেন যা আপনাকে বক্ররেখার বিভাজন পেতে দেয়। উদাহরণ: বেজিয়ার কার্ভ, বি-স্প্লিংস, কিউবিক স্প্লাইসস ইত্যাদি etc.

পিএস: আমি এটি একটি সম্প্রদায়ের উইকি হিসাবে রাখছি যাতে আমরা সমস্ত ধরণের স্প্লাইন ইন্টারপোলেশন তালিকাভুক্ত করতে পারি।


1
এটি একটি ভাল প্রশ্ন, আইএমও।
জ্যাকোমে

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

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

উত্তর:


4

সর্বাধিক সাধারণ কেস হ'ল একটি সরলরেখার জন্য রৈখিক অন্তরঙ্গকরণ:

(x0, y0) * ------------------------ * (x1, y1)

বলুন টি [0, 1] এর মধ্যে রয়েছে:

function lerp((x0, y0), (x1, y1), t):
    return (x0+(x1-x0)*t, y0+(y1-y0)*t)

3

ক্যাটমুল-রোম স্প্লাইনস (এক ধরণের ঘনক হরমাইট স্প্লাইন) বেশ কার্যকর হতে পারে, যদি আপনি পয়েন্টের একটি সেট পেয়ে থাকেন যা আপনি (কোনও অতিরিক্ত নিয়ন্ত্রণ পয়েন্টগুলি নির্ধারণ না করে) যেমন ক্যামেরার পথগুলির মধ্যে একটি মসৃণ পথ তৈরি করতে চান want

সমস্ত গণিতের জন্য, দেখুন:

http://en.wikipedia.org/wiki/Cubic_Hermite_spline

আপনি যদি ডি 3 ডিএক্স ব্যবহার করছেন তবে তাদের সাথে ডিল করার জন্য কিছু কার্যকরী ফাংশন রয়েছে (D3DXVec3CatmullRom)


0

সম্পাদনা: দুঃখিত, জেসন মন্তব্যে যেমন উল্লেখ করেছেন, নীচের উত্তরটি স্প্লাইজ সম্পর্কে নয়, দ্বি-মাত্রিক লিনিয়ার (বা বিলাইনার ) ইন্টারপোলেশন সম্পর্কে। যদি কেউ এটি তথ্যবহুল মনে করে তবে আমি এটি মুছে ফেলার জন্য বেছে নিচ্ছি।


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

বিলিনিয়ার অন্তরঙ্গকরণের জন্য আমি জাভা কোডটি এখানে ব্যবহার করছি:

/**
 * Interpolates the value of a point in a two dimensional surface using bilinear spline interpolation.
 * The value is calculated using the position of the point and the values of the 4 surrounding points.
 * Note that the returned value can be more or less than any of the values of the surrounding points. 
 * 
 * @param p A 2x2 array containing the heights of the 4 surrounding points
 * @param x The horizontal position, between 0 and 1
 * @param y The vertical position, between 0 and 1
 * @return the interpolated height
 */
private static float bilinearInterpolate (float[][] p, float x, float y) {
    return p[0][0]*(1.0f-x)*(1.0f-y) + p[1][0]*x*(1.0f-y) + p[0][1]*(1.0f-x)*y + p[1][1]*x*y;
}

/**
 * Finds a 2-dimensional array of the heights of the four points that 
 * surround (x,y).
 *
 * Uses the member variable "verts", an 2D array of Vertex objects which have
 * a member "height" that is the specific vertex's height.
 */
private float[][] nearestFour(float x, float y) {
    int xf = (int) Math.floor(x);
    int yf = (int) Math.floor(y);

    if(xf < 0 || yf < 0 || xf > verts[0].length-2 || yf > verts.length-2) {
        // TODO do something better than just return 0s
        return new float[][]{
                {0.0f, 0.0f},
                {0.0f, 0.0f}
            };
    } else {
        return new float[][]{
                {verts[yf][xf].height, verts[yf][xf+1].height},
                {verts[yf+1][xf].height, verts[yf+1][xf+1].height},
            };
    }
}

নোট করুন যে বাইকুবিক ইন্টারপোলেশন দূরবর্তী পয়েন্টগুলি জুড়ে মসৃণ বা আরও বাস্তবসম্মত প্রবৃত্তি উপস্থাপন করতে পারে; তবে আমি বিলিনিয়ারের সাথে যেতে বেছে নিই কারণ আমার ঘন গ্রিড রয়েছে, অনুকূলিত করার প্রয়াসে (সম্ভবত অকাল)।


প্রশ্নটি একটি স্প্লিন
জেসন কোজাক

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