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

📄 bspline.cpp

📁 <B>DirectX9.0 3D游戏编程</B>
💻 CPP
字号:
/********************************************************************
 *         Advanced 3D Game Programming using DirectX 9.0			*
 ********************************************************************
 * copyright (c) 2003 by Peter A Walsh and Adrian Perez				*
 * See license.txt for modification and distribution information	*
 ********************************************************************/

#include "stdafx.h"
#include "BSpline.h"

/**
 * The b-spline basis matrix
 */
matrix4	cBSpline::m_baseMatrix = matrix4(
	-1,  3, -3,  1,
 	 3, -6,  3,  0,
	-3,  0,  3,  0,
	 1,  4,  1,  0);

point3 cBSpline::Calc( float t, int i0 )
{
	assert(i0+3 < m_ctrlPoints.size() );
	assert(t>=0.f && t<=1.f );
	point4 tVec( t*t*t, t*t, t, 1 );

	point4 xVec( m_ctrlPoints[i0].x, m_ctrlPoints[i0+1].x, m_ctrlPoints[i0+2].x, m_ctrlPoints[i0+3].x );
	point4 yVec( m_ctrlPoints[i0].y, m_ctrlPoints[i0+1].y, m_ctrlPoints[i0+2].y, m_ctrlPoints[i0+3].y );
	point4 zVec( m_ctrlPoints[i0].z, m_ctrlPoints[i0+1].z, m_ctrlPoints[i0+2].z, m_ctrlPoints[i0+3].z );

	return point3(
		tVec *  (1.f/6) * m_baseMatrix * xVec,
		tVec *  (1.f/6) * m_baseMatrix * yVec,
		tVec *  (1.f/6) * m_baseMatrix * zVec );
}

point3 cBSpline::CalcAbs( float t )
{
	// the T we get isn't right, fix it.
	t *= m_ctrlPoints.size() - 3;
	int vert = (int)(floor(t));
	t -= (float)floor(t);
	return Calc( t, vert );
}

⌨️ 快捷键说明

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