Hello everyone!
I am planning to make a game similar to Ballance. Here's a wiki link: http://en.wikipedia.org/wiki/Ballance
I have a few questions though:
1) How can I build the physics engine? Any tutorials for me to start from scratch(code a physics engine myself might mean a lot more work but also a lot more reward)? Or is using something like "bullet" a better idea?
2) How do I render the graphics with OpenGL(What classes do I need to create and where to instantiate them)? Although I can create simple shapes and apply textures in opengl, I have no idea how to render the physical models. For example, the player controled ball, should I create a class "ball" that have both physical properties(a rigid bode and have weight) and graphical properties(wood texture, surface normals)? If so, where should I instantiate it, how can I pass its coordinate, orientation to the OpenGL?
3) How do I make the game levels? I have managed to create 3D models with blender and I can export them as .map or .obj, but I still have no idea how to make them solid objects in my game so that the ball can interact with the map.
Thank you for your advice!
Cordiall,
Indignant
Planning to Make a "Ballance-like" Game, seeking advice...
1) Don't code your physics engine if your goal is to make a game (unless your game has extremely peculiar physics requirements - which this one doesn't). A physics engine adds an immense complexity to your problem and is unlikely to be even remotely close in quality and performance to an engine like Bullet which has been in development for years.
2) Yes, I would make the class contain both the physics and graphics state of the ball. You feed it into your physics engine, read back the ball's new position (and velocity, if you want to do motion blur), update the graphics state with that and render the ball this way. It depends on your physics engine exactly, but you should be able to pass vectors compatibly to both the physics engine and OpenGL so that they can interact.
3) Import those objects, and tell the physics engine to consider them as walls (that cannot be moved). There should be an option somehow to do that (either with a flag, or setting the mass to zero, or something), but again it depends on what you will end up using.
2) Yes, I would make the class contain both the physics and graphics state of the ball. You feed it into your physics engine, read back the ball's new position (and velocity, if you want to do motion blur), update the graphics state with that and render the ball this way. It depends on your physics engine exactly, but you should be able to pass vectors compatibly to both the physics engine and OpenGL so that they can interact.
3) Import those objects, and tell the physics engine to consider them as walls (that cannot be moved). There should be an option somehow to do that (either with a flag, or setting the mass to zero, or something), but again it depends on what you will end up using.
Hello Bacterius!
Thanks for your prompt reply. It is very helpful. I will take a closer look at the Bullet and ask when I have new questions. Thanks!
I have a few more questions though:
1)Where should I init the physics engine?
2)Where and how to make the main loop(which is supposed to be excecuted every frame, processe user input, call the phisics engine to update position and speed of objects, and call graphics engine to post redisplay, right?)
3)Should I instantiate objects in game(eg. the ball class mentioned above) in the following main function?
[source lang="cpp"]
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutReshapeFunc(resize);
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idle);
glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;
}
[/source]
4) How can I pass object to physics engine and read it back? (I know this questions is too broad, but if you know any good tutorial/documentations please let me know. Thanks a ton!)
Your reply would be much appreciated!
Best regards,
Indignant
Thanks for your prompt reply. It is very helpful. I will take a closer look at the Bullet and ask when I have new questions. Thanks!
I have a few more questions though:
1)Where should I init the physics engine?
2)Where and how to make the main loop(which is supposed to be excecuted every frame, processe user input, call the phisics engine to update position and speed of objects, and call graphics engine to post redisplay, right?)
3)Should I instantiate objects in game(eg. the ball class mentioned above) in the following main function?
[source lang="cpp"]
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutReshapeFunc(resize);
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idle);
glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
glutMainLoop();
return EXIT_SUCCESS;
}
[/source]
4) How can I pass object to physics engine and read it back? (I know this questions is too broad, but if you know any good tutorial/documentations please let me know. Thanks a ton!)
Your reply would be much appreciated!
Best regards,
Indignant
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement