亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bspline.h

?? this keik game source
?? H
字號:
//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/bspline.h                        $
// $Revision:: 19                                                             $
//   $Author:: Jimdose                                                        $
//     $Date:: 10/25/98 11:52p                                                $
//
// Copyright (C) 1998 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/bspline.h                             $
// 
// 19    10/25/98 11:52p Jimdose
// added EXPORT_TEMPLATE
// 
// 18    10/19/98 9:52p Jimdose
// fixed savegame bugs with bspline
// 
// 17    10/11/98 2:03p Markd
// Inverted pitch on orientation
// 
// 16    10/10/98 9:12p Markd
// Fixed angle errors with bsplines
// 
// 15    9/24/98 1:19a Markd
// bullet proofed some equating bspline code
// 
// 14    9/23/98 11:00p Markd
// put in some garbage collection on stuff that wasn't freed up
// 
// 13    9/21/98 10:15p Markd
// Putting archiving and unarchiving functions in
// 
// 12    8/15/98 2:40p Markd
// fixed bspline stuff
// 
// 11    7/11/98 6:31p Markd
// removed valid orientation, simplified code
// 
// 10    7/10/98 2:10p Markd
// Endpoint now returns number of controlpoints.
// 
// 9     7/10/98 1:12p Markd
// Added additonal setup function which takes speed as well as position
// 
// 8     7/09/98 11:54p Markd
// Put in default speed of 1
// 
// 7     7/08/98 12:42p Markd
// Added quaternion support
// 
// 6     7/02/98 9:48p Markd
// added orientation
// 
// 5     5/26/98 7:56p Jimdose
// added scripted cameras
// 
// 4     5/07/98 10:41p Jimdose
// Added spline type for selecting between looping and non-looping curves
// 
// 3     5/05/98 2:37p Jimdose
// Added code to allow spline loop and clamping the spline start and end
// 
// 2     5/03/98 4:42p Jimdose
// Added file to Sin
//
// DESCRIPTION:
// Uniform non-rational bspline class.
// 

#ifndef __BSPLINE_H__
#define __BSPLINE_H__

#include "g_local.h"
#include "Vector.h"

typedef enum
	{
	SPLINE_NORMAL,
	SPLINE_LOOP,
	SPLINE_CLAMP
	} splinetype_t;

class EXPORT_FROM_DLL BSplineControlPoint
	{
   private:
      float          roll;
      Vector         position;
      Vector         orientation;
      float          speed;

	public:
							BSplineControlPoint();
							BSplineControlPoint( Vector pos, Vector orient, float speed );
							BSplineControlPoint( Vector pos );
		void				Clear( void );
		void				Set( Vector pos );
		void				Set( Vector pos, float speed );
		void				Set( Vector pos, Vector orient, float speed );
		void				Get( Vector& pos, Vector& orient, float& speed );
		void				Get( Vector& pos );
      Vector         *GetPosition( void );
      Vector         *GetOrientation( void );
      float          *GetRoll( void );
      float          *GetSpeed( void );
		void		      operator=( BSplineControlPoint &point );
      virtual void   Archive( Archiver &arc );
      virtual void   Unarchive( Archiver &arc );
	};

inline EXPORT_FROM_DLL void BSplineControlPoint::Archive
	(
	Archiver &arc
	)

   {
   arc.WriteVector( position );
   arc.WriteVector( orientation );
   arc.WriteFloat( speed );
   arc.WriteFloat( roll );
   }

inline EXPORT_FROM_DLL void BSplineControlPoint::Unarchive
	(
	Archiver &arc
	)

   {
   arc.ReadVector( &position );
   arc.ReadVector( &orientation );
   arc.ReadFloat( &speed );
   arc.ReadFloat( &roll );
   }

inline void BSplineControlPoint::operator=
	(
	BSplineControlPoint &point
	)

	{
   position = point.position;
   orientation = point.orientation;
   speed = point.speed;
   roll = point.roll;
	}

inline BSplineControlPoint::BSplineControlPoint()
	{
   roll = 0;
   speed = 1;
	}

inline BSplineControlPoint::BSplineControlPoint
   ( 
   Vector pos 
   )

	{
   speed = 1;
   position = pos;
	}

