মোড 7 একটি খুব সাধারণ প্রভাব। এটি কিছু তল / ছাদে 2 ডি x / y টেক্সচার (বা টাইলস) প্রজেক্ট করে। পুরানো এসএনইএস এটি করার জন্য হার্ডওয়্যার ব্যবহার করে, তবে আধুনিক কম্পিউটারগুলি এতটাই শক্তিশালী যে আপনি এই রিয়েলটাইমটি করতে পারেন (এবং আপনার উল্লেখ অনুযায়ী এএসএমের প্রয়োজন নেই)।
3 ডি পয়েন্ট (x, y, z) কে 2 ডি পয়েন্ট (x, y) তে প্রজেক্ট করার জন্য বেসিক 3 ডি গণিত সূত্রটি হ'ল:
x' = x / z;
y' = y / z;
আপনি যখন এটি সম্পর্কে ভাবেন তখন তা বোধগম্য হয়। দূরবর্তী স্থানে থাকা অবজেক্টগুলি আপনার কাছের বস্তুর চেয়ে ছোট। কোথাও যাওয়ার রেলপথ ট্র্যাকগুলি সম্পর্কে ভাবুন:
যদি আমরা সূত্র ইনপুট মানগুলিতে ফিরে তাকাই: x
এবং y
আমরা যে পিক্সেলটি প্রক্রিয়া করছি z
তা হবে এবং পয়েন্টটি কতটা দূরত্ব সম্পর্কে তথ্য হবে information কী z
হওয়া উচিত তা বুঝতে , ছবিটি দেখুন, এটি z
উপরের চিত্রটির জন্য মানগুলি দেখায় :
বেগুনি = কাছাকাছি দূরত্ব, লাল = খুব দূরে
সুতরাং এই উদাহরণে, z
মান হ'ল y - horizon
(ধরে (x:0, y:0)
নেওয়া পর্দার কেন্দ্রে রয়েছে)
আমরা যদি সবকিছু একসাথে রাখি তবে তা হয়ে যায়: (সিউডোকোড)
for (y = -yres/2 ; y < yres/2 ; y++)
for (x = -xres/2 ; x < xres/2 ; x++)
{
horizon = 20; //adjust if needed
fov = 200;
px = x;
py = fov;
pz = y + horizon;
//projection
sx = px / pz;
sy = py / pz;
scaling = 100; //adjust if needed, depends of texture size
color = get2DTexture(sx * scaling, sy * scaling);
//put (color) at (x, y) on screen
...
}
একটি শেষ কথা: আপনি যদি মারিও কার্ট গেম করতে চান তবে আমি মনে করি আপনিও মানচিত্রটি ঘোরান। ভাল এটি খুব সহজ: টেক্সচারের মান পাওয়ার আগে sx
এবং ঘোরান sy
। সূত্রটি এখানে:
x' = x * cos(angle) - y * sin(angle);
y' = x * sin(angle) + y * cos(angle);
এবং যদি আপনি মানচিত্রটি ট্রাফটি সরিয়ে নিতে চান তবে টেক্সচারের মান পাওয়ার আগে কিছু অফসেট যুক্ত করুন:
get2DTexture(sx * scaling + xOffset, sy * scaling + yOffset);
দ্রষ্টব্য: আমি অ্যালগরিদম পরীক্ষা করেছি (প্রায় অনুলিপি-পেস্ট) এবং এটি কার্যকর হয়। এখানে উদাহরণটি রয়েছে: http://glslsandbox.com/e#26532.3 (সাম্প্রতিক ব্রাউজার এবং ওয়েবজিএল সক্ষম হওয়া প্রয়োজন)
দ্রষ্টব্য: আমি সাধারণ গণিত ব্যবহার করি কারণ আপনি বলেছিলেন যে আপনি কিছু সহজ চান (এবং ভেক্টর গণিতের সাথে পরিচিত মনে হয় না)। আপনি উইকিপিডিয়া সূত্র বা আপনার দেওয়া টিউটোরিয়াল ব্যবহার করে একই জিনিস অর্জন করতে পারেন। তারা যেভাবে এটি করেছে তা আরও জটিল তবে আপনারে এফেক্টটি কনফিগার করার আরও অনেক সম্ভাবনা রয়েছে (শেষ পর্যন্ত এটি একইরকম কাজ করে ...)।
আরও তথ্যের জন্য, আমি পড়ার পরামর্শ দিচ্ছি: http://en.wikedia.org/wiki/3D_project# পার্সপ্রেসিভ_প্রজেক্ট