本文整理汇总了C++中VertexBufferPtr::Create方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexBufferPtr::Create方法的具体用法?C++ VertexBufferPtr::Create怎么用?C++ VertexBufferPtr::Create使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexBufferPtr
的用法示例。
在下文中一共展示了VertexBufferPtr::Create方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: vecScale
i32 CreateRect2D(Resources::CMesh* pMesh, const IInputLayout* pIL, const SRect2DOptions& Opts)
{
Vec3 vecScale( 100 );
Vec2 vecWidth( 0, 100 );
Vec2 vecHeight( 0, 100 );
IndexBufferPtr pIB = pMesh->CreateIndexBuffer();
VertexBufferPtr pVB = pMesh->CreateVertexBuffer();
pVB->SetVertexCount( 4 );
pVB->SetInputLayout( pIL );
pVB->SetTopologyType( TopologyTypes::TRIANGLE_LIST );
pVB->SetUsage( Opts.eUsage );
pIB->SetIndexCount( 6 );
pIB->SetUsage( BufferUsages::STATIC );
pVB->Lock();
CVertexData& VData = pVB->GetVertexData();
if( pIL->IsPosition() )
{
VData.SetPosition( 0, Vec3( 0, 0, 0 ) );
VData.SetPosition( 1, Vec3( vecScale.x, 0, 0 ) );
VData.SetPosition( 2, Vec3( vecScale.x, -vecScale.y, 0 ) );
VData.SetPosition( 3, Vec3( 0, -vecScale.y, 0) );
}
if( pIL->IsColor() )
{
VData.SetColor( 0, Vec4( 1, 1, 1, 1 ) );
VData.SetColor( 1, Vec4( 1, 1, 1, 1 ) );
VData.SetColor( 2, Vec4( 1, 1, 1, 1 ) );
VData.SetColor( 3, Vec4( 1, 1, 1, 1 ) );
}
if( pIL->IsTexCoord0() )
{
VData.SetTexCoord( 0, 0, Vec2( 0, 1 ) );
VData.SetTexCoord( 1, 0, Vec2( 1, 1 ) );
VData.SetTexCoord( 2, 0, Vec2( 0, 1 ) );
VData.SetTexCoord( 3, 0, Vec2( 0, 0 ) );
}
pVB->Unlock();
pVB->Create();
pIB->Lock();
CIndexData& IData = pIB->GetIndexData();
IData.SetTriangle( 0, 0, 2, 3 );
IData.SetTriangle( 1, 1, 2, 0 );
return XST_OK;
}
示例2: CreateCircle
i32 CreateCircle( Resources::CMesh* pMesh, const IInputLayout* pIL, const SCircleOptions& Options )
{
xst_vector< Vec3 > vPoints;
f32 fAngle = 0.0f;
for( u32 i = 0; i <= 360; i += Options.uStep )
{
fAngle = XST::Math::DegreesToRadians( (f32)i );
vPoints.push_back( Vec3( XST::Math::Cos( fAngle ) * Options.fRadius, XST::Math::Sin( fAngle ) * Options.fRadius, 0.0f ) );
}
bool bIsNormal = pIL->IsNormal();
ul32 ulVertCount = vPoints.size();
VertexBufferPtr pVB = pMesh->CreateVertexBuffer();
pVB->SetTopologyType( TopologyTypes::LINE_STRIP );
pVB->SetUsage( BufferUsages::DEFAULT );
pVB->SetVertexCount( ulVertCount );
pVB->SetInputLayout( pIL );
if( XST_FAILED( pVB->Lock() ) )
{
return XST_FAIL;
}
CVertexData& Data = pVB->GetVertexData();
ul32 vs = pIL->GetVertexSize();
for( u32 i = 0; i < vPoints.size(); ++i )
{
if( pIL->IsPosition() )
{
Data.SetPosition( i, vPoints[ i ] + Options.vecPos );
}
}
if( XST_FAILED( pVB->Unlock() ) || XST_FAILED( pVB->Create() ) )
{
return XST_FAIL;
}
return XST_OK;
}
示例3: CreatePlane
i32 CreatePlane(Resources::CMesh* pMesh, const IInputLayout* pIL, const SPlaneOptions& Opts)
{
bool bIsNormal = pIL->IsNormal();
u16 ulVVertCount = (u16)Opts.vecVertexCount.x;
u16 ulHVertCount = (u16)Opts.vecVertexCount.y;
ul32 ulVertCount = ulVVertCount * ulHVertCount;
//ul32 ulIndexCount = 36;
VertexBufferPtr pVB = pMesh->CreateVertexBuffer();
pVB->SetInputLayout( pIL );
pVB->SetTopologyType( TopologyTypes::TRIANGLE_STRIP );
pVB->SetUsage( BufferUsages::DEFAULT );
pVB->SetVertexCount( ulVertCount );
pVB->SetInputLayout( pIL );
pVB->Lock();
CVertexData& Data = pVB->GetVertexData();
cf32 fUnit = 1.0f;
ul32 vs = pIL->GetVertexSize();
Vec2 vecTC( Vec2::ZERO );
Vec3 vecTmpPos;
if( pIL->IsPosition() )
{
ul32 ulVertId = 0;
Vec2 vecVertDist( Opts.vecSize.x / ( Opts.vecVertexCount.x - 1 ), Opts.vecSize.y / ( Opts.vecVertexCount.y - 1 ) );
Vec2 vecPos( Vec2::ZERO );
for(ul32 y = 0; y < ulVVertCount; ++y, vecPos.y += vecVertDist.y)
{
for(ul32 x = 0; x < ulHVertCount; ++x, vecPos.x += vecVertDist.x)
{
vecTmpPos = Vec3( vecPos.x, 0, vecPos.y );
Data.SetPosition( ulVertId, vecTmpPos );
if( pIL->IsTexCoord0() )
{
vecTC.x = vecTmpPos.x / Opts.vecSize.x;
vecTC.y = vecTmpPos.z / Opts.vecSize.y;
Data.SetTexCoord0( ulVertId, vecTC );
}
++ulVertId;
}
vecPos.x = 0.0f;
}
}
if( pIL->IsColor() )
{
f32 fc = 0.05f;
for(ul32 i = 0; i < ulVertCount; ++i)
{
Data.SetColor( i, XST::CColor::Random().ToVector4() + Vec4( 0.2f, 0.2f, 0.2f, 0.0f ) );
}
}
if( bIsNormal )
{
for(u32 i = 0; i < ulVertCount; ++i)
{
Data.SetNormal( i, Opts.vecNormal );
}
}
pVB->Unlock();
pVB->Create();
IndexBufferPtr pIB = pMesh->CreateIndexBuffer();
pIB->SetUsage( BufferUsages::DEFAULT );
u16 ulIndexCount = ( ulHVertCount * 2 ) * ( ulVVertCount - 1 ) + ( ulVVertCount - 2 );
pIB->SetIndexCount( ulIndexCount );
pIB->Lock();
CIndexData& IndexData = pIB->GetIndexData();
ul32 ulIndex = 0;
for(u16 z = 0; z < ulVVertCount - 1; ++z)
{
if( z % 2 == 0 )
{
i16 x;
for(x = 0; x < ulHVertCount; ++x )
{
IndexData.SetIndex( ulIndex++, x + ( z * ulHVertCount ) );
IndexData.SetIndex( ulIndex++, x + ( z * ulHVertCount ) + ulHVertCount );
}
if( z != ulVVertCount - 2 )
{
IndexData.SetIndex( ulIndex++, --x + ( z * ulHVertCount ) );
}
}
else
{
i16 x;
for(x = ulHVertCount - 1; x >= 0; --x )
//.........这里部分代码省略.........
示例4: CreateBox
i32 CreateBox(Resources::CMesh* pMesh, const IInputLayout* pIL, const SBoxOptions& Options)
{
bool bIsNormal = pIL->IsNormal();
ul32 ulVertCount = ( bIsNormal )? 24 : 8; //if there are normals use more vertices
ul32 ulIndexCount = 36;
VertexBufferPtr pVB = pMesh->CreateVertexBuffer();
pVB->SetTopologyType( TopologyTypes::TRIANGLE_LIST );
pVB->SetUsage( BufferUsages::DEFAULT );
pVB->SetVertexCount( ulVertCount );
pVB->SetInputLayout( pIL );
pVB->Lock();
CVertexData& Data = pVB->GetVertexData();
cf32 fUnit = 1.0f;
ul32 vs = pIL->GetVertexSize();
const Vec3 vecSize( Options.vecSize * 0.5f );
const Vec3 vecPos( vecSize + Options.vecPos );
if( pIL->IsPosition() )
{
if( bIsNormal )
{
Data.SetPosition( 0, Vec3( -vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 1, Vec3( vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 2, Vec3( vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 3, Vec3( -vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 4, Vec3( -vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 5, Vec3( -vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 6, Vec3( -vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 7, Vec3( -vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 8, Vec3( vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 9, Vec3( vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 10, Vec3( vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 11, Vec3( vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 12, Vec3( -vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 13, Vec3( vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 14, Vec3( vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 15, Vec3( -vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 16, Vec3( -vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 17, Vec3( vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 18, Vec3( vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 19, Vec3( -vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 20, Vec3( -vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 21, Vec3( vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 22, Vec3( vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 23, Vec3( -vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
}
else
{
Data.SetPosition( 0, Vec3( -vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 1, Vec3( vecSize.x, vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 2, Vec3( vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 3, Vec3( -vecSize.x, vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 4, Vec3( -vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 5, Vec3( vecSize.x, -vecSize.y, -vecSize.z ) + Options.vecPos );
Data.SetPosition( 6, Vec3( vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
Data.SetPosition( 7, Vec3( -vecSize.x, -vecSize.y, vecSize.z ) + Options.vecPos );
}
}
if( pIL->IsColor() )
{
f32 fc = 0.05f;
for(ul32 i = 0; i < ulVertCount; ++i)
{
/*Data.SetColor( 0, Vec4( 1, 0, 0, 1 ) );
Data.SetColor( 1, Vec4( 1, 1, 1, 1 ) );
Data.SetColor( 2, Vec4( 0, 1, 0, 1 ) );
Data.SetColor( 3, Vec4( 0.5, 0.3, 1, 1 ) ); */
Data.SetColor( i, Options.colColor.ToVector4() );
}
}
if( bIsNormal )
{
Data.SetNormal( 0, Vec3( -1, 1, -1 ) );
Data.SetNormal( 1, Vec3( 1, 1, -1 ) );
Data.SetNormal( 2, Vec3( 1, 1, 1 ) );
Data.SetNormal( 3, Vec3( -1, 1, 1 ) );
Data.SetNormal( 4, Vec3( -1, -1, -1 ) );
Data.SetNormal( 5, Vec3( 1, -1, -1 ) );
Data.SetNormal( 6, Vec3( 1, -1, 1 ) );
Data.SetNormal( 7, Vec3( -1, -1, 1 ) );
}
pVB->Unlock();
pVB->Create();
IndexBufferPtr pIB = pMesh->CreateIndexBuffer();
pIB->SetUsage( BufferUsages::DEFAULT );
pIB->SetIndexCount( ulIndexCount );
//.........这里部分代码省略.........