void JTLine::draw(float alpha){ //draw line ofNoFill(); glPushAttrib(GL_ENABLE_BIT); glEnable(GL_LINE_SMOOTH); glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); ofSetLineWidth(this->lineWidth); glBegin(GL_LINES); if(pluckCounter==0){ glColor4b( color.red() * 255.0, color.green() * 255.0, color.blue() * 255.0, 128.0 * alpha ); }else{ glColor4f(1,1,1,alpha); } glVertex2f(x3,y3); glColor4b(0,0,0,0); glVertex2f(x4,y4); glEnd(); glPopAttrib(); //draw ball ofSetColor( ballColor.red() * 255.0, ballColor.green() * 255.0, ballColor.blue() * 255.0, 128.0 * alpha ); ofFill(); ofSetLineWidth(1); ofCircle(ballX,ballY,radius); }
///////////////////////////////////////////////////////// // Render // void GEMglColor4b :: render(GemState *state) { glColor4b (red, green, blue, alpha); }
inline void glColor( const GLbyte & red, const GLbyte & green, const GLbyte & blue, const GLbyte & alpha ) { glColor4b( red, green, blue, alpha ); }
M(void, glColor4b, jbyte red, jbyte green, jbyte blue, jbyte alpha) { glColor4b(red, green, blue, alpha); }
/** Main displaying function */ void display(void) { //Update Scene if not paused int i,j,k; int err_coord_cnt = 0; double calculationTime; double renderTime; void * m_font = GLUT_BITMAP_8_BY_13; if(!sPause){ if(!load_from_file){ try{ calculationTime = fluid_simulation->simulationStep(load_to); // Run one simulation step p_indexb = fluid_simulation->getParticleIndex_cpp(); p_cpp = fluid_simulation->getPosition_cpp(); d_cpp = fluid_simulation->getDensity_cpp(); ec_cpp = fluid_simulation->getElasticConnectionsData_cpp(); if(!load_from_file) md_cpp = fluid_simulation->getMembraneData_cpp(); }catch(std::runtime_error & ex){ cleanupSimulation(); std::cout << "ERROR: " << ex.what() << std::endl; exit (EXIT_FAILURE); // unfortunately we cannot leave glutmain loop by the other way } int pib; for(i=0;i<localConfig->getParticleCount();++i) { pib = p_indexb[2*i + 1]; p_indexb[2*pib + 0] = i; } if(fluid_simulation->getIteration() == localConfig->getNumberOfIteration()){ std::cout << "Simulation is reached time limit" << std::endl; cleanupSimulation(); exit (EXIT_SUCCESS); // unfortunately we cannot leave glutmain loop by the other way } }else{ try{ if(owHelper::loadConfigurationFromFile(p_cpp, ec_cpp, md_cpp, localConfig, iteration)){ iteration++; }else{ cleanupSimulation(); std::cout << "Simulation has reached end of file" << std::endl; exit(EXIT_SUCCESS); } }catch(std::exception &e){ cleanupSimulation(); std::cout << "ERROR: " << e.what() << std::endl; exit (EXIT_FAILURE); } } helper->refreshTime(); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawScene(); glPointSize(3.f); glBegin(GL_POINTS); float dc, rho; //Display all particles for(i = 0; i<localConfig->getParticleCount(); ++i) { if(!load_from_file){ rho = d_cpp[ p_indexb[ i * 2 + 0 ] ]; if( rho < 0 ) rho = 0; if( rho > 2 * rho0) rho = 2 * rho0; dc = 100.f * ( rho - rho0 ) / rho0 ; if(dc>1.f) dc = 1.f; // R G B glColor4f( 0, 0, 1, 1.0f);//blue if(!load_from_file){ if( (dc=100*(rho-rho0*1.00f)/rho0) >0 ) glColor4f( 0, dc, 1,1.0f);//cyan if( (dc=100*(rho-rho0*1.01f)/rho0) >0 ) glColor4f( 0, 1,1-dc,1.0f);//green if( (dc=100*(rho-rho0*1.02f)/rho0) >0 ) glColor4f( dc, 1, 0,1.0f);//yellow if( (dc=100*(rho-rho0*1.03f)/rho0) >0 ) glColor4f( 1,1-dc, 0,1.0f);//red if( (dc=100*(rho-rho0*1.04f)/rho0) >0 ) glColor4f( 1, 0, 0,1.0f); } } else glColor4f( 0, 0, 1, 1.0f);//blue if((int)p_cpp[i*4 + 3] != BOUNDARY_PARTICLE /*&& (int)p_cpp[i*4 + 3] != ELASTIC_PARTICLE*/) { glBegin(GL_POINTS); if((int)p_cpp[i*4+3]==2) { glColor4f( 0, 0, 0, 1.0f);// color of elastic particles glPointSize(6.f); } glVertex3f( (p_cpp[i*4]-localConfig->xmax/2)*sc , (p_cpp[i*4+1]-localConfig->ymax/2)*sc, (p_cpp[i*4+2]-localConfig->zmax/2)*sc ); glPointSize(3.f); glEnd(); if(!((p_cpp[i*4 ]>=0)&&(p_cpp[i*4 ]<=localConfig->xmax)&& (p_cpp[i*4+1]>=0)&&(p_cpp[i*4+1]<=localConfig->ymax)&& (p_cpp[i*4+2]>=0)&&(p_cpp[i*4+2]<=localConfig->zmax) )) { char label[50]; beginWinCoords(); glRasterPos2f (0.01F, 0.05F); if(err_coord_cnt<50){ sprintf(label,"%d: %f , %f , %f",i,p_cpp[i*4 ],p_cpp[i*4+1],p_cpp[i*4+2]); glPrint( 0.f, (float)(50+err_coord_cnt*11), label, m_font);} if(err_coord_cnt==50) { glPrint( 0, (float)(50+err_coord_cnt*11), "............", m_font);} err_coord_cnt++; endWinCoords(); } } } glLineWidth((GLfloat)0.1); //Display elastic connections for(int i_ec=0; i_ec < localConfig->numOfElasticP * MAX_NEIGHBOR_COUNT; ++i_ec) { //offset = 0 if((j=(int)ec_cpp[ 4 * i_ec + 0 ])>=0) { i = (i_ec / MAX_NEIGHBOR_COUNT);// + (generateInitialConfiguration!=1)*numOfBoundaryP; if(i<j) { glColor4b(150/2, 125/2, 0, 100/2/*alpha*/); if(ec_cpp[ 4 * i_ec + 2 ]>1.f)//muscles { glLineWidth((GLfloat)1.0); if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.45f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(127/2, 0, 255/2, 255/2);/* muscle_number+0.5 <--> violet*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-localConfig->xmax/2)*sc , (p_cpp[i*4+1]-localConfig->ymax/2)*sc, (p_cpp[i*4+2]-localConfig->zmax/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-localConfig->xmax/2)*sc , (p_cpp[j*4+1]-localConfig->ymax/2)*sc, (p_cpp[j*4+2]-localConfig->zmax/2)*sc ); glEnd(); } else if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.35f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(255/2, 0, 255/2, 255/2);/* muscle_number+0.4 <--> magenta*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-localConfig->xmax/2)*sc , (p_cpp[i*4+1]-localConfig->ymax/2)*sc, (p_cpp[i*4+2]-localConfig->zmax/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-localConfig->xmax/2)*sc , (p_cpp[j*4+1]-localConfig->ymax/2)*sc, (p_cpp[j*4+2]-localConfig->zmax/2)*sc ); glEnd(); } else if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.25f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(255/2, 127/2, 0, 255/2);/* muscle_number+0.3 <--> orange*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-localConfig->xmax/2)*sc , (p_cpp[i*4+1]-localConfig->ymax/2)*sc, (p_cpp[i*4+2]-localConfig->zmax/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-localConfig->xmax/2)*sc , (p_cpp[j*4+1]-localConfig->ymax/2)*sc, (p_cpp[j*4+2]-localConfig->zmax/2)*sc ); glEnd(); } else if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.15f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(255/2, 0, 0, 255/2);/* muscle_number+0.2 <--> red*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-localConfig->xmax/2)*sc , (p_cpp[i*4+1]-localConfig->ymax/2)*sc, (p_cpp[i*4+2]-localConfig->zmax/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-localConfig->xmax/2)*sc , (p_cpp[j*4+1]-localConfig->ymax/2)*sc, (p_cpp[j*4+2]-localConfig->zmax/2)*sc ); glEnd(); } else { glColor4b(255/2, 0, 0, 255/2);/* muscle_number+0.1 <--> red */ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-localConfig->xmax/2)*sc , (p_cpp[i*4+1]-localConfig->ymax/2)*sc, (p_cpp[i*4+2]-localConfig->zmax/2)*sc ); glVertex3f( (p_cpp[j*4+0]-localConfig->xmax/2)*sc , (p_cpp[j*4+1]-localConfig->ymax/2)*sc, (p_cpp[j*4+2]-localConfig->zmax/2)*sc ); glEnd(); } } else {//ordinary springs glLineWidth((GLfloat)0.1); glBegin(GL_LINES); glColor4b(150/2, 125/2, 0, 100/2); if(p_cpp[i*4+3]>2.15) glColor4b( 50/2, 125/2, 0, 100/2); glVertex3f( (p_cpp[i*4+0]-localConfig->xmax/2)*sc , (p_cpp[i*4+1]-localConfig->ymax/2)*sc, (p_cpp[i*4+2]-localConfig->zmax/2)*sc ); glColor4b(150/2, 125/2, 0, 100/2); if(p_cpp[j*4+3]>2.15) glColor4b( 50/2, 125/2, 0, 100/2); glVertex3f( (p_cpp[j*4+0]-localConfig->xmax/2)*sc , (p_cpp[j*4+1]-localConfig->ymax/2)*sc, (p_cpp[j*4+2]-localConfig->zmax/2)*sc ); glEnd(); } } } } // Draw membranes glColor4b(0, 200/2, 150/2, 255/2/*alpha*/); for(unsigned int i_m = 0; i_m < localConfig->numOfMembranes; ++i_m) { i = md_cpp [i_m*3+0]; j = md_cpp [i_m*3+1]; k = md_cpp [i_m*3+2]; glBegin(GL_LINES); glVertex3f( ((p_cpp[i*4]+p_cpp[j*4]+4*p_cpp[k*4])/6-localConfig->xmax/2)*sc , ((p_cpp[i*4+1]+p_cpp[j*4+1]+4*p_cpp[k*4+1])/6-localConfig->ymax/2)*sc, ((p_cpp[i*4+2]+p_cpp[j*4+2]+4*p_cpp[k*4+2])/6-localConfig->zmax/2)*sc ); glVertex3f( ((p_cpp[i*4]+p_cpp[k*4]+4*p_cpp[j*4])/6-localConfig->xmax/2)*sc , ((p_cpp[i*4+1]+p_cpp[k*4+1]+4*p_cpp[j*4+1])/6-localConfig->ymax/2)*sc, ((p_cpp[i*4+2]+p_cpp[k*4+2]+4*p_cpp[j*4+2])/6-localConfig->zmax/2)*sc ); glVertex3f( ((p_cpp[i*4]+p_cpp[k*4]+4*p_cpp[j*4])/6-localConfig->xmax/2)*sc , ((p_cpp[i*4+1]+p_cpp[k*4+1]+4*p_cpp[j*4+1])/6-localConfig->ymax/2)*sc, ((p_cpp[i*4+2]+p_cpp[k*4+2]+4*p_cpp[j*4+2])/6-localConfig->zmax/2)*sc ); glVertex3f( ((p_cpp[j*4]+p_cpp[k*4]+4*p_cpp[i*4])/6-localConfig->xmax/2)*sc , ((p_cpp[j*4+1]+p_cpp[k*4+1]+4*p_cpp[i*4+1])/6-localConfig->ymax/2)*sc, ((p_cpp[j*4+2]+p_cpp[k*4+2]+4*p_cpp[i*4+2])/6-localConfig->zmax/2)*sc ); glVertex3f( ((p_cpp[j*4]+p_cpp[k*4]+4*p_cpp[i*4])/6-localConfig->xmax/2)*sc , ((p_cpp[j*4+1]+p_cpp[k*4+1]+4*p_cpp[i*4+1])/6-localConfig->ymax/2)*sc, ((p_cpp[j*4+2]+p_cpp[k*4+2]+4*p_cpp[i*4+2])/6-localConfig->zmax/2)*sc ); glVertex3f( ((p_cpp[i*4]+p_cpp[j*4]+4*p_cpp[k*4])/6-localConfig->xmax/2)*sc , ((p_cpp[i*4+1]+p_cpp[j*4+1]+4*p_cpp[k*4+1])/6-localConfig->ymax/2)*sc, ((p_cpp[i*4+2]+p_cpp[j*4+2]+4*p_cpp[k*4+2])/6-localConfig->zmax/2)*sc ); glEnd(); } glLineWidth((GLfloat)1.0); glutSwapBuffers(); helper->watch_report("graphics: \t\t%9.3f ms\n====================================\n"); renderTime = helper->getElapsedTime(); totalTime += calculationTime + renderTime; calculateFPS(); }
void display(void) { helper->refreshTime(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawScene(); int i,j,k; //glColor3ub(255,255,255);//yellow if(!load_from_file) p_indexb = fluid_simulation->getParticleIndex_cpp(); int pib; int err_coord_cnt = 0; if(!load_from_file) for(i=0;i<PARTICLE_COUNT;i++) { pib = p_indexb[2*i + 1]; p_indexb[2*pib + 0] = i; } glPointSize(3.f); glBegin(GL_POINTS); if(!load_from_file){ p_cpp = fluid_simulation->getPosition_cpp(); d_cpp = fluid_simulation->getDensity_cpp(); } float dc, rho; for(i = 0; i<PARTICLE_COUNT; i++) { //printf("[%d]",i); if(!load_from_file){ rho = d_cpp[ p_indexb[ i * 2 + 0 ] ]; if( rho < 0 ) rho = 0; if( rho > 2 * rho0) rho = 2 * rho0; dc = 100.f * ( rho - rho0 ) / rho0 ; if(dc>1.f) dc = 1.f; // R G B glColor4f( 0, 0, 1, 1.0f);//blue if(!load_from_file){ if( (dc=100*(rho-rho0*1.00f)/rho0) >0 ) glColor4f( 0, dc, 1,1.0f);//cyan if( (dc=100*(rho-rho0*1.01f)/rho0) >0 ) glColor4f( 0, 1,1-dc,1.0f);//green if( (dc=100*(rho-rho0*1.02f)/rho0) >0 ) glColor4f( dc, 1, 0,1.0f);//yellow if( (dc=100*(rho-rho0*1.03f)/rho0) >0 ) glColor4f( 1,1-dc, 0,1.0f);//red if( (dc=100*(rho-rho0*1.04f)/rho0) >0 ) glColor4f( 1, 0, 0,1.0f); } } else glColor4f( 0, 0, 1, 1.0f);//blue if((int)p_cpp[i*4 + 3] != BOUNDARY_PARTICLE /*&& (int)p_cpp[i*4 + 3] != ELASTIC_PARTICLE*/) { glBegin(GL_POINTS); if((int)p_cpp[i*4+3]==2) { glColor4f( 0, 0, 0, 1.0f);// color of elastic particles glPointSize(6.f); } glVertex3f( (p_cpp[i*4]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glPointSize(3.f); glEnd(); if(!( (p_cpp[i*4 ]>=0)&&(p_cpp[i*4 ]<=XMAX)&& (p_cpp[i*4+1]>=0)&&(p_cpp[i*4+1]<=YMAX)&& (p_cpp[i*4+2]>=0)&&(p_cpp[i*4+2]<=ZMAX) )) { char label[50]; beginWinCoords(); glRasterPos2f (0.01F, 0.05F); if(err_coord_cnt<50){ sprintf(label,"%d: %f , %f , %f",i,p_cpp[i*4 ],p_cpp[i*4+1],p_cpp[i*4+2]); glPrint( 0, 50+err_coord_cnt*11, label, m_font);} if(err_coord_cnt==50) { glPrint( 0, 50+err_coord_cnt*11, "............", m_font);} err_coord_cnt++; endWinCoords(); } } } if(!load_from_file) ec_cpp = fluid_simulation->getElasticConnectionsData_cpp(); glLineWidth((GLfloat)0.1); int ecc=0;//elastic connections counter; //if(generateInitialConfiguration) for(int i_ec=0; i_ec < numOfElasticP * MAX_NEIGHBOR_COUNT; i_ec++) { //offset = 0 if((j=(int)ec_cpp[ 4 * i_ec + 0 ])>=0) { i = (i_ec / MAX_NEIGHBOR_COUNT);// + (generateInitialConfiguration!=1)*numOfBoundaryP; if(i<j) { glColor4b(150/2, 125/2, 0, 100/2/*alpha*/); if(ec_cpp[ 4 * i_ec + 2 ]>1.f)//muscles { glLineWidth((GLfloat)1.0); if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.45f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(127/2, 0, 255/2, 255/2);/* muscle_number+0.5 <--> violet*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glEnd(); } else if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.35f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(255/2, 0, 255/2, 255/2);/* muscle_number+0.4 <--> magenta*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glEnd(); } else if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.25f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(255/2, 127/2, 0, 255/2);/* muscle_number+0.3 <--> orange*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glEnd(); } else if(ec_cpp[4*i_ec+2]-floor(ec_cpp[4*i_ec+2])>0.15f) { if(muscle_activation_signal_cpp[ (int)(floor( ec_cpp[4*i_ec+2])-1) ]>0.1) glLineWidth((GLfloat)6.0); else glLineWidth((GLfloat)2.0); glColor4b(255/2, 0, 0, 255/2);/* muscle_number+0.2 <--> red*/ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glColor4b(255/2, 255/2, 255/2, 255/2); glVertex3f( (p_cpp[j*4+0]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glEnd(); } else { glColor4b(255/2, 0, 0, 255/2);/* muscle_number+0.1 <--> red */ glBegin(GL_LINES); glVertex3f( (p_cpp[i*4+0]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glVertex3f( (p_cpp[j*4+0]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glEnd(); } } else {//ordinary springs glLineWidth((GLfloat)0.1); glBegin(GL_LINES); glColor4b(150/2, 125/2, 0, 100/2); if(p_cpp[i*4+3]>2.15) glColor4b( 50/2, 125/2, 0, 100/2); glVertex3f( (p_cpp[i*4+0]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glColor4b(150/2, 125/2, 0, 100/2); if(p_cpp[j*4+3]>2.15) glColor4b( 50/2, 125/2, 0, 100/2); glVertex3f( (p_cpp[j*4+0]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glEnd(); } ecc++; } } } /*beginWinCoords(); char label[300]; glRasterPos2f (0.01F, 0.05F); glColor4b(255/2, 255/2, 0, 255/2); sprintf(label,"elastic connections count: %d, elementary membranes count: %d",ecc,numOfMembranes); glPrint( 1, 50, label, m_font); endWinCoords();*/ //draw membranes if(!load_from_file) md_cpp = fluid_simulation->getMembraneData_cpp(); glColor4b(0, 200/2, 150/2, 255/2/*alpha*/); /**/ for(int i_m = 0; i_m < numOfMembranes; i_m++) { i = md_cpp [i_m*3+0]; j = md_cpp [i_m*3+1]; k = md_cpp [i_m*3+2]; /* glBegin(GL_LINES); glVertex3f( (p_cpp[i*4]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glVertex3f( (p_cpp[j*4]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glVertex3f( (p_cpp[j*4]-XMAX/2)*sc , (p_cpp[j*4+1]-YMAX/2)*sc, (p_cpp[j*4+2]-ZMAX/2)*sc ); glVertex3f( (p_cpp[k*4]-XMAX/2)*sc , (p_cpp[k*4+1]-YMAX/2)*sc, (p_cpp[k*4+2]-ZMAX/2)*sc ); glVertex3f( (p_cpp[k*4]-XMAX/2)*sc , (p_cpp[k*4+1]-YMAX/2)*sc, (p_cpp[k*4+2]-ZMAX/2)*sc ); glVertex3f( (p_cpp[i*4]-XMAX/2)*sc , (p_cpp[i*4+1]-YMAX/2)*sc, (p_cpp[i*4+2]-ZMAX/2)*sc ); glEnd();*/ glBegin(GL_LINES); glVertex3f( ((p_cpp[i*4]+p_cpp[j*4]+4*p_cpp[k*4])/6-XMAX/2)*sc , ((p_cpp[i*4+1]+p_cpp[j*4+1]+4*p_cpp[k*4+1])/6-YMAX/2)*sc, ((p_cpp[i*4+2]+p_cpp[j*4+2]+4*p_cpp[k*4+2])/6-ZMAX/2)*sc ); glVertex3f( ((p_cpp[i*4]+p_cpp[k*4]+4*p_cpp[j*4])/6-XMAX/2)*sc , ((p_cpp[i*4+1]+p_cpp[k*4+1]+4*p_cpp[j*4+1])/6-YMAX/2)*sc, ((p_cpp[i*4+2]+p_cpp[k*4+2]+4*p_cpp[j*4+2])/6-ZMAX/2)*sc ); glVertex3f( ((p_cpp[i*4]+p_cpp[k*4]+4*p_cpp[j*4])/6-XMAX/2)*sc , ((p_cpp[i*4+1]+p_cpp[k*4+1]+4*p_cpp[j*4+1])/6-YMAX/2)*sc, ((p_cpp[i*4+2]+p_cpp[k*4+2]+4*p_cpp[j*4+2])/6-ZMAX/2)*sc ); glVertex3f( ((p_cpp[j*4]+p_cpp[k*4]+4*p_cpp[i*4])/6-XMAX/2)*sc , ((p_cpp[j*4+1]+p_cpp[k*4+1]+4*p_cpp[i*4+1])/6-YMAX/2)*sc, ((p_cpp[j*4+2]+p_cpp[k*4+2]+4*p_cpp[i*4+2])/6-ZMAX/2)*sc ); glVertex3f( ((p_cpp[j*4]+p_cpp[k*4]+4*p_cpp[i*4])/6-XMAX/2)*sc , ((p_cpp[j*4+1]+p_cpp[k*4+1]+4*p_cpp[i*4+1])/6-YMAX/2)*sc, ((p_cpp[j*4+2]+p_cpp[k*4+2]+4*p_cpp[i*4+2])/6-ZMAX/2)*sc ); glVertex3f( ((p_cpp[i*4]+p_cpp[j*4]+4*p_cpp[k*4])/6-XMAX/2)*sc , ((p_cpp[i*4+1]+p_cpp[j*4+1]+4*p_cpp[k*4+1])/6-YMAX/2)*sc, ((p_cpp[i*4+2]+p_cpp[j*4+2]+4*p_cpp[k*4+2])/6-ZMAX/2)*sc ); glEnd(); }/**/ //glEnd();//??? glLineWidth((GLfloat)1.0); glutSwapBuffers(); helper->watch_report("graphics: \t\t%9.3f ms\n====================================\n"); renderTime = helper->get_elapsedTime(); totalTime += calculationTime + renderTime; calculateFPS(); }