Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose: A little helper class that computes a spline patch
//
// $Workfile: $
// $Date: $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//
#ifndef SPLINEPATCH_H
#define SPLINEPATCH_H
#pragma once
#include "mathlib/vector4d.h"
//-----------------------------------------------------------------------------
// Spline patch:
//-----------------------------------------------------------------------------
class CSplinePatch { public: // The last argument represents the number of float channels in addition to position
CSplinePatch( ); ~CSplinePatch();
// Call this to initialize the patch
void Init( int w, int h, int extraChannels );
// 0 = linear, 1 = spliney!
void SetLinearBlend( float factor );
// Hooks the patch up to externally controlled data...
void SetControlPositions( Vector const** pPositions ); void SetChannelData( int channel, float* pChannel );
// This interface isn't wonderful; it's limited by optimization issues...
// Call this before querying the patch for data at (i,j)
void SetupPatchQuery( float i, float j );
// Gets the point and normal at (i,j) specified above
void GetPointAndNormal( Vector& position, Vector& normal ) const;
// Gets at other channels
float GetChannel( int channel ) const;
// Gets at the dimensions
int Width() const { return m_Width; } int Height() const { return m_Height; }
public: // The integer + float values for the patch query
int m_is, m_it; float m_fs, m_ft;
private: enum { MAX_CHANNELS = 4 };
// no copy constructor
CSplinePatch( const CSplinePatch& );
// Computes indices of the samples to read for this interpolation
void ComputeIndices( );
// input data
int m_Width; int m_Height; int m_ChannelCount; Vector const** m_ppPositions; float const* m_pChannel[MAX_CHANNELS];
// temporary data used for a single patch query
int m_SampleIndices[4][4]; Vector4D m_SVec; Vector4D m_TVec;
float m_LinearFactor; };
#endif // SPLINEPATCH_H
|