74 lines
1.8 KiB
C++
74 lines
1.8 KiB
C++
#include "twist.h"
|
|
#include "globals.h"
|
|
#include "intrin.h"
|
|
|
|
void Twist::AddToScene( float fTime, int iObject, bool isLowPoly )
|
|
{
|
|
g_Objects[ iObject ].Lock();
|
|
for( int i= 0; i < 3; ++i )
|
|
{
|
|
AddCylinder( fTime, iObject,
|
|
fTime * 2.5f + (float)i * c_2PI / 3.0f,
|
|
2.0f,
|
|
1.66f,
|
|
isLowPoly);
|
|
}
|
|
g_Objects[ iObject ].Unlock();
|
|
}
|
|
|
|
void Twist::AddCylinder( float fTime, int iObject, float fBaseAngle, float fBaseSize, float fSize, bool isLowPoly )
|
|
{
|
|
DWORD dwColor= 0x80404040;
|
|
|
|
const int iSliceCount= 64;
|
|
const int iSideCount= isLowPoly ? 3 : 24;
|
|
float fOffset= 0.0f;
|
|
|
|
int iBaseIndex= g_Objects[ iObject ].GetVertCount();
|
|
|
|
for( int iSlices= -iSliceCount; iSlices < iSliceCount; ++iSlices )
|
|
{
|
|
float fLocalTime= fTime + iSlices / 32.0f;
|
|
float fAddAngle= 6.0f * sin( fLocalTime * 0.78f + 0.8f * sin( fLocalTime * 0.37f) );
|
|
D3DXVECTOR3 vMid(
|
|
fBaseSize * sin( fBaseAngle + fAddAngle ),
|
|
(float)iSlices * 0.25f,
|
|
fBaseSize * cos( fBaseAngle + fAddAngle ) );
|
|
|
|
for( int i= 0; i < iSideCount; ++i )
|
|
{
|
|
if( iSlices != -iSliceCount )
|
|
{
|
|
int ID1= g_Objects[ iObject ].GetVertCount();
|
|
int ID2= ID1 - 1 + ( i == 0 ? iSideCount : 0 );
|
|
int ID3= ID1 - iSideCount;
|
|
int ID4= ID2 - iSideCount;
|
|
|
|
g_Objects[ iObject ].AddIndex( ID1 );
|
|
g_Objects[ iObject ].AddIndex( ID2 );
|
|
g_Objects[ iObject ].AddIndex( ID3 );
|
|
|
|
g_Objects[ iObject ].AddIndex( ID3 );
|
|
g_Objects[ iObject ].AddIndex( ID2 );
|
|
g_Objects[ iObject ].AddIndex( ID4 );
|
|
}
|
|
|
|
float fAngle= fOffset + c_2PI * (float)i / (float)iSideCount;
|
|
|
|
D3DXVECTOR3 vNormal( cos( fAngle ), 0.0f, -sin( fAngle ) );
|
|
|
|
Renderjob::SVertex V;
|
|
*((D3DXVECTOR3*)&(V.x))= vMid + vNormal * fSize;
|
|
*((D3DXVECTOR3*)&(V.nx))= vNormal;
|
|
V.dwColor= dwColor;
|
|
V.tu= 0.0f;
|
|
V.tv= 0.0f;
|
|
|
|
g_Objects[ iObject ].AddVertex( V );
|
|
|
|
}
|
|
//fOffset+= c_PI / (float)iSideCount;
|
|
|
|
}
|
|
}
|