اموزش ساخت گیم انجین با CPP/C/AL/GL

سلام من جی ار هستم اگر کانال من اپارات را دیدی می توانید متوجه شوید که من صاحب کانال هستم لینک کانال من : کلیک بسم الله الرحمان الرحیم خوب بریم شروع کنیم اول باید بدانیم نحوه ساخت بازی چطور ؟؟؟ هر بازی گیم لوپ دارد به انگلیسی Game Loopدر فارسی به معنایی حلقه ی بازی استهر حلقه بازی داراییورودی - inputپردازش - setرسم یا رندر - Renderو تمام ما چون می خواهیم گیم انجین بسازیم ما اول یک کلاس می سازیم که ان کلاس بازیمان مدریت می کند یعنی ما اول یک فایل هدر به نامه Game.hpp می سازیم ( در فولدر Engine ) #ifndef GAME_HPP#define GAME_HPP#include <stdio.h> class Game{ public: private: };خوب ما می خواهیم الان یک پنجره بسازیم ما برای استفاده از GLFW3 می توانیم پنجره برای OpenGL بسازیم او کی مشکل نیستیعنی ما باید کد مون اینجوری باشد#ifndef GAME_HPP#define GAME_HPP // New #include <GLFW/glfw3.h> #include <stdio.h> class Game{ public: private: GLFWwindow* window; }خوب بعد انکلود کردن کتابخانه ما باید پنجره بسازیم برای اینکار اول یک شیئی پنجره بسازیمشیئی پنجره در جی ال اف دبلو: GLFWwindowما باید اشارگرش کنیم نه متغیر کامل خوب الان شیئی ویندو ساخت شده الان تابع ها را تعریف کنیم اول یک فایل به نامه Game.cpp در فولدر Engineبسازیم خوب مریم کلاس Game و تابع play بسازیم که ان در public است که دارای سه پرامتر اول ان const char* title و int widthو int heighttitle : عنوانWidth : عرضHeight : طول استخوب باید بگم که حتما باید ان فایل به پروژه اضافه کنید و داخلش ان کد های رابنویسیم#include &quotGame.hpp&quot void Game::play(const char* title,int width, int height){ // Code }خوب الان می ریم چطور می توانیم ورودی ها و خروجی ها بگیریم ورودی ها : ما با استفاده از تابع : glfwPollEvents()می توانیم همه تغیر رات ورودی ها را تغیر کنیم ( سعی کنید در اول حلقه بزاریش)یک تابع : -glfwGetKey(a,b)ان تابع کلید کیبورد می گیرید a کلید و b شیئی پنجره استو هم یک چیزی ریترن می کند مثلا دیدن ایا کلید زد یا نه ما می توانیم مقدا برگشت تابع با GLFW_PRESS چک کنیم اگر درست است یعنی کلید زد یا نه کلید نزدخروجی ها : قبل از شروع باید بگم که OpenGL از دو بافر استفاده می شود مثلا بافر دوم هرچه در ان رسم شود نمایش می شود اما بافر اول برعکس است ما در بافری اول رسم می کنیم بعد بافر ها را تغیر می کنیم که ما با استفاده از تابع glfwSwapBuffer(a)است پرامتر a شیئی پنجره استخوب یاد گرفتیم چطور بافر را تغیر دهیم اما یاد نگرفتیم که چگونه رسم کنیمدر OpenGL ما برای رسم یک شکل گوشه یا ورتیکس را تعین می کنیم در OpenGL 1.0 ما اول باید تابع glBegin(a) را فرخوانی کنیم a پارمتر نحوه تعیندر اینده باهاش کار می کنیمپس از تعین ورتکس ما باید تابع glEnd() ورتیکس های دوبعدی با glVertex2f(x,y)x,y پرامتر ی از نوع float الان ما می خواهیم صفحه را حذف کنیم اما چطور خوب ما با استفاده از glClear(a)a پرامتر نحوه حذفما چون الان با 2 دوبعدی کار کنیم (در اینده سه بعدی) پرامتر a مساوی GL_COLOR_BUFFER_BITچند تا حالت برای glBegin GL_LINES: در اینجا ما خطوط رسم می کنمی (مورد نیاز 2 ورتکس)GL_POINTS : رسم نقاط (مورد نیاز یک ورتکی)ما حالت های زیادی داریم اما تا لان کافی استما یک تابع داریم که glPointSize(a) نام دارد که ما اگر نقطه رسم کنیم ما می توانیم با ان تابع سایز نقطه را ویرایش کنیم (پرامتر a سایز است و از نوع float)و ما کد زیر به تابع play بنویسیم void Game::play(int width,int height,const char* title){ window = glfwCreateWindow(width,height,title,NULL,NULL); glfwMakeContextCurrent(window); while(!glfwWindowShouldClose(window)){ glfwPollEvents(); process(this->window); glClear(GL_COLOR_BUFFER_BIT); glPointSize(20); glBegin(GL_POINTS); glVertex2f(x,y); glEnd(); glfwSwapBuffers(window); }}خوب تا الان خوب پیش رفتیم اما راه خیلی بزرگ است الان من اموزش کاملی ندادم چون الان مهم نیست برای اموزش بهتر ( حتما چون بعضی چیز ها اینجا نگفتم و هم ما در ویدیو که بازی ساختیم ما در اینجا توضیح دادیم ما بعضی چیز در ویدیو توضیح می شود) لینکسورس کد گیم انجین لینک من یک کانال تلگرام ساختم که دارای ترفند و بازی ها هک شدهتلگرام بازی : لینک