এটি পুরানো ওপেনএল-ভিত্তিক গেম ইঞ্জিনের কাছ থেকে আমি প্রায় সাত বছর আগে সি ++ তে লিখিত লেখার চেষ্টা করছিলাম আমার সাথে খালি কারণ আমি কীভাবে 3 ডি ওয়ার্ল্ড এবং এর মধ্যে 2 ডি জিইআইআই রেন্ডারিং অপারেশন পরিচালনা করেছি তা ব্যাখ্যা করার চেষ্টা করছি। আমি আমার ওপেনজিএল রেন্ডারার ক্লাসের মধ্যে চারটি প্রাথমিক পদ্ধতি ব্যবহার করেছি (ওজিএলরেন্ডার) এর মধ্যে:
- ready3D ()3 ডি ওয়ার্ল্ড দৃশ্য রেন্ডার করতে ওপেনজিএল প্রস্তুত করার জন্য ।
- ready2D ()2D জিইউআই রেন্ডার করতে ওপেনজিএল প্রস্তুত করার জন্য ।
- render3D ()আসল 3 ডি ওয়ার্ল্ড দৃশ্যের অঙ্কনের জন্য 3 ডি ।
আসল 2D জিইউআই অঙ্কনের জন্য রেন্ডার 2 ডি () ।
void OGLRender::ready3D()
{
glViewport(0, 0, m_Setup.width, m_Setup.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (float) m_Setup.width / m_Setup.height, 0.1, 5000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
}
void OGLRender::ready2D()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0f, m_Setup.width, m_Setup.height, 0.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.375, 0.375, 0.0);
glDisable(GL_DEPTH_TEST);
}
void OGLRender::render3D()
{
this->ready3D();
// ... draw 3D world scene here ...
}
void OGLRender::render2D()
{
this->ready2D();
// ... draw GUI here ...
}
এবং তারপরে মূল থ্রেড লুপে আমি মূলত কেবল নিম্নলিখিত ক্রমে পদ্ধতিগুলি কল করব:
while(m_drawFrame)
{
gm_Render->render3D(); // draw 3D scene
gm_Render->render2D(); // draw GUI
SDL_GL_SwapBuffers(); // make drawn frame visible
}
সুতরাং, আমি যা করছি তা হচ্ছে আমি প্রথমে আমার 3 ডি ওয়ার্ল্ড দৃশ্যটি আঁকছি এবং তারপরে আমি আমার জিইউআইকে শেষভাবে আঁকছি জিইউআই সর্বদা বিশ্বের দৃশ্যের শীর্ষে থাকে। রেডি 3 ডি () পদ্ধতি 3 ডি ওয়ার্ল্ড প্রজেকশনটি ওয়ার্ল্ড সিন ড্রইংয়ের জন্য প্রস্তুত পায় এবং রেডি 2 ডি () পদ্ধতিটি জিডিআই আঁকার জন্য 2D অর্থো দৃশ্যের জন্য প্রস্তুত হয়। m_Setup.width
এবং m_Setup.height
কেবল দেখুন পোর্ট স্ক্রিনের মাত্রা।
রেডি 2 ডি () পদ্ধতিটি সম্পর্কে বিশেষ যা gluOrtho2D()
ফাংশনটি এটি যুক্তিগুলির সাথে ডাকা হয় যা যখন আমরা জিইউআই আদিমগুলি আঁকেন তখন উইন্ডোজ, ম্যাক এবং অন্যান্য ডেস্কটপ স্ক্রিনের সমন্বয় সিস্টেমগুলির সাথে মেলে নির্দিষ্ট স্ক্রিন স্থানাঙ্কগুলিতে তাদের আঁকেন it যেমন শীর্ষ-বামটি (0,0) (এক্স, ওয়াই) ফর্ম্যাটে রয়েছে যখন নীচে-ডানদিকে(ViewportWidth-1, ViewportHeight-1)
। এবং glTranslatef()
প্রতি পিক্সেল সঠিক অবস্থানের জন্য সঠিক করতে ব্যবহৃত হয়। যাতে আমরা যখন (0,0) থেকে (0,9) মাধ্যমে একটি লাইন আঁকব তখন লাইনটি উপরের বাম থেকে সোজা নীচে দশ পিক্সেল মোট দৈর্ঘ্যে এবং এক পিক্সেলের প্রস্থে আঁকবে।
সামগ্রিকভাবে আপনি সম্ভবত প্রস্তুত2 D () পদ্ধতিটি কী করছেন তাতে আগ্রহী। বেশিরভাগ গেমস কীভাবে 3 ডি ওয়ার্ল্ড সিন এবং জিইআইআই অঙ্কনের ক্রম করে তা সাধারণত আপনাকে ধারণা দেওয়ার জন্য আমি অন্যান্য পদ্ধতির উত্স কোড উদাহরণ সরবরাহ করেছি।
([0...1], [0...1], 0, 1)
কোনও প্রক্ষেপণ, দর্শন বা বিশ্ব ম্যাট্রিক্স সহ স্থানাঙ্কগুলি ব্যবহার করেন তবে তারা সর্বদা পর্দার জায়গাতে অবতরণ করবে।