Thread: Basic 2D car game problem

1. Basic 2D car game problem

I'm programming the typical 2d car game in c++ with glut and opengl and i'm trying to acommplish this:

1. Two quads (4 tris), one for the circuit, the other for the car
2. The quad of the circuit has a texture of a circuit in his top view and is static, while the quad of the car has a texture of a car in a top view too and is not static

Circuit (example) http://caterhamf1.com/previews/2013/...g/TrackMap.png
Car (example) http://img2.netcarshow.com/Ferrari-F...llpaper_27.jpg

That more or less i know how to do it but, here's my questions:

3. The car is like a "vector", if I press UP it goes in the positive direction of his vector, if I press DOWN goes in reverse direction and if I press RIGHT or LEFT the vector rotates a few grades and growing (something like the ++ in C++)

4. Could I have a chase cam with it? So only a ceratin area will apear in the screen (where the car is, not the full map

How I could do that? I'm not asking for a complete source code, just the way of how to do it

Also OpenAL website does not work, there's other option apart of OpenAL

Thank you very much!

2. Originally Posted by Marc Colomé
4. Could I have a chase cam with it? So only a ceratin area will apear in the screen (where the car is, not the full map
glTranslatef(-car_x, -car_y, 0) before rendering the map.

3. Thank you!

Also how I could make to have 2 quads at the same time? I'm only able to have one

4. anyone knows?

6. //Is a modified code from videotutorialsrock.com, the best way i found for learning OGL!

#include <iostream>
#include <stdlib.h>
#include <glut.h>

using namespace std;

//Called when a key is pressed
void handleKeypress(unsigned char key, int x, int y) {
switch (key) {
case 27: //Escape key
exit(0);
}
}

//Initializes 3D rendering
void initRendering() {
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL); //Enable color
glClearColor(0.7f, 0.9f, 1.0f, 1.0f); //Background color is sky blue
}

//Called when the window is resized
void handleResize(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, (double)w / (double)h, 0.01/*Min render distance*/, 500.0/*Max distance*/);//Meters
}

float _angle = 30.0f;
float _cameraAngle = 0.0f;

//Draws the 3D scene
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glRotatef(-_cameraAngle, 0.0f, 1.0f, 0.0f);
glTranslatef(0.0f, 0.0f, -20.0f);//I have moved the circuit and the car 20 meters under, so now
//the camera is "set" at 20 meters high than the car and the circuit

glColor3f(1.0f, 0.0f, 0.0f); //Red Ferrari
glVertex3f(-2.25f, 1.0f, 0.0f); //Meters (4,5m long per 2,25m wide)
glVertex3f(2.25f, 1.0f, 0.0f);
glVertex3f(2.25f, -1.0f, 0.0f);
glVertex3f(-2.25f, -1.0f, 0.0f);
glEnd();

glColor3f(0.2f, 0.2f, 0.2f); //Asphalt color
glVertex3f(-200.0f, 200.0f, 0.0f); //Meters
glVertex3f(200.0f, 200.0f, 0.0f);
glVertex3f(200.0f, -200.0f, 0.0f);
glVertex3f(-200.0f, -200.0f, 0.0f);
glEnd();

glutSwapBuffers();
}

void update(int value) {
_angle += 2.0f;
if (_angle > 360) {
_angle -= 360;
}

glutPostRedisplay();
glutTimerFunc(25, update, 0);
}

int main(int argc, char** argv) {
//Initialize GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(320, 240);

//Create the window
glutCreateWindow("Test");
initRendering();

//Set handler functions
glutDisplayFunc(drawScene);
glutKeyboardFunc(handleKeypress);
glutReshapeFunc(handleResize);

glutTimerFunc(25, update, 0); //Add a timer

glutMainLoop();
return 0;
}

What I need to do is rotate the car and then make it go foward in his direction.

I can't do it

7. As promised, I ran your code. The good news is that it worked.
Though I think it's a bit of a stretch to call a red rectangle a Ferrari

Is a modified code from videotutorialsrock.com, the best way i found for learning OGL!
I don't mean to be snide, but maybe this site isn't so good if you can't figure out how to rotate a rectangle!

What I need to do is rotate the car and then make it go foward in his direction. I can't do it
One thing at a time - rotating the car. I assume you want to do this interactively using a key on the keyboard. Your code only needs a few changes to do this. First add another global variable called 'rotate_car' or something similar. Let's say you want to rotate it 1.0 degs when the 'r' key is pushed once. Add a line to the 'handleKeypress' routine - something like below ...

Code :
```void handleKeypress (unsigned char key, int x, int y)
{
switch (key)  {
case  'r':  ++rotate_car;  break;
case 27:  exit(0);
}
}```
You can add other 'case' lines for negative rotations and translations. Next, in your 'drawScene' routine replace '-_cameraAngle' with 'rotate_car' in the glRotatef command. The glTranslatef command just below that can be used to move the car (with more global variables and 'case' commands). This should get you started.

8. No carmine! I meant to rotate the quad and then make the quad go in the direction of the car!

See it like a vector: Rotate it and then go foward through it direction, I could rotate it but not go in the foward direction

Thank you!

Marc

9. look at this

10. No carmine! I meant to rotate the quad and then make the quad go in the direction of the car!
Yes. That's what you said. But your code doesn't show that you know how to do even basic rotations and translations. To me the code is the truth. It is where you are at. If you can do basic rotations and translations, show it to us in the code. Explain why you are not satisfied with them. I think you'll get more responses from there. You will from me.

Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•