Jump to content
  • Advertisement

All Activity

This stream auto-updates     

  1. Past hour
  2. alvaro

    Quaternion to Euler very imprecise

    It might help to use doubles instead of floats. But even better, you could stop using Euler angles, since they are rarely what you need. Why do you think you need to convert from quaternion to Euler angles?
  3. Johanna Sdr

    Can anyone draw concept art for me?

    That's nice of you but no thanks, I was interest in this project more for the Harvest Moon art style Good luck on your project!
  4. phil67rpg

    game idea

    I have an idea for a RISK like game. I am going to use the united states as a world map. I break it into six regions I also use the playing cards that are one for each state only the 48 states will be used. the symbols on the cards will be ship plane and tank. I broke the regions into northwest, southwest, northmidwest, southmidwest, northeast and southeast. I am using the same combat principles and armies, also if a player gets a region they will get bonus armies and if the player gets three of a kind in playing cards they get bonus armies. I was thinking about using c++ and directx but I am unsure of how to proceed, what language and graphical library. I do have experience in c# and c++ and opengl and directx.let me know of what you think of my idea.
  5. I have old code you can use if it something that simple. It sorta like a demo. Anyways it could be what you need for your game. Don't expect anything glowing. It just organized and built enough to get the job done. I recommend you use an engine or something popular right after you put together you extremely small game.
  6. Today
  7. Randy Gaul

    Game initialization.

    There's no good reason to not initialize things from main directly. Typically people try to build complicated systems that rely on running code from constructors inside of global or static objects. After trying a few out and writing some myself I personally decided they are unnecessary and not worth the trouble. In my own code I just call functions from main in a deterministic and simple way.
  8. I've reading about game/engine initialization both in Game Engine Architecture and Game Coding Complete. I have understood there is a problem with C++ and initialization, because initialization of global variables is non-deterministic, and the order your initialize modules of engine is critic since some modules depends other modules. They explains some approaches to avoid the undefined behavior, but I wonder something. Why must I initialize modules like global variables? Why don't initialize like members of Application object? Maybe last would lead to annoying scope issues, but, why don't initialize in main() scope? Would they have "global" scope in main() and deterministic initialization? Thank you and sorry for my English.
  9. YouTube Video Tutorial: https://www.youtube.com/watch?v=et6BAdlxECw&t=7s using System.Collections; using System.Collections.Generic; using UnityEngine; public class BillboardFX : MonoBehaviour { public Transform camTransform; Quaternion originalRotation; void Start() { originalRotation = transform.rotation; } void Update() { transform.rotation = camTransform.rotation * originalRotation; } } Script Link: https://github.com/ThisIsFix/Unity-Billboard
  10. Hello Everyone! My solo developed game BorderStrain has now been released as a Early Access title on Steam! Being my first game released, there is really a haywire of emotions right now so I thought I would both let you know about the title as well as share my experience! 😉 First off, anyone interested in the game, please feel free to check out the game page and trailer at BorderStrain Storepage More overall info about the game can be found at BorderStrain Webpage As I am posting this it is the very first day of release, and one thing strikes me more than expected, the utterly nervewrecking wait for the first reviews! I have done some beta testing of course, but one thing I must say is that, with a limited resources project such as this you are happy for all the external testers you can get, and before I say anything more, I am incredibly thankful for each minute they have given to provide feedback! Thank you guys! However, with limited number of beta testers comes the fact that they will have all kinds of different prefeered game types, and it might not be a perfect match to this game. As such the beta test reviews has been a bit mixed but I have tried to ctach up and implement as much feedback as possible This means I am still not sure how the game will be received, of-course I will try to listen to every single bit of feedback and just keep grinding on to get the game to the best possible state for the people who have now actually spent some of their hard earned cash to play this game! This to me was the largest realization and it really hit me like a big old pile of bricks the very moment I got my first sale (mind you, the sales are a bit limited so far, but I DID get sales, which was almost more than I expected, at least for the first day to be honest ☺️). Now people has payed for it, and they expect to enjoy it! Of-course the main motivation from the start has been to deliver a game people can enjoy, but once people also start paying for it the immediate pressure of delivering, and of-course the fear of not delivering was way higher than I could have imagined! Well, I do expect to roll out a fair amount of quick patching the upcoming days to try to improve any issues encountered but I have a real feeling that the next few days will be a real emotional roller-coaster 😶 Well, thats some news of my release as well as some emotional ranting but hope you found it to be of interest! And, obviously, it will be a lot of work to do the time ahead ☺️ Best Regards!
  11. You can get it with D3D12_SHVER_GET_TYPE(D3D12_FUNCTION_DESC::Version) or with hlsl::RDAT::FunctionReader::GetShaderKind(). Example for first way: https://github.com/andrejnau/FlyCube/blob/636839889748ca5aaad0b9b2fb7b43313b1933de/src/Modules/Program/DX12ProgramApi.cpp#L29 And for second way: https://github.com/andrejnau/FlyCube/blob/8bd607a8ad0e478321f2d1a128a31d5db06eb1eb/src/Modules/Program/DX12ProgramApi.cpp#L39
  12. frob

    Writing for a Village

    NPC's also have the difficulty of having any content at all. A real-world town has thousands of people, a real-world city has millions of people. Games don't have the scale, but they can have the problem of a ton of NPCs. If your player is going to a restaurant with a bunch of NPC's in it, let's say there are 30 NPCs, do you really want to write interesting dialog for all 30 of them? Even if there are only lines for the first, second, and 3+ encounter that's about 100 lines of dialog. Repeat that process for every inn, tavern, shop, arena, and city guard in a large scale game and you're looking at a tremendous number of dialog lines. Decide early on in the design how you handle this. If everyone in the game world can have meaningful unique conversations and personalities, you will have sparsely-populated worlds. Some games do exactly that, other games have densely populated cities with reused lines, or meaningless lines like "...".
  13. frob

    Did I really remake Minecraft?

    Then you will remain classified as a Minecraft clone. It sounds like you know this already. You compare your program against Minecraft in almost all the posts. It is like Minecraft except units are half height, it is like Minecraft except textures are different, it is like Minecraft except it has different creatures. That is only a problem if being considered a Minecraft clone is an issue. If people (like potential funding sources) are willing to fund a Minecraft clone then you'll be fine getting funding. If people aren't willing to support it because there are so many minecraft clones out there, then they wont'. This is not unique to Minecraft, by the way. It is done for a huge number of major games. Many platformers are considered Mario clones, falling block games are Tetris clones, word games are Scrabble clones or Boggle clones, bouncing ball games are Breakout clones or Arkanoid clones, text based dungeons are Rogue-likes, and so on.
  14. A simple rhythm-based game like Osu! won't tax any reasonably modern device. Even decade-old hardware can run rhythm games. One game I was on for the Nintendo DS (with a 66 MHz processor) included beat-based rhythm games, and they had no performance concerns. Of course, you can write terrible code for any project that runs slow, but that's nothing to do with the type of game you're making. What you describe can be done without worrying about the hardware. Buy some tablets, make the worst one your minimum spec, and start developing.
  15. As a result of the things hplus described, there are some things you can do around it. You also didn't mention the kind of 'lication they were developing. Games, business needs, banking needs, there are many programs with different needs. Geolocation is quite common for game matchmaking servers. You want to put people in the same location in the same game. While it isn't precise, if you've got four IP addresses showing as registered in Sydney, Moscow, London, and South Africa, those four should never be automatically placed in a game together. If for some reason you do have people who intentionally join their long-distance friends through a direct invitation, be prepared to radically increase the timeouts. Fallbacks for location are important. Any client that doesn't have geolocation information consider their network route, or anything else you're able to. If you still have no clue where they're at, look at ping times to various locations in the globe and guess. If you still have no idea where they're located, blindly bump the timeouts. If you've got approximate location, try to matchmake within a thousand kilometers or so, then 1500, 2000, 3000, progressively falling back with an ever-increasing penalty. 5000 km is a long way, and anything over that should probably never get connected automatically. For business software, if you know their IP address is located in a problematic country then yes, you should increase their timeouts. You don't need to do it for everyone, if you know they're on the US east coast and you've got servers hosted on Amazon's US east coast, keep those times down. But if they're coming from South Africa or Sydney or Tokyo or Calcutta and connecting to those same US east coast servers, bump the timeout. Another is dynamically adjusting timeouts based on round trip times. Allowing 2x or 3x RTT can help, with appropriate minimums to compensate for people on the same LAN. Thus if machines normally wait about 2 ms for data, you might wait 4 or 6 ms before retransmitting; two machines communicating at 80ms might delay 160ms or 240ms before retransmitting, two machines that are normally 120ms might delay 240ms or 360ms before retransmitting. Consider having a cutoff, particularly for games. You might decide that it doesn't matter if the players are best friends separated by distance, if the RTT exceeds some specific time they're not allowed to play. What that value is depends on the game. If you've got an action brawler the game will be unplayable when round trip times reach must past 150ms or so. Similarly to round trip latency, bandwidth has requirements for gameplay. If you've got a game that requires about 1MB per minute or 250KBps up/down, whatever the value is, that is what the game requires. It doesn't matter why the required rate cannot be maintained, if it is because they've got a modem from the 1990s or because somebody in their home is torrenting the newest Linux kernel drop or streaming 4K movies, the cause is irrelevant. If they don't have the bandwidth to play, tell them so. The cutoff can be hard or soft, and games have implemented both. Voting to drop players based on connectivity is somewhat common, meaning you can still play with your friend who is on the opposite side of the world, then when the prompt shows up to boot the player you can indicate that you want to keep playing despite their 400ms latency and 0.5kbps bandwidth. That kind of vote is basically the same as increasing the timeouts as you described, but allowing players the choice instead of making it for them. Systems of caching and queuing can potentially cause problems, particularly when services become completely unreachable and connections lost. How you handle that depends tremendously on what the data is. You don't want half-completed transactions when players are selling items to another player, and when someone is trying to pick up an ultra-rare or unique item that completes their collection you will need to ensure it is handled well, but on the other hand, aborting a quick match might be done with no player-facing repercussions. Outside of games, something like filling out a long sequence of government forms and then having the caching/queuing system fail when submitting them can result in major discontent, dropping forum posts from such a system is an annoyance but less of a problem. Similarly, if your banking software times out and won't let you transfer money, a long timeout is far less of a problem than a failed transaction. Most systems need to make sure they have idempotent solutions. You don't want to duplicate a transaction if it comes across the wire twice. As you have connectivity problems the risk of duplicate communications increases tremendously.
  16. BingBong

    Newbie on the block

    Well, I guess newbie should explain it! My coding journey is a complicated one. I have been studying several aspects of coding sparingly for a while. I came across gaming while exploring HTML, CSS, and Java Script. Use of API's on CANVAS style elements in gaming. Rendering in web browser. So, that is where I am basically, I kind of went this route because i have a minor background in mathematics. And it has kind of rekindled my Math years. In a nutshell, functions are a big part of gaming as i can see, and math is a big part of functions, and coding is a big part of computers, and here is where the adventure lies. So maybe i can learn some more from this site. Hopefully! Thanks a bunch!
  17. Thanks! I'd seen the MSDN page (https://docs.microsoft.com/en-us/windows/desktop/direct3d12/hardware-support) before, but it's great to have an additional resource to turn to for referencing actual hardware support. That combined with Steam's hardware survey seems like a really handy combination. And yeah, I probably should've specified that by bindless I was more specifically referring to SRVs. I can see it as useful for CBVs and UAVs, but so far haven't had issue working even within their low tier limits.
  18. For D3D12 at least, you're good for bindless SRV's if the device supports Tier 2 resource binding. You can check which hardware supports that this handy chart. Tier 2 still restricts what you can do for CBV's and UAV's, but those are easier to work around in my opinion.
  19. Hello, I know that you are not currently looking for a sound designer or Foley artist but I just want to throw myself out there and let you know that I am available to do any sound work (apart from music) for your production. Shoot me a message if you are interested! Joe
  20. J.Corbeil

    A Revolutionary New Game

    Hello, I am a sound designer and Foley artist and I would love to get involved if you still need someone. My job is in post production so I am not totally sure if you need a sound person now or later down the road? Feel free to shoot me a message! Joe
  21. Magogan

    Did I really remake Minecraft?

    But that's stupid. Why should I not be allowed to use cubes, just because Minecraft used them? Is it really that big of a problem if my game somewhat looks like Minecraft? I won't change the cubes. They will stay. It took me years to optimize that so you can have cubes that are half the size (0.5m) of the Minecraft cubes. That really changes a lot: No more jumping up a single block, a more detailed world, ... Plus the higher mountains, they can actually be a kilometer high. I really like the mountain ranges that are possible without the 256 block height limit. All those things you will never see in Minecraft. I just don't know how to make people see that instead of "it's just Minecraft".
  22. frob

    Quaternion to Euler very imprecise

    You are using floating point. This probably does not do what you think it does. It looks like you are relying on your knowledge that there are enough bits in a float to represent approximately 7 decimal digits. Unfortunately for that code, it will only give you the results you expect when the floating decimal point is set at a single scale. The tolerance you've got there is extremely small, particularly when mixed with trig functions. Floating point numbers have variable precision, hence the name of a "floating" point. There is an old article, What Every Computer Scientist Should Know About Floating-Point Arithmetic, that covers much of the details about why it is the case. That paper is math heavy, but should explain that floating point is an approximation. Once you're finished with that paper, you need to understand what the hardware actually does. Features like range reduction make the hardware faster, but result in slightly less precise answers than you may expect. Other floating point configuration options can also make a difference, as can interference from other programs and even other libraries your code uses. (If you're building a 64-bit program that uses SIMD registers instead of FPU registers that specific issue is less frequent, but still potentially a problem.) After that, the operations you perform yourself in the code affect numeric precision. Because of the nature of math, when you write x = CosHY * SinHP * CosHR + SinHY * CosHP * SinHR; by definition you have lost numeric precision. It cannot be avoided. That by itself can be enough to lose those the precision your code has specified. Once you understand the math side, you need to understand what it means for angles (or in this case, for a quaternion) to have an error that is on the scale of 10-6. That's quite a small variance you've allowed. The math itself is probably both precise enough and accurate enough for what you are trying to do.
  23. lawnjelly

    Quaternion to Euler very imprecise

    Quite apart from the conventions as Zakwayda mentions, here's my rubbish take on it as a non-mathematician : As I understand it, Euler angles have some real limitations to describing rotations, they suffer from gimbal lock and loss of degree of freedom. Although they are conceptually easy to understand, I believe they are at best 'ok' at describing some limited set of rotations, and incredibly bad at describing others once you get into gimbal lock territory (it's like trying to shoehorn an xyz vector into an xy vector afaik with the loss of degree of freedom). As such going from a human understandable form yaw / pitch / roll to a quaternion / matrix is common in e.g. camera or model transforms (as long as you don't get too ambitious), but for anything much more complex than that (including interpolation like slerp) you would tend to use quaternions / axis angle / or other better rotation measures. And trying to go from quaternion to euler is just bound to go horribly wrong, even the thought of it sends shivers down my spine. Incidentally, that guy in the video pronounces it 'oiler', but that is some silly swiss german thing, it is much more sensible to pronounce it 'youler', take it from me as an englishman, inventors of the greatest language in the world (aside from c++). I don't put eul in my motorbike engine, and I don't watch videos on oiltube, so why should my angles involve oil?
  24. Alundra

    Quaternion to Euler very imprecise

    I don't use a lib, it's a custom Quaternion using ZYX order, conversion based on this source: https://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/
  25. Zakwayda

    Quaternion to Euler very imprecise

    If you don't get any answers based on what you've posted so far, here are a few questions (the answers to which could be helpful): - What Euler order convention do the functions in question use (e.g. XYZ, XZY, etc.)? - What math library are you using? If it's your own, what are your sources for the conversion algorithms? - What kind of difference are you seeing before and after conversion? Is the orientation just shifted a bit, or is it completely different?
  26. This is the reason why I went beyond the concept of trying to make reusable modules for compiling into projects. These end up being rewritten for individual projects. Then they start breaking other projects and become incompatible. Then you have again tons of different "version" of the same game engine and you end up with no gain at all. What I did is examine various game components and identifying what "building units" they actually use. These units are large enough to be optimized by modules and small enough to build game concepts. As I see it most game concepts can be broken down into these units. What I have then are independent larger modules (like graphics, physics, input to name a few) which anybody outside the game engine can create himself. These larger modules are compatible and interchangeable even at runtime. You can pause the game engine, switch to a different graphic module for example, and continue where you left off. I am convinced this is the kind of future proof game engine concept many are looking for. It goes beyond your concept though.
  27. Games, like all complex programs, absolutely must consider object lifetimes. Objects need to be created at well-specified times, live from one designated time to another designated time, and then be destroyed and cleaned up at the end of their lives. Whatever plan you follow, you need to follow it consistently. That seems to be the problem here. Historically there have been many restrictions on memory, because game consoles had very little memory available, and a failed allocation due to many reasons (like memory fragmentation) generally results in program-terminating behavior. This in turn led to various practices. Some only allow allocations/released during level transitions or loading screens. Some have required no allocations/releases at all, only loading the entire world as a single block, then unloading the entire world as a single block. Some games have limited allocations/releases to only be done outside of certain times, like outside of the main loop during inter-frame delays. Many object lifetimes must be guaranteed by policies. When a function receives an object pointer as a parameter, a general guarantee is that the object will remain in memory for the duration of the function. However, unless it is specified in the broad design saving the pointer to the object is bad because the pointer may be a temporary object, or may be unloaded through other systems. You may decide that these pointers are no longer guaranteed at the end of a graphics frame, or that they are no longer guaranteed after a level load, or that the code must always follow a pair of registering an object exactly once, then unregistering the object a single time before it is destroyed. Smart pointers can solve a few problems related to object management when there are multiple systems that must share certain responsibilities for object lifetimes, but they do not replace a solid design. Smart pointers still fail terribly under many conditions, and they still suffer from resource leaks under conditions like circular references. They do not replace the fundamenal issue that object lifetime must be well understood. Getting back to the issue with this code... Under one set of circumstances, the class is using an external object. Other systems own the lifetime of the object, other systems create the object, and other systems destroy the object. This is the most common pattern in software. Under another set of circumstances, the class acquires ownership of an external object. Other systems create the object, but under various circumstances this system will destroy the object. This is NOT the typical pattern in software. The typical object lifetime rules are being violated. In general you should write code that follows a source/sink model. If a system is the source of creating objects, it should also sink or destroy them when they are done. That is, you should always have a pair of functions for create/destroy, allocate/free, new/delete, load/unload, add/remove, and keep those responsibilities paired together. Either this object controls ALL aspects of sub-object lifetime, or it controls NONE of the sub-object lifetime. With an 'all or none' guarantee, code that uses the system can follow more broad policy rules about when it is safe to allocate or release resources. This also allows for alternate forms of memory management. You can use different systems for pools of memory, allocating some stuff from one pool or global memory, allocating other stuff from different pools or different memory managers. If you do ALL the work you can use your specified pool or memory manager. If you do NONE of the work those who use the system can use whatever memory management they wish. But if you take partial control, outside systems are limited to only use the forms you use in your half of the system.
  1. Load more activity
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net 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!