本文整理汇总了C++中Terrain::GetPosition方法的典型用法代码示例。如果您正苦于以下问题:C++ Terrain::GetPosition方法的具体用法?C++ Terrain::GetPosition怎么用?C++ Terrain::GetPosition使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Terrain
的用法示例。
在下文中一共展示了Terrain::GetPosition方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _Update
void xEditTerrainHeight::_Update(Event * sender)
{
Terrain * terrain = Environment::Instance()->GetTerrain();
if (!terrain)
return ;
int op = xApp::Instance()->GetOperator();
if (op != xTerrainOp::eOp_Terrain)
return ;
Point2f pt = IMouse::Instance()->GetPositionUnit();
if (pt.x < 0 || pt.y < 0 || pt.x > 1 || pt.y > 1)
return ;
Ray ray = World::Instance()->MainCamera()->GetViewportRay(pt.x, pt.y);
mBrush.position = terrain->GetPosition(ray);
if (!IMouse::Instance()->KeyPressed(MKC_BUTTON0))
return ;
_UpdateGeometry();
}
示例2: RayCheck
RayCheckInfo RayCheck(Ray ray, float dist)
{
RayCheckInfo info;
Terrain * terriain = Environment::Instance()->GetTerrain();
Vec3 pos = terriain->GetPosition(ray);
if (pos != Vec3::Zero && pos.DistanceSq(ray.origin) < dist * dist)
{
info.bPicked = true;
info.vPosition = pos;
}
return info;
}
示例3: Init
void WaterBlock::Init(Water* water, int x, int z)
{
Shudown();
mWater = water;
mIndexX = x;
mIndexZ = z;
Terrain * terrain = Environment::Instance()->GetTerrain();
int startX = kBlockGridSize * x;
int startZ = kBlockGridSize * z;
int sizeZ = water->GetSizeZ() - 1;
WaterIdentityVertex wiv;
Array<unsigned short> indexArray;
for (int j = startZ; j < startZ + kBlockGridSize; ++j)
{
for (int i = startX; i < startX + kBlockGridSize; ++i)
{
char flag = mWater->GetData(i, j);
if (flag == 1)
{
int _x = i;
int _y = sizeZ - j;
Vec3 p0 = terrain->GetPosition(_x + 0, _y + 0);
Vec3 p1 = terrain->GetPosition(_x + 1, _y + 0);
Vec3 p2 = terrain->GetPosition(_x + 0, _y + 1);
Vec3 p3 = terrain->GetPosition(_x + 1, _y + 1);
int i0 = wiv.Add(_x + 0, _y + 0, p0);
int i1 = wiv.Add(_x + 1, _y + 0, p1);
int i2 = wiv.Add(_x + 0, _y + 1, p2);
int i3 = wiv.Add(_x + 1, _y + 1, p3);
indexArray.PushBack(i0);
indexArray.PushBack(i1);
indexArray.PushBack(i2);
indexArray.PushBack(i3);
mBound.Merge(p0);
mBound.Merge(p1);
mBound.Merge(p2);
mBound.Merge(p3);
}
}
}
if (indexArray.Size() == 0)
return ;
mRenderOp = new RenderOp();
mRenderOp->iPrimCount = indexArray.Size() - 2;
mRenderOp->ePrimType = PRIM_TRIANGLELIST;
int iVertexCount = wiv.vertArray.Size();
int iIndexCount = mRenderOp->iPrimCount * 3;
VertexDeclarationPtr vdecl = mWater->GetVertexDecl();
VertexBufferPtr vb = VideoBufferManager::Instance()->CreateVertexBuffer(iVertexCount * sizeof(Vec3), sizeof(Vec3));
Vec3 * vert = (Vec3 *)vb->Lock(0, 0, LOCK_DISCARD);
{
for (int i = 0; i < iVertexCount; ++i)
{
vert[i] = wiv.vertArray[i].position;
}
}
vb->Unlock();
mRenderOp->vxStream.SetDeclaration(vdecl);
mRenderOp->vxStream.Bind(0, vb, sizeof(Vec3));
mRenderOp->vxStream.SetCount(iVertexCount);
IndexBufferPtr ib = VideoBufferManager::Instance()->CreateIndexBuffer(iIndexCount * sizeof(short));
short * idx = (short *)ib->Lock(0, 0, LOCK_DISCARD);
{
for (int i = 0; i < indexArray.Size(); i += 4)
{
*idx++ = indexArray[i + 0];
*idx++ = indexArray[i + 1];
*idx++ = indexArray[i + 2];
*idx++ = indexArray[i + 2];
*idx++ = indexArray[i + 1];
*idx++ = indexArray[i + 3];
}
}
ib->Unlock();
mRenderOp->ixStream.Bind(ib, 0);
mRenderOp->ixStream.SetCount(iIndexCount);
}