Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 06 Dec 2012
Offline Last Active Apr 03 2013 03:22 AM

Topics I've Started

How can I use Bullet to affect the graphics

07 December 2012 - 10:31 PM

Hello everyone!
I am sort of confused how to visualize this falling ball.
[source lang="cpp"]#ifdef __APPLE__#include <GLUT/glut.h>#else#include <GL/glut.h>#endif#include <stdlib.h>#include <iostream>#include <btBulletDynamicsCommon.h>static int slices = 16;static int stacks = 16;time_t last_update;static float timestep = 1/60;double fallY;/* GLUT callback Handlers */static void resize(int width, int height){ const float ar = (float) width / (float) height; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity() ;}static void display(void){ const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; const double a = t*90.0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(0.8,0.77,0.7); glPushMatrix(); glTranslated(-2.4,1.2,-30); glRotated(60,1,0,0); time_t current_time = glutGet(GLUT_ELAPSED_TIME); time_t since_update = current_time - last_update; //if enough time has passed since the last redraw calculate physics if(since_update>timestep) { dynamicsWorld->stepSimulation(timestep,10); last_update = current_time; } btTransform trans; fallRigidBody->getMotionState()->getWorldTransform(trans); fallY = trans.getOrigin().getY(); glTranslated(0,0,fallY); glutSolidSphere(1,slices,stacks); glPopMatrix(); glutSwapBuffers();}static void key(unsigned char key, int x, int y){ switch (key) { case 27 : exit(0); break; } glutPostRedisplay();}static void idle(void){ glutPostRedisplay();}const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat high_shininess[] = { 100.0f };/* Program entry point */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); btBroadphaseInterface* broadphase = new btDbvtBroadphase(); btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver; btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration); dynamicsWorld->setGravity(btVector3(0,-10,0)); btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),1); btCollisionShape* fallShape = new btSphereShape(1); btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,-1,0))); btRigidBody::btRigidBodyConstructionInfo groundRigidBodyCI(0,groundMotionState,groundShape,btVector3(0,0,0)); btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI); dynamicsWorld->addRigidBody(groundRigidBody); btDefaultMotionState* fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,50,0))); btScalar mass = 1; btVector3 fallInertia(0,0,0); fallShape->calculateLocalInertia(mass,fallInertia); btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia); btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI); dynamicsWorld->addRigidBody(fallRigidBody); glutMainLoop(); return EXIT_SUCCESS;}[/source]
When I compile the code I got the following errors:
COMPUTER\C++\CppMyProjects\HW\main.cpp||In function 'void display()':|
COMPUTER\C++\CppMyProjects\HW\main.cpp|49|error: 'dynamicsWorld' was not declared in this scope|
COMPUTER\C++\CppMyProjects\HW\main.cpp|54|error: 'fallRigidBody' was not declared in this scope|
||=== Build finished: 2 errors, 0 warnings ===|

What should I do?
Please help!
Thank you so much!

Planning to Make a "Ballance-like" Game, seeking advice...

06 December 2012 - 02:06 AM

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!