• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Kurt Blanken

A decent OpenGL2D Tutorial

7 posts in this topic

Hello GameDev.net! I hope we become best friends in the coming months!

I want to create a video game. I am developing in Visual Studio 2010 (C++). I want the project to one day be portable. Because of this, I would like to use OpenGL for my graphics.

The problem is that no tutorial I have found decently explains how to do 2D in OpenGL for a beginner. I am not interested in 3D, just 2D. Can anyone link me to a decent tutorial that also was made relatively recently?
0

Share this post


Link to post
Share on other sites
[quote name='Kurt Blanken' timestamp='1308163890' post='4823735']
Hello GameDev.net! I hope we become best friends in the coming months!

I want to create a video game. I am developing in Visual Studio 2010 (C++). I want the project to one day be portable. Because of this, I would like to use OpenGL for my graphics.

The problem is that no tutorial I have found decently explains how to do 2D in OpenGL for a beginner. I am not interested in 3D, just 2D. Can anyone link me to a decent tutorial that also was made relatively recently?
[/quote]
I don't know of any tutorials off-hand that directly relate to 2-d graphics in OpenGL, but if you understand how OpenGL works in general, working in 2-d should be fairly straightforward. Here's a few considerations though:

- For a strictly 2-d game, you'd typically use an orthographic rather than perspective projection.

- 'Sprites' can be rendered as textured quads.

- If pixel-perfect graphics aren't needed, you can make the size of the projection whatever you like.

- If pixel-perfect graphics are needed, you'd typically set up the projection so that it matches the window pixel-for-pixel. (For more on how to realize pixel-perfect graphics in OpenGL, search for 'opengl pixel perfect'.)

