{"id":1723,"date":"2023-03-26T19:55:17","date_gmt":"2023-03-26T19:55:17","guid":{"rendered":"https:\/\/writingagame.com\/?p=1723"},"modified":"2026-04-08T16:50:31","modified_gmt":"2026-04-08T16:50:31","slug":"introduction-what-is-it-all-about-2","status":"publish","type":"post","link":"https:\/\/writingagame.com\/index.php\/2023\/03\/26\/introduction-what-is-it-all-about-2\/","title":{"rendered":"Introduction &#8211; What is it all about"},"content":{"rendered":"\n<p><strong>Tags:<\/strong> <em>GameDev, 3D Engine, Cross-Platform, C++, OpenGL ES 3.2, Low-Level Programming, Software Foundation<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>This blog has evolved into a practical, step-by-step guide on writing a cross-platform 3D app (game) from scratch.<\/em><\/p>\n\n\n\n<p>Writing own game is my old dream. Now, I finally know how to <em>do it right<\/em>.<\/p>\n\n\n\n<p>Have a few ideas in mind what it could be, haven&#8217;t decided yet. Maybe something like this?:<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/writingagame.com\/img\/b04\/c00\/01.jpg\"><\/p>\nor this:\n<p><img decoding=\"async\" src=\"https:\/\/writingagame.com\/img\/b04\/c00\/03.jpg\"><\/p>\n\n\n\n<p>Or even better?<\/p>\n\n\n\n<p>Anyway, whatever the final result may be, a significant part of the journey is <strong>common to any project<\/strong>. I am inviting you to join me on this path. The purpose of these notes is to build a <strong>practically usable foundation<\/strong> for a real commercial project, starting from nothing.<\/p>\n\n\n\n<p>Ready? Then let\u2019s go! But where? Let\u2019s pick direction first.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><strong>Platform<\/strong>: Android, iOS, PC, Mac, Xbox\u2014where to begin? Instead of choosing one, I wanted to try <strong>cross-platform<\/strong>. To start, I am planning to focus on Windows and Android. If such combination (desktop + mobile) will work, the other platforms will follow by analogy.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><strong>Graphics engine &amp; API<\/strong>: I am wary of binding myself to existing game engine frameworks. &#8220;Easy ways&#8221; are seldom as easy as they claim, always carry their own built-in destinations and intentions, not necessarily matching yours, and create more problems than they solve when you don&#8217;t follow the path (template) <em>precisely<\/em>.<\/p>\n\n\n\n<p> Besides, I want to avoid bloating the project with &#8220;megatons&#8221; of extra layers.<\/p>\n\n\n\n<p>Therefore, I won\u2019t consider for myself such high-level options as Unity, Unreal, GameMaker, or Godot. <\/p>\n\n\n\n<p>Instead, I would prefer low-level access to 3D. Plus, it must be <em>cross-platform-compatible<\/em>. The choices seem vast: DirectX, OpenGL, Vulkan, Metal\u2014did I miss anything? In practice, almost none of them are truly cross-platform <strong>except<\/strong> <em>OpenGL <strong>ES<\/strong><\/em>, which runs on practically any platform, including PC, Android, Mac, and iOS. I will be using the low-level API <strong>OpenGL ES 3.2<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><strong>Programming language:<\/strong> C++, Java, C#, Objective-C, Kotlin, Python, Rust, Swift&#8230; the list goes on. But again, our cross-platform requirement leaves us with a single classic undisputed option: <strong>C++<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><strong>IDE:<\/strong><\/p>\n\n\n\n<p>For Windows we will use <strong>Microsoft Visual Studio<\/strong> Community edition, which is free. <\/p>\n\n\n\n<p>For Android &#8211; <strong>Google Android Studio<\/strong>, which is free as well.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><strong>The challenge<\/strong> with this combo (C++ and OpenGL ES) is that it isn&#8217;t &#8220;native&#8221; to any one platform. Each environment requires specific effort to make this duo work. However, this is still better than limiting yourself to a single platform, no matter how promising it may seem.<\/p>\n\n\n\n<p><em>Now<\/em>, when we know where we are going, LET&#8217;S START! Let&#8217;s see how far YOU can go \ud83d\ude42<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Spoiler:<\/strong> It actually worked out. You can see the results here:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows: <a href=\"https:\/\/www.microsoft.com\/en-us\/p\/trainscale-relax\/9mtn5845375t?SilentAuth=1&amp;wa=wsignin1.0&amp;activetab=pivot:overviewtab\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Store<\/a><\/li>\n\n\n\n<li>Android: <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.writingagame.trainscalerelax\" target=\"_blank\" rel=\"noreferrer noopener\">Google Play Store<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p class=\"mb-2\">Tags: GameDev, 3D Engine, Cross-Platform, C++, OpenGL ES 3.2, Low-Level Programming, Software Foundation This blog has evolved into a practical, step-by-step guide on writing a cross-platform 3D app (game) from scratch. Writing own game is my old dream. Now, I finally know how to do it right. Have a few ideas in mind what it [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":68,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1723","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cross-platform-3d"],"_links":{"self":[{"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/posts\/1723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/comments?post=1723"}],"version-history":[{"count":54,"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/posts\/1723\/revisions"}],"predecessor-version":[{"id":4274,"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/posts\/1723\/revisions\/4274"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/media\/68"}],"wp:attachment":[{"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/media?parent=1723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/categories?post=1723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/writingagame.com\/index.php\/wp-json\/wp\/v2\/tags?post=1723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}