Resources for a 3D animation program [closed] - c++

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 3 years ago.
Improve this question
I'm trying to develop my own mini animation program like maya, blender, cinema 4d where I can create objects, move them around, render them, etc. Does anyone know any good resources for that? I've found a few but usually when I google for something similar to this all that comes up are game engines. I'm not trying to create a game. And please, don't tell me things like "you need a team", "just use what is already out there", "you're probably not experienced enough"..
Here are some resources I've already found:
https://www.reddit.com/r/cpp/comments/3g1pvf/i_want_to_create_a_3d_engine_from_scratch_where/
https://gamedevelopment.tutsplus.com/tutorials/lets-build-a-3d-graphics-engine-points-vectors-and-basic-concepts--gamedev-8143
https://www.codeproject.com/Articles/1168552/Build-My-Own-D-graphics-engine-step-by-step
Target: Windows

Math
You should know enough linear algebra to know how the various linear transformations in 3D graphics work - translation, scaling, change of coordinate basis, view transformation etc.
You should also know how to render curves and surfaces using splines, Bezier curves, Bezier patches, subdivision methods (e.g., Catmull-Clark) etc.
Mathematics for 3D Game Programming and Computer Graphics is a good place to start if you are unfamiliar with the math.
GUI
After that, you need to pick the libraries for building the application. For building the GUI, if you want to make it easy to port it across platforms, go with Qt. If you only want to target Windows, then go with the native .NET library.
3D Engine
For representing, manipulating, and rendering 3D objects, you could go with the Unity engine. There are a lot of tutorials and books around to teach you how it works.
If you want to go deeper and build your own engine, you can either work with DirectX or OpenGL/Khronos.

Related

Use OpenGL or Qt? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
There is not much experience with OpenGL to create a two-dimensional scene. I decided to work with 3D and got up with this question: how best?
1) Use a normal OpenGL?
2) Work with OpenGL through Qt?
The main goal - to provide real-world experience working with graphics. And these questions were formed:
1) Which of the options used in real game development (when the company originally wrote the engine)?
2) Which of the options would be more advantageous for an employer? If I have experience with OpenGL or OpenGL ES in Qt?
P.S.I'm sorry, Not very good at English. I hope for an answer!
Qt is an UI library, it has nothing to do with whether you wanna use OpenGL or not.
OpenGL and Qt are not exclusive, though. Eat a burger or burger + coke? – rolevax.
if you want your application have a nice UI when you're not in 3D mode, you need a UI library, for example, game start screens.
Game Engines are developed based on 3D libraries like OpenGL DirectX Metal etc.
none of the options would be more advantageous for an employer. It's just libraries, you can just learn it if you're good at coding.
Qt is a GUI library, not a rendering library. You can create an OpenGL context using the QOpenGL class. Although OpenGL is a 3D API, it's very much possible to render 2D graphics by using an orthagonal projection matrix and not using the Z coordinate.
For 2D graphics, though, I recommend using a library like SDL which is very simple and high-level. There are also a ton of games that use it.

