Пример #1
0
//===========================================================================
cBackground::cBackground()
{
    // create vertices at each corner
    m_vertexTL = newVertex(0.0, 1.0, 0.0);
    m_vertexTR = newVertex(1.0, 1.0, 0.0);
    m_vertexBL = newVertex(0.0, 0.0, 0.0);
    m_vertexBR = newVertex(1.0, 0.0, 0.0);

    cVertex* vertexTL = getVertex(m_vertexTL);
    cVertex* vertexTR = getVertex(m_vertexTR);
    cVertex* vertexBL = getVertex(m_vertexBL);
    cVertex* vertexBR = getVertex(m_vertexBR);

    // create triangles by connecting above vertices
    newTriangle(m_vertexTL, m_vertexBL, m_vertexBR);
    newTriangle(m_vertexTL, m_vertexBR, m_vertexTR);

    // adjust normal at each vertex
    cVector3d normal(0.0, 0.0, 1.0);
    vertexTL->m_normal = normal;
    vertexTR->m_normal = normal;
    vertexBL->m_normal = normal;
    vertexBR->m_normal = normal;

    // disable material properties, enable colors
    setUseMaterial(true);
    setUseVertexColors(true);
    setUseTransparency(false);
    setMaintainAspectRatio(true);

    // set default color
    cColorf color(1.0, 1.0, 1.0);
    setUniformColor(color);
}
Пример #2
0
static void newTriangle( int level, const osg::Vec3& v0, const osg::Vec3& v1, const osg::Vec3& v2 )
{
    if( level > 0 )
    {
        level--;

        osg::Vec3 va = v0 + v1; va.normalize();
        osg::Vec3 vb = v1 + v2; vb.normalize();
        osg::Vec3 vc = v0 + v2; vc.normalize();

        newTriangle( level, v0, va, vc );
        newTriangle( level, v1, vb, va );
        newTriangle( level, v2, vc, vb );
        newTriangle( level, va, vb, vc );
    }
    else
    {
        addTriangle( v0, v1, v2 );
    }
}
Пример #3
0
osg::Node* makeJack()
{
    // ignore/override the level setting
    int level = 3;

    osg::Geometry* geom = new osg::Geometry;

    _vAry = new osg::Vec3Array;
    geom->setVertexArray( _vAry );

    _nAry = new osg::Vec3Array;
    geom->setNormalArray( _nAry );
    geom->setNormalBinding( osg::Geometry::BIND_PER_VERTEX );

    _cAry = new osg::Vec4Array;
    geom->setColorArray( _cAry );
    //geom->setNormalBinding( osg::Geometry::BIND_PER_VERTEX );
    geom->setColorBinding( osg::Geometry::BIND_OVERALL );
    _cAry->push_back( osg::Vec4(1,1,1,1) );

    osg::Vec3 px = osg::Vec3( 1, 0, 0);
    osg::Vec3 nx = osg::Vec3(-1, 0, 0);
    osg::Vec3 py = osg::Vec3( 0, 1, 0);
    osg::Vec3 ny = osg::Vec3( 0,-1, 0);
    osg::Vec3 pz = osg::Vec3( 0, 0, 1);
    osg::Vec3 nz = osg::Vec3( 0, 0,-1);

    newTriangle( level, px, py, pz );   // +++

    geom->addPrimitiveSet( new osg::DrawArrays( GL_TRIANGLES, 0, _vAry->size() ) );

    osg::StateSet* ss = geom->getOrCreateStateSet();

    //geom->dirtyDisplayList();
    //ss->setMode( GL_LIGHTING, osg::StateAttribute::OFF );

    osg::Geode* geode = new osg::Geode();
    geode->addDrawable( geom );
    return geode;
}
Пример #4
0
int main(int argc, char *argv[])
{
	std::cout << "/////////////////////   POINT   //////////////////////////////////" << std::endl;
    Point newPoint(0,1,2);
    std::cout << "x : " << newPoint.x() << std::endl;
    std::cout << "y : " << newPoint.y() << std::endl;
    std::cout << "z : " << newPoint.z() << std::endl;
    newPoint.setY(5);
    Point pointB;
    std::cout << "y : " << pointB.y() << std::endl;

    if (! newPoint.isNotEqual(pointB))
    	std::cout << "equal" << std::endl;
    else
    	std::cout << "nonEqual" << std::endl;

	std::cout << "/////////////////////   VECTOR   //////////////////////////////////" << std::endl;

	Vector newVector, vect;
    newVector.setCoordonne(-8.0, 5.0, 6.0);
    Vector vec2(newPoint, pointB);
    Vector vec3(newVector, vec2);
    std::cout << "x2 : " << vec2.x() << std::endl;
    std::cout << "y2 : " << vec2.y() << std::endl;
    std::cout << "z2 : " << vec2.z() << std::endl;

    if (vect.vecteurNull())
    	std::cout << "vec Null" << std::endl;
    else
    	std::cout << "vec Non NUll" << std::endl;

    if (newVector.vecteurNull())
    	std::cout << "newVector Null" << std::endl;
    else
    	std::cout << "newVector Non NUll" << std::endl;

    std::cout << "dot => " << newVector.dot(vec2) << std::endl; 

    std::cout << "x3 : " << vec3.x() << std::endl;
    std::cout << "y3 : " << vec3.y() << std::endl;
    std::cout << "z3 : " << vec3.z() << std::endl;

	std::cout << "/////////////////////   RAY   //////////////////////////////////" << std::endl;

	Ray newRay(pointB,newPoint);
	std::cout << "origine : " << newRay.P0().x() << ", " << newRay.P0().y() << ", " << newRay.P0().z()<< std::endl;
	std::cout << "direction : " << newRay.P1().x() << ", " << newRay.P1().y() << ", " << newRay.P1().z() << std::endl;

	std::cout << "/////////////////////   Triangle   //////////////////////////////////" << std::endl;

	Point pointC(6,8,5);
    Point V2(0,-1,-10);
    Point V0(5,-50,59);
    Point V1(9,0,-25);
	Triangle newTriangle(V0,V1,V2);
	std::cout << "coordonnee : " << newTriangle.V0().x() << ", " << newTriangle.V1().y() << ", "<< newTriangle.V2().z() << std::endl; 

	std::cout << "/////////////////////   Point/Triangle   //////////////////////////////////" << std::endl;
	Point I;
	std::cout << newRay.P0().x() + 6 * newVector.x() << std::endl;
	std::cout << newRay.P0().y() + 6 * newVector.y() << std::endl;
	std::cout << newRay.P0().z() + 6 * newVector.z() << std::endl;
	I.setCoordonne(newRay.P0().x() + 6 * newVector.x(), newRay.P0().y() + 6 * newVector.y(), newRay.P0().z() + 6 * newVector.z());	
	std::cout << "coucou" << std::endl;

	std::cout << "/////////////////////  test intersect   //////////////////////////////////" << std::endl;

	int test;
	test = intersect3D_RayTriangle(newRay, newTriangle, I);
	std::cout << "I : " << I.x() << ", " << I.y() <<", "<< I.z() << "\n test : " << test << std::endl; 


	std::cout << "/////////////////////   VECTOR/Triangle  //////////////////////////////////" << std::endl;

	Vector newVector2(newTriangle.V0(), newTriangle.V1());

    std::cout << "x : " << newVector2.x() << std::endl;
    std::cout << "y : " << newVector2.y() << std::endl;
    std::cout << "z : " << newVector2.z() << std::endl;

    return 0;
}
Пример #5
0
void build_data_structure(){
  int     i,j,v1Index,v2Index,v3Index;
  double  a[3],b[3],c[3];
  double  midAB[3], midBC[3],midCA[3];
  GLfloat newVerticesLoc[1000000]; 
  GLMtriangle * newTriangles;       /* array of triangles */
  double res[3];

  
  memset(newVerticesLoc, 0, sizeof(GLfloat)*1000000);
  int temp,k;
  newTriangles = (GLMtriangle*)malloc(sizeof(GLMtriangle) * 4 * model->numtriangles);

  oldVertices = (GLfloat*)malloc(sizeof(newVertices));
  memcpy(oldVertices,&newVertices,sizeof(newVertices));

  oldTriangles = (GLMtriangle*)malloc(sizeof(GLMtriangle) *  (model->numtriangles));
  memcpy(oldTriangles,&model->triangles,sizeof(model->triangles));
  
  if(!start){
    for (i = 0; i <model->numtriangles; i++) {
      v1Index = (float)T(i).vindices[0];
      v2Index = (float)T(i).vindices[1];
      v3Index = (float)T(i).vindices[2];
    
      triangleCoord((int)v1Index,(int)v2Index,(int)v3Index,a,b,c,0);  
      newTriangle(a,b,c,i,oldTriangles,oldVertices);
    }
  } else {
    for (i = 0; i <model->numtriangles; i++) {
      oldTriangles[i].vindices[0] = model->triangles[i].vindices[0];
      oldTriangles[i].vindices[1] = model->triangles[i].vindices[1];
      oldTriangles[i].vindices[2] = model->triangles[i].vindices[2];

    }    
  }

  for (i = 0; i <model->numtriangles; i++) {
    v1Index = (float)T(i).vindices[0];
    v2Index = (float)T(i).vindices[1];
    v3Index = (float)T(i).vindices[2];
    
    triangleCoord((int)v1Index,(int)v2Index,(int)v3Index,a,b,c,0);
    findMidPoints(a,b,midAB);
    findMidPoints(b,c,midBC);
    findMidPoints(c,a,midCA);

   

    newTriangle(a,midAB,midCA,4*i+0,newTriangles,newVerticesLoc);
    calculate_even( a,4*i,newTriangles,newVerticesLoc,0);
    calculate_odd(a,b,4*i,newTriangles,newVerticesLoc,1);
    calculate_odd(c,a,4*i,newTriangles,newVerticesLoc,2);

    
    
    newTriangle(midAB,b,midBC,4*i+1,newTriangles,newVerticesLoc);
    calculate_even( b,4*i+1,newTriangles,newVerticesLoc,1);
    calculate_odd(a,b,4*i+1,newTriangles,newVerticesLoc,0);
    calculate_odd(b,c,4*i+1,newTriangles,newVerticesLoc,2);
    
    newTriangle(midCA,midBC,c,4*i+2,newTriangles,newVerticesLoc);
    calculate_even( c,4*i+2,newTriangles,newVerticesLoc,2);
    calculate_odd(c,a,4*i+2,newTriangles,newVerticesLoc,0);
    calculate_odd(b,c,4*i+2,newTriangles,newVerticesLoc,1);



    newTriangle(midAB,midBC,midCA,4*i+3,newTriangles,newVerticesLoc);
    calculate_odd(a,b,4*i+3,newTriangles,newVerticesLoc,0);
    calculate_odd(b,c,4*i+3,newTriangles,newVerticesLoc,1);
    calculate_odd(c,a,4*i+3,newTriangles,newVerticesLoc,2);


  }

  model->numtriangles = 4*model->numtriangles;
  // the_division_process(newVerticesLoc);


  memcpy(&newVertices,&newVerticesLoc,sizeof(newVerticesLoc));
  memcpy(&model->triangles,&newTriangles,sizeof(newTriangles));
}