inline BSplineControlPoint::BSplineControlPoint
   ( 
   Vector pos, 
   Vector orient,
   float speed
   )

	{
   position = pos;
   orient[ PITCH ] = -orient[ PITCH ];
	orient.AngleVectors( &orientation, NULL, NULL );
   roll = orient[ ROLL ];
   if ( roll > 180 )
      {
      roll -= 360;
      }
   if ( roll < -180 )
      {
      roll += 360;
      }
   this->speed = speed;
	}

inline void BSplineControlPoint::Clear
   ( 
   void 
   )

	{
   roll = 0;
   position = "0 0 0";
   vec_zero.AngleVectors( &orientation, NULL, NULL );
   speed = 1.0f;
	}

inline void BSplineControlPoint::Set
   ( 
   Vector pos 
   )

	{
   speed = 1;
   position = pos;
	}

inline void BSplineControlPoint::Set
   ( 
   Vector pos,
   float pointspeed
   )

	{
   speed = pointspeed;
   position = pos;
	}

inline void BSplineControlPoint::Set
   ( 
   Vector pos, 
   Vector orient,
   float speed
   )

	{
   position = pos;
   orient[ PITCH ] = -orient[ PITCH ];
	orient.AngleVectors( &orientation, NULL, NULL );
   roll = orient[ ROLL ];
   if ( roll > 180 )
      {
      roll -= 360;
      }
   if ( roll < -180 )
      {
      roll += 360;
      }
   this->speed = speed;
	}

inline void BSplineControlPoint::Get
   ( 
   Vector& pos 
   )
	{
   pos = position;
	}

inline Vector *BSplineControlPoint::GetPosition
   ( 
   void
   )

	{
   return &position;
	}

inline void BSplineControlPoint::Get
   ( 
   Vector& pos, 
   Vector& orient,
   float& speed
   )

	{
   pos = position;
   orient = orientation;
   speed = this->speed;
	}

inline Vector *BSplineControlPoint::GetOrientation
   ( 
   void
   )
	{
   return &orientation;
	}

inline float *BSplineControlPoint::GetRoll
   ( 
   void
   )
	{
   return &roll;
	}

inline float *BSplineControlPoint::GetSpeed
   ( 
   void
   )
	{
   return &speed;
	}

class EXPORT_FROM_DLL BSpline
	{
	private:
		BSplineControlPoint  *control_points;
		int				      num_control_points;
      int                  loop_control_point;
		splinetype_t	      curvetype;
      qboolean             has_orientation;

		float  			EvalNormal( float u, Vector &pos, Vector& orient );
		float          EvalLoop( float u, Vector &pos, Vector& orient );
		float 			EvalClamp( float u, Vector &pos, Vector& orient );

	public:
							BSpline();
							~BSpline();
							BSpline( Vector *control_points_, int num_control_points_, splinetype_t type );
							BSpline( Vector *control_points_, Vector *control_orients_, float *control_speeds_, int num_control_points_, splinetype_t type );
		void		      operator=( BSpline &spline );
		void				SetType( splinetype_t type );
		int   			GetType( void );
		void				Clear( void );
		void				Set( Vector *control_points_, int num_control_points_, splinetype_t type );
		void				Set( Vector *control_points_, Vector *control_orients_, float *control_speeds_, int num_control_points_, splinetype_t type );
		void				AppendControlPoint( const Vector& new_control_point );
		void				AppendControlPoint( const Vector& new_control_point, const float& speed );
		void				AppendControlPoint( const Vector& new_control_point, const Vector& new_control_orient, const float& speed );
		Vector			Eval( float u );
		float  			Eval( float u, Vector& pos, Vector& orient );

		void				DrawControlSegments( void );
		void				DrawCurve( int num_subdivisions );
		void				DrawCurve( Vector offset, int num_subdivisions );

      void           SetLoopPoint( const Vector& pos );

		float				EndPoint( void );

		// return the index of the control point picked or -1 if none.
		int				PickControlPoint( const Vector& window_point, float pick_size );

		Vector			*GetControlPoint( int id );
		void           GetControlPoint( int id, Vector& pos, Vector& orient, float& speed );
		void				SetControlPoint( int id, const Vector& new_control_point );
		void				SetControlPoint( int id, const Vector& new_control_point, const Vector& new_control_orient, const float& speed );
      virtual void   Archive( Archiver &arc );
      virtual void   Unarchive( Archiver &arc );
	};

inline BSpline::BSpline()
	{
   has_orientation = false;
	control_points = NULL;
	num_control_points = 0;
   loop_control_point = 0;
	curvetype = SPLINE_NORMAL;
	}

inline BSpline::~BSpline()
	{
   if ( control_points )
      {
      delete [] control_points;
      control_points = NULL;
      }
	}

inline BSpline::BSpline
	(
	Vector *control_points_,
	int num_control_points_,
	splinetype_t type
	)

	{
   has_orientation = false;
	control_points = NULL;
	num_control_points = 0;
   loop_control_point = 0;
	curvetype = SPLINE_NORMAL;

   Set( control_points_, num_control_points_, type );
	}

inline BSpline::BSpline
	(
	Vector *control_points_,
	Vector *control_orients_,
	float  *control_speeds_,
	int num_control_points_,
	splinetype_t type
	)

	{
   has_orientation = false;
	control_points = NULL;
	num_control_points = 0;
   loop_control_point = 0;
	curvetype = SPLINE_NORMAL;

   Set( control_points_, control_orients_, control_speeds_, num_control_points_, type );
	}

inline void BSpline::operator=
	(
	BSpline &spline
	)

	{
   int i;

   Clear();
   num_control_points = spline.num_control_points;
   loop_control_point = spline.loop_control_point;
   curvetype = spline.curvetype;
   has_orientation = spline.has_orientation;

	control_points = new BSplineControlPoint[num_control_points];
	assert( control_points );
   for ( i = 0; i < num_control_points ; i++ )
      control_points[ i ] = spline.control_points[ i ];
	}

inline void BSpline::SetType
	( 
	splinetype_t type
	)

	{
	curvetype = type;
	}

inline int BSpline::GetType
	( 
   void
	)

	{
	return curvetype;
	}

inline float BSpline::EndPoint
	(
	void
	)

	{
	return num_control_points;
	}

inline Vector *BSpline::GetControlPoint
	(
	int id
	)

	{
   assert( id >= 0 );
	assert( id < num_control_points );
   if ( ( id < 0 ) && ( id >= num_control_points ) )
      {
      // probably wrong, but if we're in release mode we have no recourse
      id = 0;
      }
   
   return control_points[ id ].GetPosition();
  	}

inline void BSpline::GetControlPoint
	(
	int id,
   Vector& pos,
   Vector& orient,
   float& speed
	)

	{
   assert( id >= 0 );
	assert( id < num_control_points );
   if ( ( id >= 0 ) && ( id < num_control_points ) )
      {
      control_points[ id ].Get( pos, orient, speed );
      }
	}

inline void BSpline::SetControlPoint
	(
	int id,
	const Vector& new_control_point
	)

	{
   assert( id >= 0 );
	assert( id < num_control_points );
   if ( ( id >= 0 ) && ( id < num_control_points ) )
      {
      control_points[ id ].Set( new_control_point );
      }
	}

inline void BSpline::SetControlPoint
	(
	int id,
	const Vector& new_control_point,
	const Vector& new_control_orient,
   const float& speed
	)

	{
   assert( id >= 0 );
	assert( id < num_control_points );
   if ( ( id >= 0 ) && ( id < num_control_points ) )
      {
      control_points[ id ].Set( new_control_point, new_control_orient, speed );
      }
	}

inline EXPORT_FROM_DLL void BSpline::Archive
	(
	Archiver &arc
	)
   {
   int i;

   arc.WriteInteger( num_control_points );
   arc.WriteInteger( loop_control_point );
   arc.WriteInteger( curvetype );
   arc.WriteBoolean( has_orientation );
   for( i = 0; i < num_control_points; i++ )
      {
      control_points[ i ].Archive( arc );
      }
   }

inline EXPORT_FROM_DLL void BSpline::Unarchive
	(
	Archiver &arc
	)
   {
   int i;

   arc.ReadInteger( &num_control_points );
   arc.ReadInteger( &loop_control_point );
   arc.ReadInteger( &i );
   curvetype = ( splinetype_t )i;
   arc.ReadBoolean( &has_orientation );
   control_points = new BSplineControlPoint[ num_control_points ];
   for( i = 0; i < num_control_points; i++ )
      {
      control_points[ i ].Unarchive( arc );
      }
   }

class SplinePath;
#ifdef EXPORT_TEMPLATE
template class EXPORT_FROM_DLL SafePtr<SplinePath>;
#endif
typedef SafePtr<SplinePath> SplinePathPtr;

class EXPORT_FROM_DLL SplinePath : public Entity
	{
	protected:
		SplinePathPtr		owner;
		SplinePathPtr		next;
      SplinePathPtr     loop;
      str               loop_name;

		void					CreatePath( Event *ev );

	public:
      float             speed;

      CLASS_PROTOTYPE( SplinePath );

								SplinePath();
		SplinePath			*GetNext( void );
		SplinePath			*GetLoop( void );
      virtual void      Archive( Archiver &arc );
      virtual void      Unarchive( Archiver &arc );
	};

inline EXPORT_FROM_DLL void SplinePath::Archive
	(
	Archiver &arc
	)

   {
   Entity::Archive( arc );

   arc.WriteSafePointer( owner );
   arc.WriteSafePointer( next );
   arc.WriteSafePointer( loop );
   arc.WriteString( loop_name );
   arc.WriteFloat( speed );
   }

inline EXPORT_FROM_DLL void SplinePath::Unarchive
	(
	Archiver &arc
	)

   {
   Entity::Unarchive( arc );

   arc.ReadSafePointer( &owner );
   arc.ReadSafePointer( &next );
   arc.ReadSafePointer( &loop );
   arc.ReadString( &loop_name );
   arc.ReadFloat( &speed );
   }