Embedded 3d graphic engine with supporting Blender models [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I'm trying to develop desktop application. User can load 3d models from Blender with animation (simple object (move, rotate, etc) animation and NLA tracks) and interact with it (rotate model, zoom, click on different object, run animation).
Requirements:
Platforms: Windows, Linux.
High performance
Blender support.
Application's language: C++, C#, maybe another.
I know about Blend4Web (low performance for big model) and Ogre3d (tried to export scene from blender but in app see only black screen unfortunately). I will wonder if I miss something usefull.
Most Graphics Libraries can store files in the WaveFront obj format. libObj can parse and read this format. You should then be able to upload the models to OpenGL and perform the operations that you require.
For a framework to build your app look at GameKit
Using Ogre for graphics, Bullet for physics, OpenAL for sound
OgreKit is most actively developed
Engine is written in C++ and the game logic can be done in C++, Lua scripting or logic bricks
Reads all data from Blender .blend files, with future FBX import planned
Free from viral licenses: only using components using MIT/BSD/Zlib style licenses
CMake cross-platform build system support that works out-of-the-box, see http://cmake.org
Gamekit supports Windows and Mac OSX, Linux, Android and iPhone.
While it doesn't directly read blend files godot is a graphical game building application with python like scripting, it has a gui toolkit that can be used for non-game applications and they offer a blender addon for collada export that is meant to be better than the official one. Being open source you can also adjust it to your needs.

Need advice on 3D and 2D C++ framework selection [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
We are a small company with only 2 programmers. We currently make small 2D and 3D games for desktop and mobile using Adobe Flash/Air. We want to stop using that framework and start learning and developing on C++ because there are much more and better libraries and frameworks available on C++.
I'm not sure about the libraries to use for rendering. I know that Ogre3D is a great rendering engine for 3D content but sometimes we need to make 2D games or "2.5D" games, sometimes with video playback, and all that need to be mixed with 3D scenes.
I know there are 2D frameworks like cocos2D-x and smfl that works with OpenGL (I don't know much about OpenGL) and can do all the 2D things I need, but can those frameworks be combined with Ogre3D? And can it be done without the need of knowing how all the Ogre3D internal stuff or OpenGL works?
If Ogre3D can be combined with any 2D engine, what do I need to learn to merge the frameworks?
Given that you have been using flash, I am guessing you are not porting old C++ code.
Also, since you don't want to know about how the internals of the framework you're using or how OpenGL actually works, you don't need a low level language like C++.
An abundance of open source libraries is not a very good reason to program your game in C++ either.
Unity3D has a free basic license, and provides everything you need out of the box.
For now, you can use planes with textures to do your 2D work, but Unity will also be coming out with a set of Native 2D Tools in the near future. Also, a new GUI system is being created.
For any C++ library you think you may need, there is probably something already built into unity that does what you want. If there isn't, there is probably a .NET port that you can use. And if all else fails, you can write a C interface for any library you need, and use it as a plugin in Unity.
One big problem with Unity though, is that you need Unity Pro to use plugins. Unity licenses are per-platform, So if you decide to use plugins, and release your game for multiple platforms, you could end up paying a lot of money in licensing fees.
Finally, it's not just an application framework you'll need. You'll also need a level editor. Building a 3D level editor is not a trivial task, and given that your team consists of only two people, this fact alone should be enough to seriously consider using Unity.
So unless you are porting old code, need low level access to hardware, or have specific needs for native code, my advice is don't use C++, just use Unity.
Yes, Ogre3D can handle such "2D tasks" as playing a video. Simply a plane in 3D space that it gets projected onto. However for pure 2D projects an 3D rendering engine such as Ogre3D is usually overkill. If you are talking about 2,5D though, you are back in play with Ogre3D.
Regarding integrations: Not completely sure, but I guess those other 2D frameworks need an OpenGL rendering context that you can get from Ogre.
EDIT: Same question has been asked in the official Ogre3D forums.
We are another small team working on game development.
We tried many rendering engines and finally settled down with Irrlicht Rendering engine. Irrlicht is no way better than Ogre 3D or am not trying to prove that. We felt Irrlicht more flexible for our need. It also supports 2D rendering and it is quite fast with batching. Irrlicht can be easily ported to other platforms, It took us a week to port it to Google Chrome NaCl.
Irrlicht is a very basic rendering system that supports OpenGL and OpenGL ES, so its easy for your to go mobile. You can add any advanced features without much effort. Some of our games are available for iOS, Android, Windows PC, Mac OSX, Linux and Google Chrome Native Client.

3d game with Python, starting from nothing [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4 years ago.
Improve this question
So we want to program a 3d game for school, we can probably use blender for the 3d models, however we are totally clueless as to how to use them in a game/application.
Are there any recommended guides/documents we should read on general 3d game programming and perhaps python specific stuff.
We are also possibly considering programming it in C++ but for now I think it's easier to use Python as we can fully focus on the 3d mechanics that way.
Panda3D is a nice, powerful game engine which allows for scripting in Python. This looks like a good place to start.
If you seek something more low-level, there's still PyOpenGL or pygame.
There's Pygame: A game framework for the Python language. If you need to know the basics for game development (engine, flow, ui, mathematics), this framework with all its examples will help you a lot. This won't take you by the hand and guide you step by step through game-development, but if you need a reference and a decent framework, than this is a good start.
There's also PyOpenGL: The official Python wrapper for OpenGL programming. Again with lots of programming examples in the field and tons of code snippets on how to use 3d models and the likes. Can be used together with PyGame.
But you should start by familiarizing yourself with some 3D basics. Look around at the GameDev.net site. Learn a thing or two about matrices (and perhaps quaternions). There are lots of beginners tutorials and references available to get you started.
edit: I almost forgot: there's also Panda3D with extensive scripting possibilities for Python. Maybe that'll offer a higher level of game development.
You can actually develop games in Blender via Python. There are quite a few tutorials, I'll let you google around for the style you like.
More info here
An alternative to PyGame, which I personally prefer, is pyglet.
http://pyglet.org
If you want to write a 3D game you might want to start by understanding the basics of programming and computer science. Starting with the top and learning a language, then find yourself a good graphics library for example Panda, Pygame are all good choices, then there are other parts to consider like networking with twisted for example or a physics engine. It might also be a good choice to consider using a working engine like the unreal engine as often game designers get too wrapped up in game mechanics and not the game itself
You should be aware that 3D game consists of
animated 3D models
3D environment (including NPCs and objects)
simulation of interaction between the environment and the models (game logic and game mechanics)
user interface (starting, saving and game settings)
The game logic and mechanics is going to usually the biggest and most complicated part and you should try to wrap your head against that first.
Modeling 3D objects and environment should be much easier after that.
I would implement the time-critical stuff as 3D and its object handling + rendering in raw C/C++ and let an embedded Python with external modules handle the game logic (object movement, object properties, scripting and so on).
It's quit easy to code simple 3D games. The position of any object on the screen can always be calculated as simply as:
position = (x/z*fov,x/z*fov)
where x and z are both horizontal axis and fov is the player's field of view, in [radians/degrees/pixels/...].
When you rotate around, the word is rotating not you. It means that you are always looking against positive z.
Quaternions is the best way to rotate the world around you.
Ps. use vertexarrays or arrays to for the fastest possible 3d graphics

3d Realtime Software Renderer Open Source [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
Is there a good 3d realtime software renderer with features similar to OpenGL/DirectX? Something similar of what cairo or anti-grain do for 2d, but in 3d.
I actually just know Mesa witch has a software OpenGL implementation , and Coco3d.
It should be open source :)
You could have a look into Orge 3D engine assuming you want an abstraction from the raw GL to something that already has a lot of the key features. It's open source too.
I believe the OpenSceneGraph has grown to be pretty competent and widely used.
For a pixel rendering engine why not have look at the DOOM rendering engine sources.
Another smaller and more standard API/OpenGL implementation called TinyGL could be something to look at too.
Technically OpenGL is just a standard, but there are OSS implementations available for download. I'm not sure you want a reference OGL driver though.
For 3d libraries, there are loads. Irrlicht, CrystalSpace, Ogre3d, to name just 3 off Sourceforge's trove list.
The only major open source real-time software renderer besides Mesa I know of is the Quake I engine. However, it's not up to par with current OpenGL or Direct3D capabilities.
If you can do without the source code, you could have a look at the Microsoft WARP10 renderer. It's a high performance implementation of Direct3D 10 on the CPU.
Check out Coin, an implementation of OpenInventor maintained by the company I'm employed by. It's licensed under a dual licensing model - GPL for free/opensource software. It's being actively developed and uses OpenGL to do rendering. It works on "all" platforms and can be easily integrated with Qt.
For standalone alternatives to OpenGL / Direct3D i would look at
Open source implementation of openGl : Mesa3D
Gallium3D
an implemantation of the the openRT specification: directViz
some reasearch to implement realtime RenderMan : RenderMan for realtime and the progress
OpenGL is open source, and should fall back to software rendering in the absense of 3D hardware on the system, provided that all the proper libraries are installed.