Esempio n. 1
0
void ewol::compositing::Drawing::setPoint(const vec3& _point) {
	m_triangle[m_triElement] = _point;
	m_triElement++;
	if (m_triElement >= 3) {
		generateTriangle();
	}
}
	void prepare()
	{
		VulkanExampleBase::prepare();
		generateTriangle();
		setupVertexDescriptions();
		prepareUniformBuffers();
		setupDescriptorSetLayout();
		preparePipelines();
		setupDescriptorPool();
		setupDescriptorSet();
		buildCommandBuffers();
		prepared = true;
	}
Esempio n. 3
0
void VanDerWaals::generateTriangle(Data::Mesh& mesh, Data::OMMesh::VertexHandle const& Av,
   Data::OMMesh::VertexHandle const& Bv, Data::OMMesh::VertexHandle const& Cv, int div)
{
   if (div <= 0) {
      mesh.addFace(Cv, Bv, Av);

   }else {

      Data::OMMesh::Point Ap(mesh.vertex(Av));
      Data::OMMesh::Point Bp(mesh.vertex(Bv));
      Data::OMMesh::Point Cp(mesh.vertex(Cv));

      // create 3 new vertices at the edge midpoints
      Data::OMMesh::Point ABp((Ap+Bp)*0.5);
      Data::OMMesh::Point BCp((Bp+Cp)*0.5);
      Data::OMMesh::Point CAp((Cp+Ap)*0.5);

      // Normalize the midpoints to keep them on the sphere
      ABp.normalize();
      BCp.normalize();
      CAp.normalize();

      Data::OMMesh::VertexHandle ABv(mesh.addVertex(ABp));
      Data::OMMesh::VertexHandle BCv(mesh.addVertex(BCp));
      Data::OMMesh::VertexHandle CAv(mesh.addVertex(CAp));

      mesh.setNormal(ABv, ABp);
      mesh.setNormal(BCv, BCp);
      mesh.setNormal(CAv, CAp);

      generateTriangle(mesh, Av,  ABv, CAv, div-1);
      generateTriangle(mesh, Bv,  BCv, ABv, div-1);
      generateTriangle(mesh, Cv,  CAv, BCv, div-1);
      generateTriangle(mesh, ABv, BCv, CAv, div-1);  //<-- Remove for serpinski
   }  
}
Esempio n. 4
0
Data::Mesh VanDerWaals::generateMesh(int ndiv, QList<VanDerWaals*> const& atoms) 
{
   Data::OMMesh::VertexHandle vertices[12];
   Data::Mesh mesh;

   for (unsigned i = 0; i < 12; ++i) {
       vertices[i] = mesh.addVertex(s_vertices[i][0], s_vertices[i][1], s_vertices[i][2]);
       mesh.setNormal(vertices[i], mesh.vertex(vertices[i]));
   }

   for (unsigned i = 0; i < 20; ++i) {
       generateTriangle(mesh, vertices[s_indices[i][0]], vertices[s_indices[i][1]], 
          vertices[s_indices[i][2]], ndiv);
   }
 
   // Now dilate and translate the unit sphere
   Data::OMMesh::Point vertex;
   Data::OMMesh::Point center(m_center[0], m_center[1], m_center[2]);
   Data::OMMesh::VertexIter iter;
   for (iter = mesh.vbegin(); iter != mesh.vend(); ++iter) {
       vertex = mesh.vertex(iter);
       vertex = vertex*m_radius + center;
       mesh.setPoint(iter.handle(), vertex);
   }

   QList<VanDerWaals*>::const_iterator atom;
   qglviewer::Vec A(m_center), B, BA, p;
   double r1(m_radius), r2, R, d;

   for (atom = atoms.begin(); atom != atoms.end(); ++atom) {
       if (*atom != this) {
          r2 = (*atom)->m_radius;
          B  = (*atom)->m_center;
          BA = B-A;
          R  = BA.norm();
          if (R < r1+r2) {
             d = (R*R + r1*r1 - r2*r2) / (2.0*R);
             d += 0.001;  // add a bit extra to make sure there are no holes in the surface
             p = A + BA*d/R;
             mesh.clip(-BA, p);
          }
       }
   }

   return mesh;
}