本文整理汇总了C#中Mesh.Load方法的典型用法代码示例。如果您正苦于以下问题:C# Mesh.Load方法的具体用法?C# Mesh.Load怎么用?C# Mesh.Load使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mesh
的用法示例。
在下文中一共展示了Mesh.Load方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Import
public Mesh Import(string filename)
{
string ext = Path.GetExtension(filename);
if (ext == ".node" || ext == ".poly" || ext == ".ele")
{
List<ITriangle> triangles;
InputGeometry geometry;
FileReader.Read(filename, out geometry, out triangles);
if (geometry != null && triangles != null)
{
Mesh mesh = new Mesh();
mesh.Load(geometry, triangles);
return mesh;
}
}
throw new NotSupportedException("Could not load '" + filename + "' file.");
}
示例2: Build
//.........这里部分代码省略.........
*pReal++ = bb.Position.z;
// normals (actually used as scale / translate info for vertex shader)
*pReal++ = halfXScale;
*pReal++ = halfYScale;
*pReal++ = 2.0f;
// color
*((uint*)pReal++) = bb.Color;
// uv
*pReal++ = (float)(bb.TextCoordIndexU * mUFactor);
*pReal++ = (float)((bb.TextCoordIndexV + 1) * mVFactor);
// position
*pReal++ = bb.Position.x;
*pReal++ = bb.Position.y;
*pReal++ = bb.Position.z;
// normals (actually used as scale / translate info for vertex shader)
*pReal++ = halfXScale;
*pReal++ = halfYScale;
*pReal++ = 3.0f;
// color
*((uint*)pReal++) = bb.Color;
// uv
*pReal++ = (float)((bb.TextCoordIndexU + 1) * mUFactor);
*pReal++ = (float)((bb.TextCoordIndexV + 1) * mVFactor);
//Update bounding box
if (bb.Position.x - halfXScale < minX) minX = bb.Position.x - halfXScale;
if (bb.Position.x + halfXScale > maxX) maxX = bb.Position.x + halfXScale;
if (bb.Position.y - halfYScale < minY) minY = bb.Position.y - halfYScale;
if (bb.Position.y + halfYScale > maxY) maxY = bb.Position.y + halfYScale;
if (bb.Position.z - halfXScale < minZ) minZ = bb.Position.z - halfXScale;
if (bb.Position.z + halfXScale > maxZ) maxZ = bb.Position.z + halfXScale;
}
AxisAlignedBox bounds = new AxisAlignedBox(
new Vector3(minX, minY, minZ),
new Vector3(maxX, maxY, maxZ));
vbuf.Unlock();
mSubMesh.vertexData.vertexBufferBinding.SetBinding(0, vbuf);
//Populate index buffer
mSubMesh.indexData.indexStart = 0;
mSubMesh.indexData.indexCount = 6 * mBillboardBuffer.Count;
mSubMesh.indexData.indexBuffer = HardwareBufferManager.Instance.CreateIndexBuffer(
IndexType.Size16, mSubMesh.indexData.indexCount, BufferUsage.StaticWriteOnly);
ushort* pI = (ushort*)mSubMesh.indexData.indexBuffer.Lock(BufferLocking.Discard);
for (ushort i = 0; i < mBillboardBuffer.Count; i++)
{
ushort ofset = (ushort)(i * 4);
*pI++ = (ushort)(0 + ofset);
*pI++ = (ushort)(2 + ofset);
*pI++ = (ushort)(1 + ofset);
*pI++ = (ushort)(1 + ofset);
*pI++ = (ushort)(2 + ofset);
*pI++ = (ushort)(3 + ofset);
}
mSubMesh.indexData.indexBuffer.Unlock();
//Finish up mesh
mMesh.BoundingBox = bounds;
Vector3 tmp = bounds.Maximum - bounds.Minimum;
mMesh.BoundingSphereRadius = tmp.Length * 0.5f;
LoggingLevel lvl = LogManager.Instance.LogDetail;
LogManager.Instance.LogDetail = LoggingLevel.Low;
mMesh.Load();
LogManager.Instance.LogDetail = lvl;
//Empty the billboardBuffer now, because all billboards have been built
mBillboardBuffer.Clear();
//Create an entity for the mesh
mEntity = mSceneMgr.CreateEntity(mEntityName, mMesh.Name);
mEntity.CastShadows = false;
//Apply texture
if (mFadeEnabled)
{
Debug.Assert(mFadeMaterial != null);
mEntity.MaterialName = mFadeMaterial.Name;
}
else
{
Debug.Assert(mMaterial != null);
mEntity.MaterialName = mMaterial.Name;
}
//Add to scene
mNode.AttachObject(mEntity);
mEntity.IsVisible = mVisible;
}
}
}