OpenGL to DirectX

Started by
18 comments, last by 21st Century Moose 9 years, 1 month ago

Hi, I'm new to game programming and I want to move to 3d game development, I have this problem choosing whether I choose OpenGL first then learn DirectX or learn DirectX then OpenGL, Almost all the tutorial I found in DirectX only show how to make this triangle. I really want to learn DirectX first but I cant find any good tutorial that actually make a simple 3d game, like loading .fbx file, controlling character with animation and collision detection. So I think that if I learned OpenGL it will be easy to learn DirectX. Or should I go learn DirectX straight? if yes, is there a good tutorial that will make a simple 3d game for directx? i look for Introduction to 3D Game Programming with Direct3D 11.0 by frank de luna, but it's all about rendering.

Advertisement

Welcome to gamedev, avahdon.

First step: read the Beginner's FAQ. In particular, note the suggestion "Browse and search before you ask, to see if your question has already been asked and answered." There's a search box in the upper right-hand corner of every forum screen. You'll find that your questions have been asked hundreds of times, and you'll gain a lot of info by reading the responses to those questions.

Second: In that FAQ, also note the admonition: "This" versus "that" threads are considered flame bait and will usually be closed on sight. Such questions have usually been asked before, several times, so there should be no need to ask them again.

Asking questions like "DirectX or OpenGL?" will result in a variety of responses that will not likely help you much at all. I.e., responses will likely be:

1. Always start with DirectX.

2. No! Always start with OpenGL.

3. Either one. Just choose and start in learning.

4. No! Don't start with either one - start with [ fill in a dozen suggestions ]

etc.

etc.

happy.png

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

i look for Introduction to 3D Game Programming with Direct3D 11.0 by frank de luna, but it's all about rendering.

It happens that's all you'll use D3D or OpenGL for. They're rendering APIs, they don't handle collisions, they don't handle animations, you have to implement those, then draw them appropriately with the API.

I really want to learn DirectX first but I cant find any good tutorial that actually make a simple 3d game

That is because making a "simple 3D game" from scratch isn't tutorial material, its book material. 3D games aren't simple.

I wont chime in the D3D or GL first debate, but I'll say that if you go the D3D route, start with D3D11, if you go the OpenGL route, start with OpenGL 3.3 or higher.

EDIT: Fuck the editor. Now it messes up quote blocks too. Ugh...

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

Try both API's for a while and decide yourself what is best, as they both perform generally the same job in the end of displaying graphics, and holy wars aside it's all just personal preference.

In the end what matters is writing the solution with the right tool for the job.

Good luck and have fun!

Hi avadhon!

No, you won't find a simple tutorial for what you are seeking: something that does not render a triangle or a cube and resembles a simple game. Those are long a extremely complicated. I am a bit in the same shoes as you: I am experiencing DirectX 11 for the first time. Now granted, I am a self assessed DirectX 9 expert, but DirectX 11 is completely new for me and I am writing a full engine (actually more like and incremental port) from scratch, minus physics. And I can tell you that this engine will be around 500 KiB of code at minimum. Probably 700 KiB. Add to that an external physics engine. There is no way for a tutorial to even cover 100 KiB of code in an easy manner.

But don't let this discourage you! There is a reason most tutorials only show a triangle. That is the base of what you need. You need to learn once the basics of window and device creation. This can be done in DirectX or OpenGl. Not important at all. But once you have this done, I would recommend to abstract away and ignore all this setup and busy work and focus on that triangle. The ideal 3D program that displays a triangle should have one line of code that creates the triangle buffer, one line of code for each vertex in the triangle and one line of code to render it using a camera.

Once you are very comfortable with creating a triangle from scratch, you can do basically anything. Learning to create meshes and what can be done with it is far more important that how to set up a 3D device.

As for OpenGL or DirectX, if you are a beginner and only want to do simple to medium stuff, the choice is irrelevant. Don't let fan boys sway you one way or the other. They are both good in their own way. And if you go with a right handed coordinate system, the same camera and mesh code can run on both.

