Jump to content
  • Advertisement
Sign in to follow this  
TrentLinton

OpenGL Basic Movement in OpenGL

This topic is 2466 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I just started with openGL and I'm just trying to get a Rectangle to move back and forth without going off the edge of the screen whenever the 'a' & 'd' keys are pressed. I know that I need a Switch Statement but I don't know how to get the movement to happen.

If anyone could help me learn this, that would be appreciated.

Share this post


Link to post
Share on other sites
Advertisement
I don't know the rules on "Bumping" in this forum, But I realy could use some help. I have been surfing the web for info about this, but all I have found for OpenGL is 3d this, 3d that, nothing about just moving something back and forth.

Share this post


Link to post
Share on other sites
It depend greatly on your implementation on how you use OpenGL and what you actually want to know.
Do you want to know how to catch inputs? In this case, do you use Win32 with a message loop, SDL with events, maybe glut?
Once you know which key is pressed, you just have to change the position of either 1. actual rectangle vertex positions (change the geometry), 2. world matrix of the object (move the object) or 3. view matrix position (move the camera). Of course, OpenGL IS a 3D api, so everything about movements will always be in 3D, even if you use a "2d" ortho projection­.

And if you don't know what is the world/view/projection matrices, you better start with learning about that. It's the basic about how to position and move objects in a 3D world.

Share this post


Link to post
Share on other sites
#include <iostream>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glut.h>

using namespace std;




int k=0,d=0;
float camx=0.0,camy=0.0,camz=-10.0;
float camrotx=0.0,camroty=0.0,camrotz=0.0;
float camrotdeg = 0.0;
void RenderScene(void)
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(camx,camy,camz); //this guy translates the object into any place you like.

//here you could just say glTranslatef(10,2,7); or anything you like.
//however if you need to controll the translation by keys, you need to set float variables here. and controll
//numbers inside variable's . switch statement below does that. if a keyboard key a or s or w was clicked, switch statement
//grabs for example camx and adds 0.1 to it. if before clicking it was 2.0 , ufter clickeng 'a' it will be 2.1. translatef
// will get new coordinate and translate object onto it.



glRotatef(camrotdeg,camrotx,camroty,camrotz);
glPushMatrix();
glBegin(GL_QUADS); //your rectangle drawing starts here
glVertex3f( -0.5, 0.5,0.0);
glColor3f(1.0, 0.0, 255.0);
glVertex3f( 0.5, 0.5,0.0);
glColor3f(0.0, 255.0, 0.0);
glVertex3f( 0.5, -0.5,0.0);
glColor3f(120.0, 15.0, 0.0);
glVertex3f( -0.5, -0.5,0.0);


glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f( 0.5f, -0.5f,0.0f);
glVertex3f( 0.5f, 0.5f,0.0f);
glVertex3f( 0.5f, 0.5f,0.5f);
glVertex3f( 0.5f, -0.5f,0.5f);

glEnd();


glPopMatrix();
glFlush();
}



void SetupRC(void)
{
glClearColor(0.0f, 0.0f, 0.5f, 1.0f);
glEnable(GL_COLOR_MATERIAL);
}

void camcontroll(unsigned char key, int x,int y) //camcontroll grabs keys that are pressed, then switch statement
//checks different cases.

{
switch (key) {

case'a': //in case if key 'a' was clicked, add 0.1 to camx.see glTranslatef above.
camx += 0.1;
glutPostRedisplay(); //without this, translation will happen but you wont see it on screen. it refreshes the screen
break; //its simple switch statement's guy. ufter every "case" ends, add "break".

case'd':
camx -= 0.1;
glutPostRedisplay();
break;
case'w':
camy -=0.1;
glutPostRedisplay();
break;
case's':
camy +=0.1;
glutPostRedisplay();
break;
case'q':
camz+=0.1;
glutPostRedisplay();
break;
case'e':
camz-=0.1;
glutPostRedisplay();
break;
case'f':
camroty=1.0;
camrotdeg-=1.1;
glutPostRedisplay();
break;
case'h':

camroty=1.0;
camrotdeg+=1.1;
glutPostRedisplay();
break;


default :
break;
}
}


int main(int argc, char* argv[]) //program starts here
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("GLRect");
glutDisplayFunc(RenderScene);
SetupRC();
glutKeyboardFunc(camcontroll); //keyboard input starts working here, see function camcontroll.
glutMainLoop();

return 0;
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

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

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!