⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 box.h

📁 一个纹理地形渲染器
💻 H
字号:
// Box primitive

#pragma once

#include "Vector.h"
#include "Matrix.h"
#include "Plane.h"


namespace Mathematics
{
    /// An axis aligned box.

    class Box
    {
    public:

        /// default constructor.
        /// does nothing for speed.

        Box() {};

        /// construct an axis aligned box.

	    Box(const Vector &minimum, const Vector &maximum)
	    {
		    this->minimum = minimum;
		    this->maximum = maximum;
		    center = (maximum + minimum) * 0.5f;
		    delta = maximum - minimum;
		    extents = delta / 2;
	    }

        /// test if box is inside plane.
        /// inside is defined as being on the positive side of the plane,
        /// ie. the side on which the normal points out of.

	    bool inside(const Plane &plane) const
	    {
		    float radius = Float::abs(extents.x*plane.normal.x) +
			               Float::abs(extents.y*plane.normal.y) +
					       Float::abs(extents.z*plane.normal.z);

		    float distance = plane.distance(center);
    		
		    return distance > -radius;
	    }
          
        /// calculate volume of box.

	    float volume() const
	    {
		    return delta.x * delta.y * delta.z;
	    }

        /// calculate inertia tensor.

	    Matrix tensor(float mass) const
	    {
		    Matrix matrix;
            matrix.identity();
            return matrix;
	    }

		/// generate corner vertices of box

		void vertices(Vector vertex[]) const
		{
			vertex[0] = Vector(minimum.x, minimum.y, minimum.z);
			vertex[1] = Vector(minimum.x, maximum.y, minimum.z);
			vertex[2] = Vector(maximum.x, maximum.y, minimum.z);
			vertex[3] = Vector(maximum.x, minimum.y, minimum.z);
			vertex[4] = Vector(minimum.x, minimum.y, maximum.z);
			vertex[5] = Vector(minimum.x, maximum.y, maximum.z);
			vertex[6] = Vector(maximum.x, maximum.y, maximum.z);
			vertex[7] = Vector(maximum.x, minimum.y, maximum.z);
		}

		Vector maximum;         ///< maximum point of box
	    Vector minimum;         ///< minimum point of box
	    Vector center;          ///< center point of box
	    Vector delta;           ///< delta vector (width, height, depth)
	    Vector extents;         ///< extents vector (w/2, h/2, d/2)
    };
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -