port from perforce
This commit is contained in:
73
evoke-64k/trunk/ev10/twist.cpp
Normal file
73
evoke-64k/trunk/ev10/twist.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#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;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user