Esempio n. 1
0
void Model::bbox()
{
    matrix=makeMatrix();
    if(mesh!=NULL)
    {
        Vector4f p;
        Matrix4f m=matrix;
        m.transpose();
        min_x=1000000;
        max_x=-1000000;
        min_y=1000000;
        max_y=-1000000;
        min_z=1000000;
        max_z=-1000000;

        for(GLuint i=0;i < mesh->indexCount();i++)
        {
            p.set((mesh->vertexData())[(mesh->indexData())[i]*3]
                    ,mesh->vertexData()[mesh->indexData()[i]*3+1]
                    ,mesh->vertexData()[mesh->indexData()[i]*3+2],1.0);
            p=m*p;
            if(p[0]<min_x)  min_x=p[0];
            if(p[0]>max_x)  max_x=p[0];

            if(p[1]<min_y)  min_y=p[1];
            if(p[1]>max_y)  max_y=p[1];

            if(p[2]<min_z)  min_z=p[2];
            if(p[2]>max_z)  max_z=p[2];
        }
/*
        if(min_x<0)
        {
            m_position[0]-=min_x;
            min_x=0;
        }
        if(min_y<0)
        {
            m_position[1]-=min_y;
            min_y=0;
        }
        if(min_z<0)
        {
            m_position[2]-=min_z;
            min_z=0;
        }
*/
        box.setExtreme(min_x,min_y,min_z,max_x,max_y,max_z);
    }
}
Esempio n. 2
0
 void
 determineDetail (int atomScale, const AtomicName& name, Vector4f& detail)
 {
   detail.set(MoleculeLoader::getAtomicDetailFromName(name), atomScale * Constants::DEFAULT_RADIUS);
 }