- You can achieve layering either via the depth buffer, or via render order (painter's algorithm) with depth buffering turned off.
0

Share this post


Link to post
Share on other sites
The keywords here are 'orthogonal' and 'orthographic'. Also found this: [url="http://www.gamedev.net/topic/104791-last-post-about-2d-in-opengl-so-please-stop/"]http://www.gamedev.net/topic/104791-last-post-about-2d-in-opengl-so-please-stop/[/url]. Hope it helps!
0

Share this post


Link to post
Share on other sites
[quote name='jyk' timestamp='1308169808' post='4823787']
I don't know of any tutorials off-hand that directly relate to 2-d graphics in OpenGL, but if you understand how OpenGL works in general, working in 2-d should be fairly straightforward. Here's a few considerations though:

- For a strictly 2-d game, you'd typically use an orthographic rather than perspective projection.

- 'Sprites' can be rendered as textured quads.

- If pixel-perfect graphics aren't needed, you can make the size of the projection whatever you like.

- If pixel-perfect graphics are needed, you'd typically set up the projection so that it matches the window pixel-for-pixel. (For more on how to realize pixel-perfect graphics in OpenGL, search for 'opengl pixel perfect'.)

- You can achieve layering either via the depth buffer, or via render order (painter's algorithm) with depth buffering turned off.
[/quote]

The problem is that I am not familiar with OpenGL.

What I have to do: Welcome to OpenGL -> a bunch of stuff -> how to do 2D for someone familiar with OpenGL
What I want to do: Welcome to OpenGL -> 2D in OpenGL

DarklyDreaming: That is a start, but it is only code with no description as to what everything does. (Also: 2002)
0

Share this post


Link to post
Share on other sites
[quote name='Kurt Blanken' timestamp='1308175556' post='4823821']
The problem is that I am not familiar with OpenGL.

What I have to do: Welcome to OpenGL -> a bunch of stuff -> how to do 2D for someone familiar with OpenGL
What I want to do: Welcome to OpenGL -> 2D in OpenGL[/quote]
Have you considered using a library such as SFML or SDL 1.3 that will handle the details of OpenGL-based 2-d graphics for you?

If you want to do it yourself, I wouldn't get too hung up on finding OpenGL references that are specifically geared towards 2-d. OpenGL is OpenGL, more or less, and the differences between a 2-d and 3-d OpenGL-based app will generally reduce to just a few key points (some of which are listed above) which should be easy enough to get a handle on. (And of course if you have any specific questions, you can always ask here or in the OpenGL forum.)
0

Share this post


Link to post
Share on other sites
2D in OpenGL is just the same as 3D execpt everything has the same Z, so work on the 3D stuff (it will be useful to you in the future when you move beyond your current objective) and you're there.
0

Share this post


Link to post
Share on other sites
Hi Kurt.
I am a hobbiest using OpenGL.

What you have to do:
First, let me tell you that most OpenGL Tutorials on the Web are outdated. Unfortunately. You should not use glVertex3f etc anymore, meaning Immediate Mode. Also, Fixed Function Pipeline, meaning OpenGL2 is outdated and should not be used anymore.
Actually, people should learn and use OpenGL3. Best way to learn OpenGL is to read the "OpenGL Superbible, 5th Edition". It covers most techniques.
To get you going, I can show you the basic things needed:

Window Manager Library, I recommend GLUT for you as Beginner or SDL 1.3 or even SFML.
While SFML cannot create a core context (which denies you using deprecated functions).

GLew or GLee. This is a library for loading extensions from the Drivers and you don't have to go through this pain.

glm. This is a math library for OpenGL, written against the Shaderspec 3.0 of OpenGL.

Now I show you in a rough overview how someone renders:
You push your data into a Vertex Buffer Object. This gets uploaded to the Videocard.
Then you tell OpenGL whats in it by defining Attribute Sets.
You can use those Attribute sets in shaders.
You should have Vertices, and TextureCoords there.
The Vertices are multiplied in the Shader with the ViewMatrix which you have to send to the Shader using OpenGL.
The matrix should be a orthographic one, if you want 2D.
This can be achieved with OpenGL and glm like this:

[code]
glm::mat4 viewmatrix = glm::ortho<float>(0.0f, x, y, 0, -1.0f, 1.0f);
int position = glGetAttribLocation(shaderID, "myProjectionMatrix");
glUniformMatrix4fv(position, 1, false, glm::value_ptr(viewmatrix ));
[/code]
Note, that you need a bound shader while doing this.

Here is a basic Shader:
[code]

// Vertex Shader:

#version 330

//----------------------------------------------
// Layout Vars
//----------------------------------------------
layout(location = 0) in vec3 NL_Vertex;
layout(location = 1) in vec4 NL_Color;
layout(location = 2) in vec2 NL_TextureCoord;

//----------------------------------------------
// Uniforms from NightLight
//----------------------------------------------
uniform mat4 NL_ProjectionMatrix;

//----------------------------------------------
// Output to fragment shader
//----------------------------------------------
smooth out vec4 theColor;

void main()
{
//----------------------------------------------
// Applying position
//----------------------------------------------
gl_Position = NL_ProjectionMatrix*vec4(NL_Vertex, 1.0);

//----------------------------------------------
// Output
//----------------------------------------------
theColor = NL_Color;
}

// Fragment Shader:

#version 330

smooth in vec4 theColor;

out vec4 outputColor;

void main()
{
outputColor = theColor;
}


[/code]
All it does is to apply the Viewmatrix to each Vertex and uses the colors defined in the VBO to display the object.

I hope you got a rough overview, but best thing to start learning is here:
[url="http://arcsynthesis.org/gltut/"]Learning Modern 3D Graphics Programming Through OpenGL[/url]

You can also have a look into the sourcecode of my project, it uses OpenGL3 Core and is heavily documented, maybe it helps you getting an idea:
http://code.google.com/p/nightlight2d/source/browse/trunk/NightLightDLL/
1

Share this post


Link to post
Share on other sites
I've posted video tutorials on my website that show how to get 2D and 3D working.
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0