Advertisement Jump to content
  • Advertisement
    1. Past hour
    2. Project Title:Unnamed, at the moment.Description:Explore a beautiful vibrant environment and do as your mind pleases. In this world your goal is to thrive as a medieval businessman. Trade, harvest, gather and discover the vast wilderness surrounding the cities and villages you operate in.Think about The Elder Scrolls V: Skyrim in a sense to understand the width of this game. Remove everything but the trading and gathering system. There you have our game. The main focus will stand at graphical realness and immersion. Basically the player will roam around harvesting, gathering and crafting new items and selling them, the option to turn around objects for a profit at different markets will also be possible. Further explanation will be given if you join the team.Do not think I have huge AAA expectations on this game. Functions will be limited and focus will be on graphics. I want to make a greater game but we have to confine ourselves in the beginning.Includes: Harvest resources (Metal, Crops, Wood etc) Trade products Buy properties Quests Hunger, thirst Currency Team Structure:David (me):All in all, I have experience and basic knowledge in all fields except programming. I have worked in Unity, Unreal, Blender, Photoshop & more. But only as a hobby. After a long pause from game making I am now back again.Talent Required:-3D Artist(s)-C++ Programmer(s)-Music/Sound Creator-Other useful skillsDont worry, you dont have to be a proffessional in your field, but please know what you are doing. Portfolio of previous work is required. If you are skilled in multiple fields that is a bonus.Contact:E-mail: (private mail)Are you interested in becoming part of this project? Do not hesitate to contact me.Sincerely, DavidREMEMBER THIS GAME IS AT THE IDEA STAGE AND YOU WILL BE PAID BY ROYALTY, IF YOU ARE NOT COMFORTABLE WITH THIS PLEASE DO NOT CONTACT ME.
    3. Hi all, I planned to create a 2D turn based strategy game using modern C++. The idea was to use SDL and make it available for at least Linux, Windows and Android and create everything from scratch, but the time is what it is, and unfortunately it will be probably hard to do that.As alternative I was thinking to use some already existent engine that would allow me to save some time. Any suggestion is much appreciated!
    4. Today
    5. It's a story on how to write a plugin for Unity Asset Store, take a crack at solving the well-known isometric problems in games, and make a little coffee money from that, and also to understand how expandable Unity editor is. Pictures, code, graphs and thoughts inside. Prologue So, it was one night when I found out I had pretty much nothing to do. The coming year wasn't really promising in my professional life (unlike personal one, though, but that's a whole nother story). Anyway, I got this idea to write something fun for old times sake, that would be quite personal, something on my own, but still having a little commercial advantage (I just like that warm feeling when your project is interesting for somebody else, except for your employer). And all this went hand in hand with the fact that I have long awaited to check out the possibilities of Unity editor extension and to see if there's any good in its platform for selling the engine's own extensions. I devoted one day to studying the Asset Store: models, scripts, integrations with various services. And first, it seemed like everything has already been written and integrated, having even a number of options of different quality and detail levels, just as much as prices and support. So right away I've narrowed it down to: code only (after all, I'm a programmer) 2D only (since I just love 2D and they've just made a decent out-of-the-box support for that in Unity) And then I remembered just how many cactuses I've ate and how many mice've died when we were making an isometric game before. You won't believe how much time we've killed on searching viable solutions and how many copies we've broken in attempts to sort out this isometry and draw it. So, struggling to keep my hands still, I searched by different key and not-so-much-key words and couldn't find anything except a huge pile of isometric art, until I finally decided to make an isometric plugin from scratch. Setting the goals The first I need was to describe in short what problems this plugin was supposed to solve and what use the isometric games developer would make of it. So, the isometry problems are as follows: sorting objects by remoteness in order to draw them properly extension for creation, positioning and displacement of isometric objects in the editor Thus, with the main objectives for the first version formulated, I set myself 2-3 days deadline for the first draft version. Thus couldn't being deferred, you see, since enthusiasm is a fragile thing and if you don't have something ready in the first days, there's a great chance you ruin it. And New Year holidays are not so long as the might seem, even in Russia, and I wanted to release the first version within, like, ten days. Sorting To put it short, isometry is an attempt made by 2D sprites to look like 3D models. That, of course, results in dozens of problems. The main one is that the sprites have to be sorted in the order in which they were to be drawn to avoid troubles with mutual overlapping. On the screenshot you can see how it's the green sprite that is drawn first (2,1), and then the blue one goes (1,1) The screenshot shows the incorrect sorting when the blue sprite's drawn first In this simple case sorting won't be such a problem, and there are going to be options, for example: - sorting by position of Y on the screen, which is (isoX + isoY) * 0.5 + isoZ - drawing from the remotest isometric grid cell from left to right, from top to down [(3,3),(2,3),(3,2),(1,3),(2,2),(3,1),...] - and a whole bunch of other interesting and not really interesting ways They all are pretty good, fast and working, but only in case of such single-celled objects or columns extended in isoZ direction After all, I was interested in more common solution that would work for the objects extended in one coordinate's direction, or even the "fences" which have absolutely no width, but are extended in the same direction as the necessary height. The screenshot shows the right way of sorting extended objects 3x1 and 1x3 with "fences" measuring 3x0 and 0x3 And that's where our troubles begin and put us in place where we have to decide on the way forward: split "multi-celled" objects into "single-celled" ones, i.e. to cut it vertically and then sort the stripes emerged think about the new sorting method, more complicated and interesting I chose the second option, having no particular desire to get into tricky processing of every object, into cutting (even automatic), and special approach to logic. For the record, they used the first way in few famous games like Fallout 1 and Fallout 2. You can actually see those strips if you get into the games' data. So, the second option doesn't imply any sorting criteria. It means that there is no pre-calculated value by which you could sort objects. If you don't believe me (and I guess many people who never worked with isometry don't), take a piece of paper and draw small objects measuring like 2x8 and, for example, 2x2. If you somehow manage to figure out a value for calculation its depth and sorting - just add a 8x2 object and try to sort them in different positions relative to one another. So, there's no such value, but we still can use dependencies between them (roughly speaking, which one's overlapping which) for topological sorting. We can calculate the objects' dependencies by using projections of isometric coordinates on isometric axis. Screenshot shows the blue cube having dependency on the red one Screenshot shows the green cube having dependency on the blue one A pseudocode for dependency determination for two axis (same works with Z-axis): bool IsIsoObjectsDepends(IsoObject obj_a, IsoObject obj_b) { var obj_a_max_size = obj_a.position + obj_a.size; return obj_b.position.x < obj_a_max_size.x && obj_b.position.y < obj_a_max_size.y; } With such an approach we build dependencies between all the objects, passing among them recursively and marking the display Z coordinate. The method is quite universal, and, most importantly, it works. You can read detailed description of this algorithm, for example, here or here. Also they use this kind of approach in popular flash isometric library (as3isolib). And everything was just great except that time complexity of this approach is O(N^2) since we've got to compare every object to every other one in order to create the dependencies. I've left optimization for later versions, having added only lazy re-sorting so that nothing would be sorted until something moves. So we're going to talk about optimization little bit later. Editor extension From now on, I had the following goals: sorting of objects had to work in the editor (not only in a game) there had to be another kind of Gizmos-Arrow (arrows for moving objects) optionally, there would be an alignment with tiles when object's moved sizes of tiles would be applied and set in the isometric world inspector automatically AABB objects are drawn according to their isometric sizes output of isometric coordinates in the object inspector, by changing which we would change the object's position in the game world And all of these goals have been achieved. Unity really does allow to expand its editor considerably. You can add new tabs, windows, buttons, new fields in object inspector. If you want, you can even create a customized inspector for a component of the exact type you need. You can also output additional information in the editor's window (in my case, on AABB objects), and replace standard move gizmos of objects, too. The problem of sorting inside the editor was solved via this magic ExecuteInEditMode tag, which allows to run components of the object in editor mode, that is to do it the same way as in a game. All of these were done, of course, not without difficulties and tricks of all kinds, but there was no single problem that I'd spent more than a couple of hours on (Google, forums and communities sure helped me to resolve all the issues arisen which were not mentioned in documentation). Screenshot shows my gizmos for movement objects within isometric world Release So, I got the first version ready, took the screenshot. I even drew an icon and wrote a description. It's time. So, I set a nominal price of $5, upload the plugin in the store and wait for it to be approved by Unity. I didn't think over the price much, since I didn't really want to earn big money yet. My purpose was to find out if there is a general demand and if it was, I would like to estimate it. Also I wanted to help developers of isometric games who somehow ended up absolutely deprived of opportunities and additions. In 5 rather painful days (I spent about the same time writing the first version, but I knew what I was doing, without further wondering and overthinking, that gave me the higher speed in comparison with people who'd just started working with isometry) I got a response from Unity saying that the plugin was approved and I could already see it in the store, just as well as its zero (so far) sales. It checked in on the local forum, built Google Analytics into the plugin's page in the store and prepared myself to wait the grass to grow. It didn't take very long before first sales, just as feedbacks on the forum and the store came up. For the remaining days of January 12 copies of my plugin have been sold, which I considered as a sign of the public's interest and decided to continue. Optimization So, I was unhappy with two things: Time complexity of sorting - O(N^2) Troubles with garbage collection and general performance Algorithm Having 100 objects and O(N^2) I had 10,000 iterations to make just to find dependencies, and also I'd have to pass all of them and mark the display Z for sorting. There should've been some solution for that. So, I tried a huge number of options, could not sleep thinking about this problem. Anyway, I'm not going to tell you about all the methods I've tried, but I'll describe the one that I've found the best so far. First thing first, of course, we sort only visible objects. What it means is that we constantly need to be know what's in our shot. If there is any new object, we got to add it in the sorting process, and if one of the old one's gone - ignore it. Now, Unity doesn't allow to determine the object's Bounding Box together with its children in the scene tree. Pass over the children (every time, by the way, since they can be added and removed) wouldn't work - too slow. We also can't use OnBecameVisible and other events because these work only for parent objects. But we can get all Renderer components from the necessary object and its children. Of course, it doesn't sound like our best option, but I couldn't find another way, same universal and acceptable by performance. List<Renderer> _tmpRenderers = new List<Renderer>(); bool IsIsoObjectVisible(IsoObject iso_object) { iso_object.GetComponentsInChildren<Renderer>(_tmpRenderers); for ( var i = 0; i < _tmpRenderers.Count; ++i ) { if ( _tmpRenderers[i].isVisible ) { return true; } } return false; } There is a little trick of using GetComponentsInChildren function that allows to get components without allocations in the necessary buffer, unlike another one that returns new array of components Secondly, I still had to do something about O(N^2). I've tried a number of space splitting techniques before I stopped at a simple two-dimensional grid in the display space where I project my isometric objects. Every such sector contains a list of isometric objects that are crossing it. So, the idea is simple: if projections of the objects are not crossed, then there's no point in building dependencies between the objects at all. Then we pass over all visible objects and build dependencies only in the sectors where it's necessary, thereby lowering time complexity of the algorithm and increasing performance. We calculate the size of each sector as an average between the sizes of all objects. I found the result more than satisfying. General performance Of course, I could write a separate article on this... Okay, let's try to make this short. First, we're cashing the components (we use GetComponent to find them, which is not fast). I recommend everyone to be watch yourselves when working with anything that has to do with Update. You always have to bear in mind that it happens for every frame, so you've got to be really careful Also, remember about all interesting features like custom == operator. There are a lot to things to keep in mind, but in the end you get to know about every one of them in the built-in profiler. It makes it much easier to memorize and use them Also you get to really understand the pain of garbage collector. Need higher performance? Then forget about anything that can allocate memory, which in C# (especially in old Mono compiler) can be done by anything, ranging from foreach(!) to emerging lambdas, let alone LINQ which is now prohibited for you even in the simplest cases. In the end instead of C# with its syntactic sugar you get a semblance of C with ridiculous capacities. Here I'm gonna give some links on the topic you might find helpful: Part1, Part2, Part3. Results I've never known anybody using this optimization technique before, so I was particularly glad to see the results. And if in the first versions it took literally 50 moving objects for the game to turn it into a slideshow, now it works pretty well even when there're 800 objects in a frame: everything's spinning at top speed and re-sorting for just for 3-6 ms which is very good for this number of objects in isometry. Moreover, after initialization it almost haven't allocate memory for a frame Further opportunities After I read feedbacks and suggestions, there were a few features which I added in the past versions. 2D/3D Mixture Mixing 2D and 3D in isometric games is an interesting opportunity allowing to minimize drawing of different movement and rotations options (for instance, 3D models of animated characters). It's not really hard thing to do, but requires integration within the sorting system. All you need is to get a Bounding Box of the model with all its children, and then to move the model along the display Z by the box's width. Bounds IsoObject3DBounds(IsoObject iso_object) { var bounds = new Bounds(); iso_object.GetComponentsInChildren<Renderer>(_tmpRenderers); if ( _tmpRenderers.Count > 0 ) { bounds = _tmpRenderers[0].bounds; for ( var i = 1; i < _tmpRenderers.Count; ++i ) { bounds.Encapsulate(_tmpRenderers[i].bounds); } } return bounds; } that's an example of how you can get **Bounding Box** of the model with all its children and that's what it looks like when it's done Custom isometric settings That is relatively simple. I was asked to make it possible to set the isometric angle, aspect ratio, tile height. After suffering some pain involved in maths, you get something like this: Physics And here it gets more interesting. Since isometry simulates 3D world, physics is supposed to be three-dimensional, too, with height and everything. I came up with this fascinating trick. I replicate all the components of physics, such as Rigidbody, Collider and so on, for isometric world. According to these descriptions and setups I make the copy of invisible physical three-dimensional world using the engine itself and built-in PhysX. After that I take the simulation data calculated and get those bacl in duplicating components for isometric world. Then I do the same to simulate bumping and trigger events. The toolset physical demo GIF Epilogue and conclusions After I implemented all the suggestions from the forum, I decided to raise the price up to 40 dollars, so it wouldn't look like just another cheap plugin with five lines of code I will be very much delighted to answer questions and listen to your advices. I welcome all kinds of criticism, thank you! Unity Asset Store page link: Isometric 2.5D Toolset
    6. Well the same can be said about game physics, it's just an approximation of reality. It uses a simplified model (based on classical mechanics?) to describe the interaction of physical objects. Light transportation can be described as lightrays going around in the scene, not including effects like polarisation etc.. However it's a good enough physical model of our visible world. I guess what I am trying to express is that everything related to game physics (including optics and classical mechanics) is based on a model, a simplified view of the world that is still able to produce convincing results (to an extend). Guess I'll start with a lighting engine at first, the other parts or not that interesting to me at least. Thanks for the links
    7. Makusik Fedakusik

      Anyone who wants to write a little game engine?

      No one write game engines from scratch. 20 years ago too. You can take some demo's from github: And try to merge them together. Becouse every single part of game engine now is: hmph, it's time to become.... sse/avx/neon hacker, gapi hacker, physics hacker, network hacker and other.
    8. Irusan, son of Arusan

      Anyone who wants to write a little game engine?

      It really doesn't. In actual physics, the diffraction of water comes from the movement of light through the whole body of water and the way individual photons interact millions upon millions of times with individual atoms. Similarly the surface of water moves because of the interaction of trillions of molecules. No game models this or anything close to it. Graphics is the art of imitating physical reality not the art of reproducing it. Describing the way shaders mimic the look of water as "physics" is reducing the term to near meaninglessness.
    9. Well if you read my post you will see that I check about memory alignment, and for the max texture size. These weren't the problem. Anyway problem solved.
    10. I'm not a spelling Nazi but you sure do make it hard to want to read your posts.
    11. Variations in thickness often result from numerical errors in scaling. Please make 110% sure you're not scaling anything, from font description to bitmap, or from bitmap to screen. One way is to get a handle on it is to dump the bitmap you get from the font as rows of text characters, and use a non-proportional font to check. EDIT: You may want to disable anti-aliasing here. The "g" is drawn incorrectly. The full circle of the letter should rest at the baseline, and the extension at the bottom should be below the baseline. Just look how the "g" is rendered here relative to the other text. Not sure of the details of FreeType any more, but iirc you could have a negative offset wrt to the baseline if you had to start below it. As you can see at the bottom of the letter can be below "origin"
    12. Of cource rendering involve optical phisics, but it usualy part of graphics stuffs (shading algos) becouse its is same (ot near same) for any semi-opaque objects. Under phisics stuffs here meaned simulation of waves droplets and so on, that make difference from just semi-opaque plane that has simulate water for 20+ year old games.
    13. Yes because realistic light interaction requires simulation of physic laws and therefore graphics is involves physical calculation i.e. solving the redering equation. So I would say you can't really separate those concepts -> realistic looking water needs "100%" physics
    14. Hi, Need help setting up ImGui.. I am trying to render UI using the ImGui framework on dx12. I followed the ImGui example project for dx12 but so far i've had no luck even after carefully looking through my code. The dubug output shows no errors either. I'm calling the ImGui functions in a separate class with static methods as indicated below: void GUI::Initialize(HWND hwnd, ID3D12Device* device, D3D12_CPU_DESCRIPTOR_HANDLE srvCpuHandle, int num_frames_in_flight, DXGI_FORMAT rendertargetformart) { D3D12_DESCRIPTOR_HEAP_DESC fontHeapDesc{}; fontHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; fontHeapDesc.NodeMask = 0; fontHeapDesc.NumDescriptors = 1; fontHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; device->CreateDescriptorHeap(&fontHeapDesc, IID_PPV_ARGS(sm_FontHeap.GetAddressOf())); D3D12_GPU_DESCRIPTOR_HANDLE fonthandle = sm_FontHeap->GetGPUDescriptorHandleForHeapStart() ; IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); (void)io; ImGui_ImplWin32_Init(hwnd); ImGui_ImplDX12_Init(device, num_frames_in_flight, rendertargetformart, srvCpuHandle, fonthandle); ImGui::StyleColorsDark(); } void GUI::Update() { ImGui_ImplDX12_NewFrame(); ImGui_ImplWin32_NewFrame(); ImGui::NewFrame(); { ImGui::Begin("Some Window"); ImGui::Text("Random text here"); ImGui::Button("Button"); ImGui::End(); } } void GUI::RenderOverlay(ID3D12GraphicsCommandList* cmdlist) { cmdlist->SetDescriptorHeaps(1, sm_FontHeap.GetAddressOf()); ImGui::Render(); ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), cmdlist); } void GUI::Shutdown() { ImGui_ImplDX12_Shutdown(); ImGui_ImplWin32_Shutdown(); ImGui::DestroyContext(); } Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> GUI::sm_FontHeap = nullptr; And then I call these methods in the graphics class: gpuContext->TransitionResource(currbackbuffer, D3D12_RESOURCE_STATE_RENDER_TARGET); //gpuContext->SetViewport(); //gpuContext->SetScissorRect(); gpuContext->ClearRenderTarget(currbackbuffer); gpuContext->ClearDepthStencil(dephbuffer); gpuContext->SetRenderTargets(currbackbuffer, dephbuffer); //Render GUI GUI::RenderOverlay(gpuContext->GetCommandList()); gpuContext->TransitionResource(currbackbuffer, D3D12_RESOURCE_STATE_PRESENT); gpuContext->ExecuteCommands(); GraphicsRoot::Present(); uint64_t frameFenceVal = gpuContext->Finish(); Any help on this will be appreciated
    15. Wiljan

      Artist Looking for Programmer

      Hi, are you still interested in finding a programmer?
    16. ECS is a solution direction if inheritance or interfaces fail. From your post I gathered you don't use those much yet, so ECS is a possible solution 2 steps away from your problem for you. I'd suggest you get a good understanding about inheritance and interfaces first (in particular when not to use them) before you venture into ECS. I think my Behavior object is at least in the direction of ECS, but I am not sure. I am more of a pragmatic programmer picking the ideas that fix the problem, rather than knowing exactly what is "proper ECS" or "proper OOP" or "proper Foo-Pattern" or "proper <whatever>". Nice to see you already moved into reading data from file. As to how to write behavior in a file, whatever you do, it must be text, since that's the only thing you can write in a text file. Other adventure authoring systems tend to allow writing source code in some form which they load and interpret, but that's likely too complicated for you at this time (in the general case you end up in scanner and parser code generators like yacc or bison (both are C-based, no idea what exists in C# but likely it's similar). A much simpler form is to give each behavior a name, and then loading behavior into an Item is just a list of such names. A switch statement is one option for converting a name to an object in the program. An other option is to use a Dictionary, which is quite simple if none of the the behavior objects has state. (That is, they don't have any variables inside that are different between behavior objects in different Items.) In that case, you can make a "Dictionary<string, Behavior> behaviors;" dictionary, where Behavior is the base class (or interface) of all behaviors. Getting the behavior is then a simple dictionary lookup, something like "behaviors.get(loaded_name)" or "behaviors[loaded_name]". (Not being a C# programmer, I don't know exactly how to do that, but seems to point to a solution.) If the behavior objects do have state (and I can imagine that being useful), you need to construct a new Behavior object for each Item. The usual solution for that is the Factory pattern. Instead of a dictionary from name to behavior, you have a dictionary of name to behavior-builder. Getting a behavior is then a 2-step process, first get the builder (the factory) from the dictionary, then ask the builder for a fresh behavior object. I can imagine that this is too complicated for now, and a switch is the better solution to you at this point. How to find and perform a behavior at runtime is indeed another puzzle. I would try to avoid splitting the actions as much as possible. The advantage of that is less cases to deal with, and (probably more for the future), simpler expansion of the set of actions. If you want to add "boinc" as new action (no idea what it would do, just an example), you don't want to have to write a new derived BoincAction, extend all existing behavior code for this new Boinc action, etc. So instead, why not let the command processor ask the Item for a Behavior object matching the given action string (or action ID). The Item then asks all its behaviors whether they understand that action, and if one does, it is returned. The command processor thus gets (or doesn't get) a behavior object, which it then executes ("behavior, please do your stuff"). Nothing in this setup knows what action is performed exactly, except the behavior object itself, but the latter is supposed to know eh? The command processor and the Item don't know if you typed "eat", "open", "rub", or (in the future) "boinc".
    17. Of course, becouse phisics staffs involve same simulations that scientific software, with only difference that it optimized by speed (that much much harder to perform) instead by precission. Also if you ask any of its PhD what same stuffs involved , for exampe, to realistic looking water effect, he/she will answer that it is 99% of phisics stuffs and 1% of graphics stuffs. Really, developers (especially such high qualified developers as PhD) make line betwin stuffs by sciences that it stuffs involve, instead of gamers (and evet managers and promouters) that call a graphics stuff anything tha visible on screen. Really if you see a bar that glowe as metal "graphoniy", you never will say that it make from "phisoniy" metall covered by thin layer of "graphoniy", and end ever will have no any suspections that it thin layer consists of 2 sublayers maked from different isotops of "graphoniy". Really one of most importent part of graphics stuffs player ever never seen on screen, becouse it perform a different kinds of clipping algo, that determine what same required to render, and without wich gaming will be really to slow.
    18. jbadams

      Catch the kids: Priest simulator game

      This is not the place to discuss the reputation system, politics, or related topics. I've hidden a couple of posts, let's keep any further discussion on topic please. On topic, I personally find humour that makes light of paedophilia extremely distasteful - I suspect for better or worse that may be a common reaction to your work.
    19. Of course it have different implementation of both components anf architecture . But it have a same set of components. If you want to have into you game, for eхample, chatacters you anycase need components for bones system and inverse kinematics into engine, independently is it only chatacter into your world, or it model any person into galaxy. It really has been actual 25-30 years ago for low-end solutions. For example for tunnel walker/shooter you need to render a couple rooms that player can see at time, independently from total size of the maze. Othervice it really will be slow. With open spaces scenes it much harder to implement, but concept is same - it draw only little part of a big world at time. It why demos ever exists - it clearly shows what engine able to perform for world of any size.
    20. Goraxium

      Catch the kids: Priest simulator game

      I've got no issues with it, but don't expect it to go down well... You're not likely to attract the negative attention you would for mocking another religion that's protected and encouraged by left leaning groups, but mocking any group is never going to work out too well. That being said, going by the trailer, it looks like it's up there with Feminazi: The Triggering in terms of quality. In other words, it's obvious that it's programmer art, but it looks like it plays reasonably well. Also, the culture we have where people are permanently offended needs to stop. Humour is humour. Just because some people don't like it, it doesn't mean it's not funny. Might I suggest making one for Antifa, where you go around burning down capitalist buildings while fighting off police and "Nazis"? You're far less likely to attract the same type of criticism, since people on the right are still too passive to bother with it, and people on the left would champion it... Just remember to use a disabled transgender POC for the main character, and make sure the bad guys are all straight white males (crucifixes optional), and you'll be set. Sincerely, a straight white Christian male who has lost hope in humanity...
    21. I think that in your case you really don't need to go as far as a voxel engine. Voxel engines excel in a couple places. First there is something like Minecraft where you want players to be able to build and destroy terrain. Note this doesn't have to necessarily be blocky terrain. There are many algorithms for making smooth terrain with voxels, although some of them generate meshes which are not so even as traditional methods. To name a few there are algorithms like marching cubes, extended marching cubes, native surface nets, dual contouring etc...... There are also various octree versions of each of these (dual contouring is naturally so). Also voxels don't even need to be cubes. I use prisms for various reasons. Another major reason to use a voxel engine is to build large worlds at run time from functions where stored mesh sizes would be prohibitive. For your goals it might be a waste of effort.
    22. I haven't played with this stuff in a while, but from memory, you'll find that OpenGL typically requires texture rows to be padded to 4 byte divisions. In other words, if you can't divide the number of bytes in a row by 4 evenly (which will happen when you're using 8-24 bit images), you'll hit a few problems. The solution is to set the alignment using glPixelStorei(GL_UNPACK_ALIGNMENT,1) before calling glTexImage2D(…), or pad the rows yourself. Also, there's been no limitations on texture sizes for a long time. Unless somebody is using hardware that's 10+ years old, you should be fine to use any size textures you want, however, it is recommended to stick to power of two sizes (I'm assuming it's for memory allocation purposes). says: Texture sizes have a limit based on the GL implementation. For 1D and 2D textures (and any texture types that use similar dimensionality, like cubemaps) the max size of either dimension is GL_MAX_TEXTURE_SIZE. For array textures, the maximum array length is GL_MAX_ARRAY_TEXTURE_LAYERS. For 3D textures, no dimension can be greater than GL_MAX_3D_TEXTURE_SIZE in size. Within these limits, the size of a texture can be any value. It is advised however, that you stick to powers-of-two for texture sizes, unless you have a significant need to use arbitrary sizes.
    23. Sure. There are several (few) engines in the project section. Add it there so that people can follow your trajectory but only once you'll feel ready for this (for your second engine maybe 😅).
    24. Again no. A little game might just be rendering with scene-graph fashion. Big games with very large world will use a lot of things to optimize, otherwise the game will be slow. A little game will tend to have simplistic structures and simplistic algorithms. Large games will have to make a lot of efforts so that the game is playable. What you say was true 15-20 years ago maybe. Not now. On big companies there are many developers, many artists and many other people around. The process is very complex and long. Some of them have PhD, and this is sometimes required to ensure he/she would understand and be able to devise new Technics, algorithms... Take UE, Unity, Unigine. Make them run the same scene. And see the results: not the same looking, not exactly the same colors, not the same framerate, not the same motion, not the same sensations ! What make these engines be different is not the fruit from hazard. I suggest you forget about your beliefs and start a new learning process. Take it as a mean to reach the next level.
    25. OK so I am making a game and am using a thing called Novelty. I'm trying to create codes you can find when you get to different endings of the game. The problem is I can't lock the user input so it will ONLY give the variable number of points if you enter the correct code. Also it uses ANGELSCRIPT which is a completely new type of code I don't know. Please help send anything you can to help
    26. I'm not sure I understand the question. There's synchronization in two directions: 1. After issuing rendering work, you call the Present API, and after your rendering work is done, the DWM / screen will start consuming that buffer. 2. After presenting a buffer, and then cycling through the rest of the buffers in the swapchain, it's time to render to the first one again. The swapchain issues GPU synchronization on your behalf to make sure that you can't render to this buffer until the DWM / screen are done with it, in the case where you cycled through your resources very quickly. If you're thinking that you call Present, and then try to render to the resource again... well, you can't. The swapchain prevents that from happening. You can only render to one buffer in the swapchain at a time - the one which is considered the "current back buffer." You can get this buffer's index from IDXGISwapChain3::GetCurrentBackBufferIndex.
    27. Hi All ! For those of you who don’t know that I am now providing information about development of games, launching a game studio, and details of what I go through each day as an indie game developer in YouTube. I am also a a full stack software engineer who has a lot of experience in many areas of development. I want to invite you to subscribe to my YouTube channel where I am providing videos everyday about the topics mentioned. Check out the channel at: Also I founded which is a indie game company where I have done all the development and art by myself for every single game. Thanks guys
    28. Any GPU work issued by a Present is relatively lightweight, and it's good practice to signal the end of a frame after that operation. Those samples should probably be updated.
    29. I have spent many hours dedicated to advanced blending, shading, modeling and texture art for a game concept that will requires stages. Think of this in the context of the sims, but far more advanced. I need someone with a server that can host the Unreal server. The plant life, very advanced. The terrain textures very advanced and using blending, GIS, varying liquid textures I am building the foundation for a economic sim first. The idea initially will be to build businesses in cities and have a character you can customize with basic animations. Later down the road once world economies are in motion, we will add simulations, politics, governments, and finally combat simulations. The idea is you can assume any role you would in life, build a life in modern civilization, all connected world wide. Initially it's very basic, businesses and economies with a customizable male or female character, house or business building. My company has secured a contract that generates about 120,000.00 USD a year, and those willing to vest in this project will ultimately be paid. Where is the money? Well, the idea is to take subscriptions initially but then, money is deposited by players to build their virtual life, career, and each nation will have a government that builds on taxation. I will add stock markets, housing markets, medical markets, technology markets and resource markets. The beauty is, since players invest real cash, they can make real cash thru inventions, politics, banking, travel, whatever they set up in the virtual world. Simply working a job for another players business that pays. As the economy grows and more players are added, then they supply cash to begin their lives in our virtual world and the ones that make money can simply withdraw into their real world bank accounts. We simply make our money off fees in transactions that occur in our virtual world. So to be clear, this is a beginning try out with stages of development. I will be doing a early release and as players are added, money is invested, this will fund further development. Stage 1: Government, Business and World Setup. I have completed all texture art necessary to generate a complete earth in very vivid detail. I am making preset buildings. But I require assistance in the development of a in game GIS terrain generator. I will also need help finding a database of cities and their building and maps so we can procedurally generate the cities. I have iClone and could use another person to help me develop the basic animations for people. I would like to make a building designer in game, setup zoned properties, making clothing, furniture, and get the economic part of the game setup. I am seeking someone with a server that can run 24/7, a Unreal game server. I am seeking one or two artists that can help speed up the basic modeling process for many models. I personally will deal with the terrain, city and various programming aspects. I already have done all the architectural textures, detail and base, PBR. I am doing models, like furniture, fountains, but being able to shift this work to several artists that are consistent would be of real help so I can focus on the programming aspect of this first stage. I also have a merchant processor so I can run the credit cards and accounts thru them. If you are willing to vest in this one project, one piece at a time, then I can guarantee once you are proven and consistent, there will be pay. There are several other stages to building this advanced simulation but this first stage is the simplest and will at least begin a very lucrative money income for the company. A additional programmer would be of real help that is familiar with C++, Unreal, Blueprints, Materials, GitHub is hard working consistent, and wants to get their foot in the door in game development. Seeking two artists, 2D knowledgeable in Adobe Seeking two artists 3D knowledgeable in Substance, Adobe, Blender, iClone is a bonus Seeking one individual with a 24/7 server for Beta Testing at no cost. Tools and accounts are setup and paid for by me. Thanks.
    30. It's a horror game, isn't it? The only way to avoid moral criticism is to remove the horror, so if seeing a child get brutally beaten is painful to watch, you're actually on the right track. Parallel to the game Hatred, the mechanics are more important than the critics. The moral criticism actually prolonged Hatred's life through free marketing before it died of failing to cater properly to the Twin-Stick Shooter audience. Cater to your target audience, and you'll be fine.
    31. Hi. I didn't see your reply, but I had some extra time to work on it today. Pretty happy I fixed some of the issues I was having but still have some slight problems. As you can see it seems to be rendering fine until the letter 'r'... Not sure why this is happening. Especially how the letter 'g' seems to be clipping out on the top. float CDisplayFont::DisplayText( const char * szText, int textCount, const SVector2f& pos, const SColorRect & colors, const SRectf * pClipRect ) { SVector2f tmp ( pos.x, pos.y ); IRender * render = g_pCore->GetGraphics()->GetRender(); ISurface * surface = g_pCore->GetGraphics()->GetSurface(); float sh = 0.f; for ( int i = 0; i < textCount; ++i ) { const Codepoint_t cp = static_cast< Codepoint_t >( szText[ i ] ); if ( GlyphInfo_t * glyph = GetGlyphInfo( cp ) ) { float sx = tmp.x + glyph->offsetX * m_fScaleHoriz; /** - m_fMaxYOffset is actually the y bearing of character 'T' - (0,0) is the top left of the screen so this is the "correct" way to get the y coordinate **/ float sy = tmp.y + ( m_fMaxYOffset - glyph->offsetY ) * m_fScaleVert; float w = glyph->width * m_fScaleHoriz; float h = glyph->height * m_fScaleVert; float tx1 = glyph->texcoords[ 0 ]; // left float tx2 = glyph->texcoords[ 2 ]; // right float ty1 = glyph->texcoords[ 1 ]; // top float ty2 = glyph->texcoords[ 3 ]; // bottom if ( szText[ i ] != ' ' ) { // only using to get the height for drawing the line below.. if ( sh == 0.f ) sh = h; SVertex vtx[ ] = { { ( sx ), ( sy + h ), 0.0f, 1.f, colors.BottomLeft, tx1, ty2 }, { ( sx + w ), ( sy ), 0.0f, 1.f, colors.TopRight, tx2, ty1 }, { ( sx ), ( sy ), 0.0f, 1.f, colors.TopLeft, tx1, ty1 }, { ( sx ), ( sy + h ), 0.0f, 1.f, colors.BottomLeft, tx1, ty2 }, { ( sx + w ), ( sy + h ), 0.0f, 1.f, colors.BottomRight,tx2, ty2 }, { ( sx + w ), ( sy ), 0.0f, 1.f, colors.TopRight, tx2, ty1 } }; // arguments -> ( rl, vertex data, vertex count, topology, texture (IDirect3DTexture9) ) render->PushVertices( NULL, vtx, 6, D3DPT_TRIANGLELIST, glyph->texture->GetInternalPtr() ); } // advance the x position tmp.x += static_cast< float >( glyph->advanceX >> 6 ) * m_fScaleHoriz; } } // just testing, sh seems to be correct lol surface->DrawLine( pos.x, pos.y + sh, tmp.x, tmp.y + sh ); return tmp.x; } Here is how I am loading each character bool CDisplayFont::LoadCodepoint( Codepoint_t cp, GlyphInfo_t * out ) { FT_Error err = 0; if ( ( err = FT_Load_Char( m_fontFace, cp, FT_LOAD_DEFAULT | FT_LOAD_FORCE_AUTOHINT ) ) != FT_Err_Ok ) { g_pCore->GetConsole()->Errorf( "Error loading codepoint %d: %d\n", cp, err ); return false; } out->width = m_fontFace->glyph->bitmap.width; out->height = m_fontFace->glyph->bitmap.rows; out->offsetX = m_fontFace->glyph->bitmap_left; out->offsetY = m_fontFace->glyph->bitmap_top; out->advanceX = m_fontFace->glyph->advance.x; out->advanceY = m_fontFace->glyph->advance.y; out->texture = NULL; // we're not creating the texture yet float x0 = out->offsetX; float y0 = out->height - out->offsetY; float x1 = x0 + out->width; float y1 = y0 + out->height; float itw = 1.f / static_cast< float >( m_lTexSize ); float ith = 1.f / static_cast< float >( m_lTexSize ); out->texcoords[ 0 ] = x0 * itw; // left out->texcoords[ 2 ] = x1 * itw; // right out->texcoords[ 1 ] = y0 * ith; // top out->texcoords[ 3 ] = y1 * ith; // bottom return true; } Still pretty satisfied, considering just 1 hour ago, only weird small blocks were being displayed on the screen haha. Appreciate any help.
    32. I am working on the terrain engine again. The shipbuilder is functionally done finally, but not graphically done. I'm sure play testing will have more changes and updates. I actually fixed a lot with the planetary UVs. Everything matched up. It was wonderful...Then I had to mess with the code to make LOD changes, and now things don't mesh up again. But things have been prepared for. ;) I have old code that did the meshing of different resolutions, I just have to resurrect it and adapt it. Now that I can do HiRes renders of the Perlin Noise and see what it actually looks like, I will start to tweak that too, since it is far too "rocky". I may just ask for a fixed HiRes Height map from one of the artists, since in the end, it would yield something nicer and more consistent. Time will tell. Meanwhile, I have to fix the LOD alignment. Once that is done, I can update the shaders to have multiple texture and normal maps rather than just one set. This will allow HiRes detail, which currently the terrain doesn't have other than structurally. Original post blogged on Rank: Warmaster Dev Blog. View the full article
    33. You're wrong that graphics is not as complex as most other parts of a game engine. You are correct that it depends on where you draw the line, but generally "graphics" refers to everything from rendering of primitives, shaders, lighting, animation, particle effects, post-render effects, and more. There is a reason why most large teams not only have dedicated graphics programmers, but often an entire team of programmers just to do the graphics. This is even more the case today with the modern graphics API's like DirectX 12 and Vulkan. There are even more complex and difficult to use than the previous generations. In fact, much of the reason why third-party engines are so popular today is because most teams cant get to that level of graphics complexity and quality without them.
    34. How can I find collision point and normal using sat? I read that sat can do that. Please help me? AABB.cpp int AABB::supportFaceCount() { // there are only three directions for every face of an AABB box. return 3; } XMVECTOR AABB::supportFaceDirection(int i) { // the three axes of an AABB box. along the x, y and z axis. static const XMVECTOR s_aabbAxes[] = { XMVectorSet(1, 0, 0, 0), XMVectorSet(0, 1, 0, 0), XMVectorSet(0, 0, 1, 0) }; return s_aabbAxes[i]; } int AABB::supportEdgeCount() { // there are only three directions for every edges of an AABB box. return 3; } XMVECTOR AABB::supportEdgeDirection(int i) { // every edge go along the x y, or z axis. static const XMVECTOR s_aabbEdges[] = { XMVectorSet(1, 0, 0, 0), XMVectorSet(0, 1, 0, 0), XMVectorSet(0, 0, 1, 0) }; return s_aabbEdges[i]; } void AABB::supportInterval(XMVECTOR direction, float& min, float& max) { XMVECTOR centre = XMVectorSet(Center[0], Center[1], Center[2], 1); // projection of the box centre float p = XMVector3Dot(centre, direction).m128_f32[0]; // projection of the box extents float rx = fabs(direction.m128_f32[0]) * Radius[0]; float ry = fabs(direction.m128_f32[1]) * Radius[1]; float rz = fabs(direction.m128_f32[2]) * Radius[2]; // the projection interval along the direction. float rb = rx + ry + rz; min = p - rb; max = p + rb; } bool ObjectsSeparatedAlongDirection(XMVECTOR& direction, AABB* a, AABB* b) { float mina, maxa; float minb, maxb; a->supportInterval(direction, mina, maxa); b->supportInterval(direction, minb, maxb); return (mina > maxb || minb > maxa); } bool ObjectsIntersected(AABB* a, AABB* b) { // test faces of A for(int i = 0; i < a->supportFaceCount(); i++) { XMVECTOR direction = a->supportFaceDirection(i); if(ObjectsSeparatedAlongDirection(direction, a, b)) return false; } // test faces of B for(int i = 0; i < b->supportFaceCount(); i++) { XMVECTOR direction = b->supportFaceDirection(i); if(ObjectsSeparatedAlongDirection(direction, a, b)) return false; } // test cross product of edges of A against edges of B. for(int i = 0; i < a->supportEdgeCount(); i++) { XMVECTOR edge_a = a->supportEdgeDirection(i); for(int j = 0; j < b->supportEdgeCount(); j++) { XMVECTOR edge_b = b->supportEdgeDirection(j); XMVECTOR direction = XMVector3Cross(edge_a, edge_b); if(ObjectsSeparatedAlongDirection(direction, a, b)) return false; } } return true; }
    35. I did work on my own graphics engine once. Not because I expected it to go anywhere but because I love graphics and wanted the learning experience I am willing to give you any tips or help out, but I don't plan on writing any code. I have a game I am working on right now that takes up most of my free time
    36. RidiculousName

      Free Images?

      Apologies for the very late response. I would really appreciate it if you could explain this to me a little more. I'm not sure I fully understand it.
    37. This question shows that "IDXGISwapChain::Present()" will present a back buffer even if the GPU has not finished rendering to it. So the GPU can be rendering to a front buffer. In this case, will the contents of the front buffer be actually shown on the display while the GPU is still rendering to it? How does this work exactly?
    38. Yesterday
    39. Okay thanks for the awesome responses and the input guys, I guess I will try to do it on my own first and keep you all updated Let's see how far I can get on my first attempt lol.
    40. DaTueOwner, because u want to go from scratch, clearly this means that u want to learn how every engine part works. If someone joins with u, u will not be always able to learn what that person codes. This will make u want to learn from that person too, which means that u r better off starting alone then later have someone join in on the basis of what u can demonstrate. Many years ago (lol) , i lived with a friend and we started an engine from scratch, he poured in more code than me because he worked on it full-time as he had no job at the time and I could only pour in part-time on some evenings as I had a full-time job (not games). Eventually my mate stopped because he thought I was lazy lol. Then he got hired in game dev and produced some AAA games. I then decided, as a hobby, to create my own engine from scratch in the evenings. I went about it alone and I have to say that I rewrote it several times as there were some parts which were very difficult to crack open, and at the time when i started information was scarce. But eventually I learnt a lot, I never felt under any pressure from any peers, etc... today the engine is doing quite well, supports both ogl4+ and dx11 and it's got ...cameras, character animation, etc... and even a 3d editor The beauty really is the fact that I can explain how every part works. I was invited to present the package at a conference to some young aspiring game developers and software engineers and they loved it. If anyone wants to join with u on this journey then fair enough, give it a go, have fun and learn together. However, my advice is also to try on your own first, as others have suggested earlier, forget AAA quality as u rightly said, plan a demo and code yr graphics towards it, instead of coding graphics features just for the sake of it. There are many graphics features that I haven't coded yet but I ain't doing them just for the sake of it if I don't need them. Also when u say from scratch please don't do it from scratch per se, please use some existing libs, glm (for maths) or stb's for texture loading... you'll save yrself time and still have plenty of things to code. Anyway, have fun and all the best. Peace!
    41. fleabay

      Catch the kids: Priest simulator game

      This is my dad when he caught me playing D&D at 13.
    42. I'll start by prefacing that I don't work in the industry. I'm a hobbyist. Moreover, I have no idea what the industry is like in Iran. That being said, I think there are a number of skills that are universal. First off, I'd split them into three categories: basic (you know what an IDE does, know your chose language(s), etc) specific (coding for business, gaming, etc) generic (you can identify and employ design patterns, work on architectural design, etc) I'd say all three are necessary, but they really differ depending on what you want to do. After all, writing the back end for MS Office has very little to do with writing scalable graphics code for Overwatch. Pick your battlefield and accept that no one knows everything (well). That being said, from a hobbyist's perspective I'd say the following is what really matters: being able to find and identify the problem (debugging) being able to get a grasp and work with the greater whole/eg the framework (abstraction) being able to write code that does what you want it to do (synthesis) being aware, but not necessarily precisely knowing how a specific algorithm or design pattern works - we do have search engines after all (erudition) being able to iterate an idea to a point where it does what you want it to do and it does it well (optimization) having something to show to back up your words (application) The collective word for all of these is "experience", because these are all big-big topics that take years to master. (Apart from the last point) I'm sorta leaving out the portfolio, because I've never had to present one myself. But I'd say basic truths that apply to CVs also apply here - the more you have under your belt the better. TL;DR - you can't be good at everything (or many things, for that matter), so you need to focus. Choose what you want to focus on and that'll define what you need to know in detail (being an audio engineer is wildly from being someone who works on AI, after all). As for experience, here's my icky-sounding suggestion - do your absolute best to figure out answers on your own first. Put in the time and be prepared to iterate. Embrace the confusion and non-knowingness. You'll be surprised how much you can figure out on your own and how much you learn by just trusting yourself. And it'll help you get better faster than anything else. The one thing I would do is "fix" the title of the thread: it doesn't really matter what is "enough", but rather what areas you want to expand on. What interests you. Why are you in this business in the first place? If you have passion for Y, then don't go for X.
    43. I'd like to thank everyone that has been chatting in this thread. I only haven't responded as I didn't want to stifle any responses. I think for my particular case this "esc" pattern is really interesting, but might be to advanced for me right now as well as kinda requiring me to rewrite the entire project in a new and unfamiliar way. I ordered a book from ebay called "Game Engine Architecture" which was recommended in a number of threads and stackexchanges and stuff I read while googling this thing. This makes a lot of sense to me and also sounds like it can be done without making massive modifications to what I have already got. It is kinda a better version of my basic idea of having a "gameLogic" class as I spoke of above. It also occurs to me that this might have been what Irusan was saying at the start but the chat I am not sure why I didn't understand him. Maybe it was the talk of design patterns and stuff that confused me. Not that wurstbot didn't give good points, but my googling sent me to very complex idea used in large programs. I have already written a working text file importer. I am using it at the mo to build the area's and items as well as setting some variables like bools and text descriptions and stuff. For example in the area file I have a list of item names, these names are read and used as file name to load data txt files for items and then they are read into a item class and that class is added to a list<Items> in the area. One of the goals of my project was to be able tom "write" the text adventure in text file with out editing individual code. //--AREA_NAME: CommandTestRoom //LIST_OF_ITEMS_IN_AREA--START item1 item2 item3 item4 item5 //LIST_OF_ITEMS_IN_AREA--END Basically the data reader takes lines from the txt file, reads a start and end line (I'm calling brackets) and then reads each individual line between those lines. I also built a way to read a single line with a keyword at the start. So in the example above it retrieves just "CommandTestRoom" and "item1" "item2" etc etc. TL:DR The question is how do I define "behaviour" classes in a text file? I can retrieve "names" from a file with the code I have in the datareader, but not sure how to translate that as "behaviours" What I am thinking at the moment is a extension to the data reader for behaviours that is basically a giant switch statement. that adds different "behaviour" classes based on what string it is reading. So player types "open box"... the command processor sees that OPEN is available on that object, but when it triggers that particular item's "open" it is loading a unique behaviour. So this would require an interface ... so I have to boil down all actions into some kind of base action.. like Open, Move, Take and stuff, and those actions trigger but are picking up unique code instead of all the same open code. This might not be the best way I only thought this up as I wrote this post... I'm open to suggestions.
    44. ReyGates

      [Week 1] Impetus News #1

      Hi jbadams, yes we are making RPG game
    45. New gameplay footage video on YouTube: Beta test it for me? Leave your username at the end of the Google Survey and receive LOTS of free coins! ❤️
    46. RidiculousName

      What Are These Game Logics Called?

      What you are describing will be greatly helped with knowledge of "Object-Oriented Programming" (OOP). Using this will vastly reduce the complexity of your project and the amount of writing for scenes and dialogue that you will have to do. OOP is a fairly generic term. AFAIK, there is nothing more specific that can be applied here. I suggest studying programming project-organization too. Handling lots of different reactions to different stimuli can be very complex.
    47. Alec Weesner

      Looking for honest feedback on my music

      I think to fix the voices in the first track, try playing them in legato or extend the release just a bit more so the transitions between the notes sound a bit more smoother. I also think the timpani is too loud, so I might tune that down. At 1:41, watch for muddiness. It begins to sound unclear due to build-up of low end. To fix this muddiness, use a high-pass on your higher frequency instruments and also make sure to only include a couple or fewer low end instruments at one time. As a last tip, use the fundamentals of orchestra volume placement. There are usually three placements; the foreground (where the melody lies), the middle ground, and the background. Place a section of the orchestra in each of these three slots and adjust the volumes accordingly. I really like the melodic and harmonic construction of your songs though. They are very interesting to listen to and seem to take inspiration from a variety of different sources, not just the Lord of the Rings films or LOTRO.
    48. Federico Alvarez


      Welcome to Stompfeed! A Fast paced addictive skill game. Feed the animals the right food gain points make combos and have lots of fun. An easy and intuitive gameplay awaits in this game that will have you hooked to your phone by testing your reflexes and your memory. Travel to a far nature reservation and take care of the animals by giving them their favourite food... And beware of the hungry dinosaur... WAIT!!! WHAT????? Fun for everyone Cute graphics Lots of hungry animals Awesome visual and audio effects Increasing difficulty A DINOSAUR!!!
    49. tyree

      run attack

      testing cloth animation. this is all bone animation in engine
    50. Really i just figured out thing that required to make a gaming engine, that allow load and process anything that required for simulation, instead of graphics stuff only, where dynamic polimorphism can can be completely avoided for scene onjects, so saving/loading of scene, built into external modelling tools, have no any difficulties.
    51. Thank you very much @CrazyCdn!!! You saved me! Now that I know this about power of two, I'll be fine!!! I bought courses on udemy, watched YouTube videos, even read tutorials and other stuff on the internet, but in this forum I learned how to properly do things.
    52. No, power of two in both directions but they absolutely do not need to be square. Nearly all modern cards can deal with non-square textures if you set it up correctly but they typically just add padding from my experience. I have textures that are 1x64 as LUTs and plenty of 256x512, 512x1024, etc textures that all work fine. I think it might have been your textures, but I'm on my phone and looking over that much code isn't happening while I shop 😉. Also, AMD is known to have rather buggy OpenGL drivers, at least in the past. Just as a programming tip in general, you put a lot of pointless comments in your code, like "//error string" then the next line is "std::string error;". Don't waste your time typing things that are completely and totally obvious. This is why I love using longer descriptive variables names as it helps a lot in self-documenting code.
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!