void Winding::getBounds(BoundingBox& bounds) const { bounds.reset(); unsigned x; for (x=0; x<m_NumPoints; x++) { bounds.add(m_Points[x]); } }
void Winding::getBounds(vec3_t& mins, vec3_t& maxs) const { BoundingBox bounds; unsigned x; for (x=0; x<m_NumPoints; x++) { bounds.add(m_Points[x]); } VectorCopy(bounds.m_Mins, mins); VectorCopy(bounds.m_Maxs, maxs); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- BoundingBox Scene::boundingBox() const { BoundingBox bb; size_t numModels = m_models.size(); size_t i; for (i = 0; i < numModels; i++) { const Model* model = m_models.at(i); CVF_ASSERT(model); bb.add(model->boundingBox()); } return bb; }
//-------------------------------------------------------------------------------------------------- /// Transform the min and max coordinate with the given transformation matrix //-------------------------------------------------------------------------------------------------- void BoundingBox::transform(const Mat4d& matrix) { // Check if box is invalid, and don't transform if so if (!isValid()) return; BoundingBox newBox; newBox.reset(); Vec3d node; node.set(m_min.x(), m_min.y(), m_min.z()); node.transformPoint(matrix); newBox.add(node); node.set(m_max.x(), m_min.y(), m_min.z()); node.transformPoint(matrix); newBox.add(node); node.set(m_max.x(), m_max.y(), m_min.z()); node.transformPoint(matrix); newBox.add(node); node.set(m_min.x(), m_max.y(), m_min.z()); node.transformPoint(matrix); newBox.add(node); node.set(m_min.x(), m_min.y(), m_max.z()); node.transformPoint(matrix); newBox.add(node); node.set(m_max.x(), m_min.y(), m_max.z()); node.transformPoint(matrix); newBox.add(node); node.set(m_max.x(), m_max.y(), m_max.z()); node.transformPoint(matrix); newBox.add(node); node.set(m_min.x(), m_max.y(), m_max.z()); node.transformPoint(matrix); newBox.add(node); *this = newBox; }
Sphere::Sphere( bool fullSphere, byte numSubDiv, float dim ) { setPrimitiveType( PrimitiveType::Triangles ); VertexData position; buildGeometry( fullSphere, numSubDiv, position, dim ); // Build Texture Coordinates. BoundingBox box; for( size_t i = 0; i < position.size(); i++ ) { const Vector3& v = position[i]; box.add(v); } Vector3 center = box.getCenter(); std::vector<Vector3> texCoords; for( size_t i = 0; i < position.size(); i++ ) { const Vector3& vert = position[i]; Vector3 d = vert-center; d.normalize(); // Conveert to spherical coordinates. //float t = d.z / sqrt(d.x*d.x+d.y*d.y+d.z*d.z); //float delta = acos(t); //float phi = atan2(d.y, d.x); //float u = delta / Math::PI; //float v = phi / 2*Math::PI; float u = std::asin(d.x) / PI + 0.5f; float v = std::asin(d.y) / PI + 0.5f; texCoords.push_back( Vector2(u, v) ); } gb->set( VertexAttribute::Position, position ); gb->set( VertexAttribute::TexCoord0, texCoords ); }