Indignant

Members
  • Content count

    5
  • Joined

  • Last visited

Community Reputation

117 Neutral

About Indignant

  • Rank
    Newbie
  1. Animating a wheel.

    Hello! First of all, because here we are talking about a spinning wheel, we should probably describe initial speed as degree per frame. So, say if the initial speed is x degree/frame, the the speed in n th frame should be S(n) = x - a(n^2). To make the wheel spin, you just need to call the correct function to rotate the wheel object S degree every frame. Here is some pseudo code(display() is the disply loop that should be called in every game loop ): int frame = 0; double Si = 0; double S = 0; display() { //draw background if (S > 0) { S = Si - a*frame*frame; frame++; if (S > 0) { rotate S degrees; } } else { //end of game, call what you should call } swapBuffer(); } Just my two sents, maybe -a(x^2) is not a good option, because it causes the wheel to slow down faster at the end. In a wheel game like this, usually the last few seconds are the most exciting ones, so maybe you should simply use S(n) = x- a*n instead. int frame = 0; double S = 0; display() { //draw background if (S > 0) { S -= a; if (S > 0) { rotate S degrees; } } else { //end of game, call what you should call } swapBuffer(); } to start the spin, simply assign a value(the initial speed) to S. Hope your lucky wheel get you good luck! [img]http://public.gamedev.net//public/style_emoticons/default/biggrin.png[/img]
  2. Can any give some modified code? Many thanks!!!
  3. 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!
  4. More GPU Path Tracing, honored guest HDR

    Awesome! Beautiful indeed. However, I think glass in real life should not be so transparent(only fluor used to munufacture telescope lens can have such exceptional optical quality:D). So maybe use some random noise as you said and slightly increace the light absorbtion factor would make this more realistic...well just my 2 cents.
  5. 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
  6. Hello everyone! I am planning to make a game similar to Ballance. Here's a wiki link: [url="http://en.wikipedia.org/wiki/Ballance"]http://en.wikipedia.org/wiki/Ballance[/url] 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