本文整理汇总了C++中TriMesh::GetIndexBuffer方法的典型用法代码示例。如果您正苦于以下问题:C++ TriMesh::GetIndexBuffer方法的具体用法?C++ TriMesh::GetIndexBuffer怎么用?C++ TriMesh::GetIndexBuffer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TriMesh
的用法示例。
在下文中一共展示了TriMesh::GetIndexBuffer方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Response
//----------------------------------------------------------------------------
void CollisionsBoundTree::Response (CRecord& record0, int t0,
CRecord& record1, int t1, Intersector<float,Vector3f>*)
{
CollisionsBoundTree* app = (CollisionsBoundTree*)TheApplication;
// Mesh0 triangles that are intersecting change from blue to cyan.
TriMesh* mesh = record0.GetMesh();
VertexBufferAccessor vba(mesh);
const int* indices = (int*)mesh->GetIndexBuffer()->GetData();
int i0 = indices[3*t0];
int i1 = indices[3*t0 + 1];
int i2 = indices[3*t0 + 2];
vba.TCoord<Float2>(0, i0) = app->mCyanUV;
vba.TCoord<Float2>(0, i1) = app->mCyanUV;
vba.TCoord<Float2>(0, i2) = app->mCyanUV;
app->mRenderer->Update(mesh->GetVertexBuffer());
// Mesh1 triangles that are intersecting change from red to yellow.
mesh = record1.GetMesh();
vba.ApplyTo(mesh);
indices = (int*)mesh->GetIndexBuffer()->GetData();
i0 = indices[3*t1];
i1 = indices[3*t1 + 1];
i2 = indices[3*t1 + 2];
vba.TCoord<Float2>(0 ,i0) = app->mYellowUV;
vba.TCoord<Float2>(0, i1) = app->mYellowUV;
vba.TCoord<Float2>(0, i2) = app->mYellowUV;
app->mRenderer->Update(mesh->GetVertexBuffer());
// NOTE: See the comments in Wm5CollisionGroup.h about information that
// is available from the Intersector<float,Vector3f> object.
}
示例2: vba
//----------------------------------------------------------------------------
RawTerrainPage::RawTerrainPage (VertexFormat* vformat, int size,
float* heights, const Float2& origin, float spacing)
:
mSize(size),
mSizeM1(size - 1),
mHeights(heights),
mOrigin(origin),
mSpacing(spacing)
{
// size = 2^p + 1, p <= 7
assertion(size == 3 || size == 5 || size == 9 || size == 17
|| size == 33 || size == 65 || size == 129, "Invalid page size\n");
mInvSpacing = 1.0f/mSpacing;
// 创建地形页网格
float ext = mSpacing*mSizeM1;
TriMesh* mesh = StandardMesh(vformat).Rectangle(mSize, mSize, ext, ext);
mVFormat = vformat;
mVBuffer = mesh->GetVertexBuffer();
mIBuffer = mesh->GetIndexBuffer();
delete0(mesh);
// 修改地形顶点数据
VertexBufferAccessor vba(mVFormat, mVBuffer);
int numVertices = mVBuffer->GetNumElements();
for (int i = 0; i < numVertices; ++i)
{
int x = i % mSize;
int y = i / mSize;
vba.Position<Float3>(i) = Float3(GetX(x), GetY(y), GetHeight(i));
vba.Normal<Float3>(i) = Float3(0.0f, 0.0f, 1.0f);
}
UpdateModelSpace(Renderable::GU_NORMALS);
mUV01 = Float4(8.0f, 8.0f, 8.0f, 8.0f);
mUV23 = Float4(8.0f, 8.0f, 8.0f, 8.0f);
mUV4 = Float4(8.0f, 8.0f, 8.0f, 8.0f);
mUV01Float = new0 ShaderFloat(1);
mUV23Float = new0 ShaderFloat(1);
mUV4Float = new0 ShaderFloat(1);
SetUV0(Float2(mUV01[0], mUV01[1]));
SetUV1(Float2(mUV01[2], mUV01[3]));
SetUV2(Float2(mUV23[0], mUV23[1]));
SetUV3(Float2(mUV23[2], mUV23[3]));
SetUV4(Float2(mUV4[0], mUV4[1]));
mTextureAlpha = new0 Texture2D(Texture::TF_A8R8G8B8, mSize, mSize, 1);
mTextureDefault = DynamicCast<Texture2D>(ResourceManager::GetSingleton()
.BlockLoad("Data/Images/Terrain/NiTu.dds"));
assertion(mTextureDefault!=0, "Load texture %s failed.",
"Data/Images/Terrain/NiTu.dds");
}
示例3: stdmesh
//----------------------------------------------------------------------------
RevolutionSurface::RevolutionSurface (Curve2f* curve, float xCenter,
TopologyType topology, int numCurveSamples, int numRadialSamples,
bool sampleByArcLength, bool outsideView, VertexFormat* vformat)
:
mCurve(curve),
mXCenter(xCenter),
mTopology(topology),
mNumCurveSamples(numCurveSamples),
mNumRadialSamples(numRadialSamples),
mSin(0),
mCos(0),
mSamples(0),
mSampleByArcLength(sampleByArcLength)
{
ComputeSampleData();
// The topology of the meshes is all that matters. The vertices will be
// modified later based on the curve of revolution.
StandardMesh stdmesh(vformat, !outsideView);
TriMesh* mesh = 0;
switch (mTopology)
{
case REV_DISK_TOPOLOGY:
mesh = stdmesh.Disk(mNumCurveSamples, mNumRadialSamples, 1.0f);
break;
case REV_CYLINDER_TOPOLOGY:
mesh = stdmesh.Cylinder(mNumCurveSamples, mNumRadialSamples, 1.0f,
1.0f, true);
break;
case REV_SPHERE_TOPOLOGY:
mesh = stdmesh.Sphere(mNumCurveSamples, mNumRadialSamples, 1.0f);
break;
case REV_TORUS_TOPOLOGY:
mesh = stdmesh.Torus(mNumCurveSamples, mNumRadialSamples, 1.0f,
0.25f);
break;
default:
assertion(false, "Unexpected condition\n");
break;
}
assertion(mesh != 0, "Failed to construct mesh\n");
mVFormat = vformat;
mVBuffer = mesh->GetVertexBuffer();
// Generate the actual surface by replacing the vertex values. NOTE:
// Setting mIBuffer to zero acts as a flag that tells UpdateSurface
// *not* to call Renderer::UpdateVertexBuffer(mVBuffer). Only when the
// application has constructed a RevolutionSurface wlil the update occur.
mIBuffer = 0;
UpdateSurface();
mIBuffer = mesh->GetIndexBuffer();
delete0(mesh);
}
示例4: vba
//----------------------------------------------------------------------------
RawTerrainPage::RawTerrainPage (VertexFormat* vformat, int size,
float* heights, const Float2& origin, float spacing)
:
TerrainPage(size, heights, origin, spacing)
{
float ext = mSpacing*mSizeM1;
TriMesh* mesh = StandardMesh(vformat).Rectangle(mSize, mSize, ext, ext);
mVFormat = vformat;
mVBuffer = mesh->GetVertexBuffer();
mIBuffer = mesh->GetIndexBuffer();
delete0(mesh);
VertexBufferAccessor vba(mVFormat, mVBuffer);
int numVertices = mVBuffer->GetNumElements();
for (int i = 0; i < numVertices; ++i)
{
int x = i % mSize;
int y = i / mSize;
vba.Position<Float3>(i) = Float3(GetX(x), GetY(y), GetHeight(i));
vba.Normal<Float3>(i) = Float3(0.0f, 0.0f, 1.0f);
vba.Color<Float3>(0, i) = Float3(0.0f, 0.0f, 0.0f);
}
UpdateModelSpace(Renderable::GU_NORMALS);
mUV01 = Float4(8.0f, 8.0f, 8.0f, 8.0f);
mUV23 = Float4(8.0f, 8.0f, 8.0f, 8.0f);
mUV4 = Float4(8.0f, 8.0f, 8.0f, 8.0f);
mUV01Float = new0 ShaderFloat(1);
mUV23Float = new0 ShaderFloat(1);
mUV4Float = new0 ShaderFloat(1);
SetUV0(Float2(mUV01[0], mUV01[1]));
SetUV1(Float2(mUV01[2], mUV01[3]));
SetUV2(Float2(mUV23[0], mUV23[1]));
SetUV3(Float2(mUV23[2], mUV23[3]));
SetUV4(Float2(mUV4[0], mUV4[1]));
mTextureAlpha = new0 Texture2D(Texture::TF_A8R8G8B8, mSize, mSize, 1);
mTextureDefaultFilename = "Data/engine/grass.png";
}