47 lines
1.5 KiB
C++
47 lines
1.5 KiB
C++
/*============================================================================
|
|
*
|
|
* Copyright (C) 1999-2000 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: bspline.hpp
|
|
* Content: Declarations for B-Splines
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef _BSPLINE_HPP
|
|
#define _BSPLINE_HPP
|
|
|
|
class RDBSpline
|
|
{
|
|
public:
|
|
RDBSpline(DWORD dwWidth, DWORD dwHeight, DWORD dwOrderU, DWORD dwOrderV)
|
|
{
|
|
m_dwWidth = dwWidth;
|
|
m_dwHeight = dwHeight;
|
|
m_dwOrderU = dwOrderU;
|
|
m_dwOrderV = dwOrderV;
|
|
}
|
|
|
|
void Sample(DWORD dwDataType, double u, double v, const BYTE *B, DWORD dwStride, DWORD dwPitch, BYTE *Q) const;
|
|
void SampleNormal(DWORD dwDataType, double u, double v, const BYTE *pRow, DWORD dwStride, DWORD dwPitch, BYTE *Q) const;
|
|
void SampleDegenerateNormal(DWORD dwDataType, const BYTE *pRow, DWORD dwStride, DWORD dwPitch, BYTE *Q) const;
|
|
|
|
double TexCoordU(double u) const
|
|
{
|
|
return (u - double(m_dwOrderU - 1)) / double(m_dwWidth - (m_dwOrderU - 1));
|
|
}
|
|
double TexCoordV(double v) const
|
|
{
|
|
return (v - double(m_dwOrderV - 1)) / double(m_dwHeight - (m_dwOrderV - 1));
|
|
}
|
|
|
|
protected:
|
|
virtual double Basis(unsigned i, unsigned k, double s) const;
|
|
virtual double BasisPrime(unsigned i, unsigned k, double s) const;
|
|
|
|
private:
|
|
DWORD m_dwWidth, m_dwHeight, m_dwOrderU, m_dwOrderV;
|
|
|
|
double Knot(unsigned i) const { return double(i); }
|
|
};
|
|
|
|
#endif // _BSPLINE_HPP
|