Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <pre><code>GLfloat WHITE[] = {1, 1, 1}; ... Ball(0.5, WHITE, 5, 1, 7) ... color(c) .... glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); </code></pre> <p><a href="http://www.opengl.org/sdk/docs/man2/xhtml/glMaterial.xml#description" rel="nofollow"><code>glMaterialfv()</code></a>:</p> <blockquote> <p><code>GL_AMBIENT</code>: <em>params</em> contains <strong>four</strong> integer or floating-point values</p> <p>...</p> <p><code>GL_DIFFUSE</code>: <em>params</em> contains <strong>four</strong> integer or floating-point values</p> <p>...</p> <p><code>GL_AMBIENT_AND_DIFFUSE</code>: Equivalent to calling <code>glMaterial</code> twice with the same parameter values, once with <code>GL_AMBIENT</code> and once with <code>GL_DIFFUSE</code>.</p> </blockquote> <p><strong>EDIT</strong>:</p> <pre><code>#include &lt;GL/glut.h&gt; // http://eigen.tuxfamily.org #include &lt;Eigen/Core&gt; using namespace Eigen; struct PointMass { PointMass() : pos(0,0,0), vel(0,0,0) {} PointMass( const Vector3f&amp; pos ) : pos( pos ) , vel( 0, 0, 0 ) {} void Integrate( float dt ) { // "gravity" force vector Vector3f g( 0, 0, -2 ); // semi-implicit euler vel = vel + g * dt; pos = pos + vel * dt; // collision detection/response if( pos.z() &lt; 0 ) { pos.z() = -pos.z(); vel.z() = -vel.z(); } } Vector3f pos; Vector3f vel; }; GLfloat WHITE[] = {1, 1, 1, 1}; GLfloat RED[] = {1, 0, 0, 1}; GLfloat GREEN[] = {0, 1, 0, 1}; GLfloat MAGENTA[] = {0, 0, 1, 1}; class Ball { double radius; GLfloat* color; PointMass pm; public: Ball(double r, GLfloat* c, const Vector3f&amp; pos ) : radius(r) , color(c) , pm( pos ) { } void Integrate( float dt ) { pm.Integrate( dt ); } void Draw() { glPushMatrix(); glColor4fv( color ); glTranslatef( pm.pos.x(), pm.pos.y(), pm.pos.z() ); glutSolidSphere(radius, 30, 30); glPopMatrix(); } }; Ball balls[] = { Ball( 0.1, GREEN, Vector3f( 1, 1, 2 ) ), Ball( 0.1, MAGENTA, Vector3f( -1, 1, 1 ) ), Ball( 0.1, WHITE, Vector3f( 0, -1, 1.5 ) ), }; double rotate_x = 55; double rotate_z = 25; void display() { static int last = glutGet(GLUT_ELAPSED_TIME); int cur = glutGet(GLUT_ELAPSED_TIME); float dt = ( cur - last ) / 1000.0f; last = cur; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); double w = glutGet( GLUT_WINDOW_WIDTH ); double h = glutGet( GLUT_WINDOW_HEIGHT ); gluPerspective( 60, w / h, 0.1, 100 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0, 0, -5 ); glRotatef( -rotate_x, 1.0, 0.0, 0.0 ); glRotatef( -rotate_z, 0.0, 0.0, 1.0 ); // ground glBegin(GL_QUADS); glColor3f( 1.0, 0.0, 0.0 ); glVertex2f( -2, -2 ); glColor3f( 0.0, 1.0, 0.0 ); glVertex2f( 2, -2 ); glColor3f( 0.0, 0.0, 1.0 ); glVertex2f( 2, 2 ); glColor3f( 1.0, 0.0, 1.0 ); glVertex2f( -2, 2 ); glEnd(); for (int i = 0; i &lt; sizeof balls / sizeof(Ball); i++) { balls[i].Integrate( dt ); balls[i].Draw(); } glutSwapBuffers(); } void specialKeys( int key, int x, int y ) { if (key == GLUT_KEY_RIGHT) rotate_z += 5; if (key == GLUT_KEY_LEFT) rotate_z -= 5; if (key == GLUT_KEY_UP) rotate_x += 5; if (key == GLUT_KEY_DOWN) rotate_x -= 5; } void timer( int extra ) { // run display() every 16ms or so glutTimerFunc( 16, timer, 0 ); glutPostRedisplay(); } int main(int argc, char* argv[]) { glutInit(&amp;argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("Awesome Cube"); glEnable(GL_DEPTH_TEST); glutDisplayFunc(display); glutSpecialFunc(specialKeys); glutTimerFunc( 0, timer, 0 ); glutMainLoop(); return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload