//=========================================================================== 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); }
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 ); } }
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; }
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; }
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)); }