#endif /* __BSPLINE_H__ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男女性色大片免费观看一区二区 | 亚洲在线免费播放| 成人午夜激情影院| 欧美激情综合五月色丁香小说| 极品尤物av久久免费看| 欧美精品一区二区蜜臀亚洲| 国内一区二区在线| 欧美激情一区二区在线| 91丝袜美腿高跟国产极品老师| 亚洲区小说区图片区qvod| 91九色最新地址| 亚洲丶国产丶欧美一区二区三区| 欧美一区二区在线免费观看| 久久精品国产久精国产爱| 久久夜色精品一区| 丰满白嫩尤物一区二区| 国产丝袜欧美中文另类| 岛国一区二区在线观看| 中文字幕电影一区| 欧美专区在线观看一区| 蜜桃视频一区二区| 久久精品视频一区二区| 久久99国产精品免费| 久久久三级国产网站| 国模套图日韩精品一区二区| 国产婷婷色一区二区三区| caoporen国产精品视频| 亚洲欧洲综合另类在线| 欧美视频一区二区| 美女视频一区在线观看| 久久品道一品道久久精品| 成人免费三级在线| 亚洲激情图片qvod| 99久久久国产精品| 亚洲在线一区二区三区| 91精品蜜臀在线一区尤物| 日产精品久久久久久久性色| 久久精品在这里| 色综合久久久久网| 日本成人在线视频网站| 久久久美女毛片| 在线欧美日韩国产| 久久国产夜色精品鲁鲁99| 国产精品久久久久久久岛一牛影视 | 91视频.com| 日一区二区三区| 久久亚洲欧美国产精品乐播| 色偷偷88欧美精品久久久| 日韩不卡一区二区三区| 国产精品污污网站在线观看| 欧美日韩国产片| 国产精品一级片| 一区二区三区中文免费| 欧美videos中文字幕| 99久久婷婷国产精品综合| 另类综合日韩欧美亚洲| 亚洲女人的天堂| 欧美精品一区二区三区在线播放| 91免费版在线| 国产精品一卡二| 丝袜a∨在线一区二区三区不卡| 国产欧美一二三区| 欧美放荡的少妇| 99精品国产一区二区三区不卡| 蜜臀va亚洲va欧美va天堂| 亚洲精品乱码久久久久| 久久综合久久久久88| 91精品啪在线观看国产60岁| 99麻豆久久久国产精品免费优播| 九九九精品视频| 亚洲国产精品久久一线不卡| 国产精品欧美久久久久一区二区| 国产亚洲一二三区| wwwwxxxxx欧美| 日韩女优制服丝袜电影| 欧美肥胖老妇做爰| 欧美婷婷六月丁香综合色| av在线综合网| 成人免费看的视频| 国产毛片精品一区| 激情综合色综合久久| 日本午夜一本久久久综合| 亚洲激情校园春色| 日韩一区中文字幕| 国产精品福利一区二区| 国产欧美精品一区二区色综合朱莉| 91精品国产一区二区三区香蕉| 欧美视频在线一区二区三区| 色综合久久久久| 色婷婷av一区二区三区gif| 成人av资源在线观看| 国产精品系列在线观看| 国产一区二区三区不卡在线观看 | 中文字幕中文字幕中文字幕亚洲无线| 欧美电影免费观看高清完整版 | 欧洲生活片亚洲生活在线观看| 成人开心网精品视频| 国产精品1024| 国产精品一区二区三区乱码| 国产一区高清在线| 国产一区福利在线| 久草中文综合在线| 肉色丝袜一区二区| 日韩av一区二区在线影视| 亚洲国产裸拍裸体视频在线观看乱了| 中文字幕一区二区三区四区| 国产精品免费人成网站| 国产日韩欧美精品电影三级在线| 亚洲精品一区二区在线观看| 日韩欧美一区二区久久婷婷| 日韩丝袜美女视频| 91精品国产91久久久久久一区二区| 日韩精品一区二区三区视频播放 | 偷拍一区二区三区四区| 婷婷久久综合九色国产成人| 日本亚洲天堂网| 韩国女主播一区二区三区| 国产高清精品在线| 99国产精品久久久| 欧美日韩和欧美的一区二区| 欧美一二三区精品| 国产视频视频一区| 依依成人精品视频| 日韩av一区二区三区| 国产精品综合久久| 99精品久久免费看蜜臀剧情介绍| 欧美三级视频在线| 久久久亚洲高清| 一区二区三区四区高清精品免费观看| 亚洲欧洲精品一区二区三区 | 欧美日韩综合一区| 欧美成人艳星乳罩| 国产精品亲子伦对白| 亚洲风情在线资源站| 精彩视频一区二区| 一本一道波多野结衣一区二区| 7777精品伊人久久久大香线蕉 | 亚洲成人免费视频| 精品午夜久久福利影院| 一本色道a无线码一区v| 欧美成人国产一区二区| 国产精品传媒视频| 看片的网站亚洲| 日本韩国精品在线| 久久女同性恋中文字幕| 伊人色综合久久天天人手人婷| 国产91露脸合集magnet| 欧美三级中文字| 亚洲免费电影在线| 国产一区二区导航在线播放| 欧美专区亚洲专区| 国产精品乱码妇女bbbb| 奇米色一区二区| 91九色最新地址| 中文字幕国产一区| 久久99国内精品| 911精品国产一区二区在线| 国产精品久久久久久亚洲毛片| 美女视频免费一区| 欧美色欧美亚洲另类二区| 国产精品电影一区二区三区| 日本欧美久久久久免费播放网| 97精品视频在线观看自产线路二| 欧美va亚洲va| 五月天国产精品| 欧美私人免费视频| 亚洲欧美另类在线| 成人在线视频一区二区| 久久综合色一综合色88| 图片区小说区区亚洲影院| 国产suv精品一区二区6| 日韩一级完整毛片| 亚洲黄色片在线观看| 蜜臀av一区二区| 91香蕉视频黄| 亚洲综合色噜噜狠狠| 成人高清在线视频| 欧美—级在线免费片| 国产麻豆午夜三级精品| 2023国产精品自拍| 精品一区二区综合| 精品毛片乱码1区2区3区| 亚洲午夜在线电影| 欧美做爰猛烈大尺度电影无法无天| 亚洲男同1069视频| 一本大道综合伊人精品热热| 国产精品久久久99| a4yy欧美一区二区三区| 久久只精品国产| 国产在线不卡一卡二卡三卡四卡| 精品久久久久av影院| 亚洲午夜电影在线观看| 在线精品观看国产| 亚洲一区二区三区爽爽爽爽爽| 91精彩视频在线| 亚洲一区二区三区视频在线| 欧美日韩国产一区二区三区地区| 亚洲成精国产精品女| 日韩一区二区精品| 国产一区二区不卡|