But if you want the highest of the high level of graphics, super AAA quality rendering, then OpenGl is inferior. Maybe the latest version is great, but the ones I tried were a lot behind. For starters, a big chunk of OpenGL is implemented in the GPU driver. There is a huge quality gap between supper cheap GPUs never meant to do real rendering work and high quality stuff. DirectX if capable of rendering what you wish will have a pretty consistent quality, but of course the low end GPU will run like shit. You will have a beautiful picture that runs a 2 FPS. OpenGL is really not universally capable of of pixel prefect rendering, but does scale OK.

Second, OpenGL does not generally allow you to load precompiled shaders. You need to compile them at runtime. This is a huge disadvantage since modern heavy weight engines use hundreds of KiB of shader code. One of my DirectX 9 projects can spend literally 5 minutes just compiling shaders, but is able to load those precompiled shaders in seconds from a binary blog.

The real question is what you want to do. Do you want to learn the core of 3D rendering? That is procedural meshes and shaders. Do you want to learn rendering in general? Choose one: DirectX or OpenGL. Do you want to write a real game? Don't use either. Start with something like Unity.

The real question is what you want to do. Do you want to learn the core of 3D rendering? That is procedural meshes and shaders. Do you want to learn rendering in general? Choose one: DirectX or OpenGL. Do you want to write a real game? Don't use either. Start with [a game engine like Unity, or at least an existing OpenGL/DirectX wrapper like Ogre/Horde3D/etc].

^^ this (slightly edited for my opinion).

It is possible to write a real game in raw DirectX or opengl. So long as your goals aren't huge, and your idea simple enough it is manageable and achievable.

I am currently writing a game in raw DirectX 11 after using xna for a while, and despite the fact I have very little free time I am making good progress despite not having touched DirectX since dabbling with directdraw 6 in 1999.

I accept though that my game might be prettier and faster to produce if I'd just picked up unity and ported my c# code, but I'd never have learned so much so fast, so it's "horses for courses" as they say...


But if you want the highest of the high level of graphics, super AAA quality rendering, then OpenGl is inferior. Maybe the latest version is great, but the ones I tried were a lot behind. For starters, a big chunk of OpenGL is implemented in the GPU driver. There is a huge quality gap between supper cheap GPUs never meant to do real rendering work and high quality stuff.
[citation needed]

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

thanks all for the answer, i try unity and i find it very easy, you can make games from copy pasting, but i want to know how to create my own game from scratch, i have lots of free time right now so i want to learn the core of game dev, one more question, if i choose to start in directx, will it be easy to switch to opengl? or vise versa? like what happen to me when i learn c#, i know c++ so it become smooth learning. then learning php is much more easier. will it be the same learning when i learn one api, it will be easy to learn the other api? and should i start with dx9 or jump to dx11? i already done 2d with sdl, i made ping pong and some mario like games.

if i choose to start in directx, will it be easy to switch to opengl?

Why do you need to learn both anyway?
Why don’t you just learn the one that is most practical and useful?

And later in life, on a rainy day, if you are really bored and curious, then you can decide if you want to bother learning the other.

I don’t understand why you’ve decided straight out-of-the-gate that you simply must learn both—for no practical reason apparently—and you are so hung up on this strange decision of yours that it has become the stumbling block in your moving forward.

When I was deciding which to learn first, I didn’t ask, “Which makes the other easier to learn oh noes!”, I asked, “Which one do I need for what I want to do right now?”.

Direct3D 9 was the obvious choice for me because I wanted to make games on PC, and then years later iOS devices appeared and then I decided to learn OpenGL.

and should i start with dx9 or jump to dx11?

Direct3D 11.
All API’s representing the current and next generation in graphics are based off Direct3D 11 or Direct3D 12 (that is actually backwards—Direct3D 12 is based off Mantle, but it doesn’t matter which came first).


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

This topic is closed to new replies.

Advertisement