本文整理汇总了C#中GraphicFactory.CreateVertexBuffer方法的典型用法代码示例。如果您正苦于以下问题:C# GraphicFactory.CreateVertexBuffer方法的具体用法?C# GraphicFactory.CreateVertexBuffer怎么用?C# GraphicFactory.CreateVertexBuffer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GraphicFactory
的用法示例。
在下文中一共展示了GraphicFactory.CreateVertexBuffer方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LoadModel
protected override void LoadModel(GraphicFactory factory, out BatchInformation[][] BatchInformations, out TextureInformation[][] TextureInformations)
{
VertexPositionTexture[] billboardVertices = new VertexPositionTexture[positions.Count * 6];
int i = 0;
foreach (var position in positions)
{
billboardVertices[i++] = new VertexPositionTexture(position, new Vector2(0, 0));
billboardVertices[i++] = new VertexPositionTexture(position, new Vector2(1, 0));
billboardVertices[i++] = new VertexPositionTexture(position, new Vector2(1, 1));
billboardVertices[i++] = new VertexPositionTexture(position, new Vector2(0, 0));
billboardVertices[i++] = new VertexPositionTexture(position, new Vector2(1, 1));
billboardVertices[i++] = new VertexPositionTexture(position, new Vector2(0, 1));
}
VertexBuffer vertexBufferS = factory.CreateVertexBuffer(VertexPositionTexture.VertexDeclaration, billboardVertices.Count(), BufferUsage.WriteOnly);
vertexBufferS.SetData(billboardVertices);
int noVertices = billboardVertices.Count();
int noTriangles = noVertices / 3;
BatchInformations = new BatchInformation[1][];
BatchInformation[] b = new BatchInformation[1];
b[0] = new BatchInformation(0, 0, noTriangles, 0, 0, VertexPositionTexture.VertexDeclaration, VertexPositionTexture.VertexDeclaration.VertexStride, BatchType.NORMAL);
b[0].VertexBuffer = vertexBufferS;
b[0].IndexBuffer = null;
BatchInformations[0] = b;
TextureInformations = new TextureInformation[1][];
TextureInformations[0] = new TextureInformation[1];
TextureInformations[0][0] = new TextureInformation(isInternal, factory, diffuseTextureName, null, null, null);
TextureInformations[0][0].LoadTexture();
}
示例2: LoadModel
protected override void LoadModel(GraphicFactory factory, out BatchInformation[][] BatchInformations, out TextureInformation[][] TextureInformations)
{
List<VertexPositionNormalTexture> vertexList = new List<VertexPositionNormalTexture>();
#if WINDOWS_PHONE || REACH
////gambi shortcut
List<int> indexList2 = new List<int>();
GetVertexData(vertexList, indexList2, terrainObject);
List<short> indexList = new List<short>();
foreach (var item in indexList2)
{
indexList.Add( (short) item);
}
indexList2.Clear();
#else
List<int> indexList = new List<int>();
GetVertexData(vertexList, indexList, terrainObject);
#endif
modelRadius = (terrainObject.BoundingBox.Value.Max - terrainObject.BoundingBox.Value.Max).Length() / 2;
var newVertices = new VertexPositionNormalTexture[vertexList.Count];
vertexList.CopyTo(newVertices);
#if WINDOWS_PHONE|| REACH
var newIndices = new short[indexList.Count];
#else
var newIndices = new int[indexList.Count];
#endif
indexList.CopyTo(newIndices);
VertexBuffer vertexBufferS = factory.CreateVertexBuffer(VertexPositionNormalTexture.VertexDeclaration, newVertices.Count(), BufferUsage.WriteOnly);
vertexBufferS.SetData(newVertices);
#if WINDOWS_PHONE || REACH
IndexBuffer indexBufferS = factory.CreateIndexBuffer(IndexElementSize.SixteenBits,newIndices.Count(),BufferUsage.WriteOnly);
#else
IndexBuffer indexBufferS = factory.CreateIndexBuffer(IndexElementSize.ThirtyTwoBits, newIndices.Count(), BufferUsage.WriteOnly);
#endif
indexBufferS.SetData(newIndices);
BatchInformations = new BatchInformation[1][];
BatchInformation[] b = new BatchInformation[1];
b[0] = new BatchInformation(0, newVertices.Count(), newIndices.Count() / 3, 0, 0, VertexPositionNormalTexture.VertexDeclaration,VertexPositionNormalTexture.VertexDeclaration.VertexStride);
b[0].VertexBuffer = vertexBufferS;
b[0].IndexBuffer = indexBufferS;
b[0].ModelLocalTransformation = Matrix.Identity;
BatchInformations[0] = b;
TextureInformations = new TextureInformation[1][];
TextureInformations[0] = new TextureInformation[1];
TextureInformations[0][0] = new TextureInformation(isInternal, factory, null, null, null, null);
TextureInformations[0][0].LoadTexture();
}
示例3: LoadContent
//.........这里部分代码省略.........
new VertexPositionNormalTexture(
topRightBack, backNormal, textureTopLeft);
cubeVertices[8] =
new VertexPositionNormalTexture(
bottomLeftBack, backNormal, textureBottomRight);
cubeVertices[9] =
new VertexPositionNormalTexture(
bottomLeftBack, backNormal, textureBottomRight);
cubeVertices[10] =
new VertexPositionNormalTexture(
topRightBack, backNormal, textureTopLeft);
cubeVertices[11] =
new VertexPositionNormalTexture(
bottomRightBack, backNormal, textureBottomLeft);
// Top face
cubeVertices[12] =
new VertexPositionNormalTexture(
topLeftFront, topNormal, textureBottomLeft);
cubeVertices[13] =
new VertexPositionNormalTexture(
topRightBack, topNormal, textureTopRight);
cubeVertices[14] =
new VertexPositionNormalTexture(
topLeftBack, topNormal, textureTopLeft);
cubeVertices[15] =
new VertexPositionNormalTexture(
topLeftFront, topNormal, textureBottomLeft);
cubeVertices[16] =
new VertexPositionNormalTexture(
topRightFront, topNormal, textureBottomRight);
cubeVertices[17] =
new VertexPositionNormalTexture(
topRightBack, topNormal, textureTopRight);
// Bottom face
cubeVertices[18] =
new VertexPositionNormalTexture(
bottomLeftFront, bottomNormal, textureTopLeft);
cubeVertices[19] =
new VertexPositionNormalTexture(
bottomLeftBack, bottomNormal, textureBottomLeft);
cubeVertices[20] =
new VertexPositionNormalTexture(
bottomRightBack, bottomNormal, textureBottomRight);
cubeVertices[21] =
new VertexPositionNormalTexture(
bottomLeftFront, bottomNormal, textureTopLeft);
cubeVertices[22] =
new VertexPositionNormalTexture(
bottomRightBack, bottomNormal, textureBottomRight);
cubeVertices[23] =
new VertexPositionNormalTexture(
bottomRightFront, bottomNormal, textureTopRight);
// Left face
cubeVertices[24] =
new VertexPositionNormalTexture(
topLeftFront, leftNormal, textureTopRight);
cubeVertices[25] =
new VertexPositionNormalTexture(
bottomLeftBack, leftNormal, textureBottomLeft);
cubeVertices[26] =
new VertexPositionNormalTexture(
bottomLeftFront, leftNormal, textureBottomRight);
cubeVertices[27] =
new VertexPositionNormalTexture(
topLeftBack, leftNormal, textureTopLeft);
cubeVertices[28] =
new VertexPositionNormalTexture(
bottomLeftBack, leftNormal, textureBottomLeft);
cubeVertices[29] =
new VertexPositionNormalTexture(
topLeftFront, leftNormal, textureTopRight);
// Right face
cubeVertices[30] =
new VertexPositionNormalTexture(
topRightFront, rightNormal, textureTopLeft);
cubeVertices[31] =
new VertexPositionNormalTexture(
bottomRightFront, rightNormal, textureBottomLeft);
cubeVertices[32] =
new VertexPositionNormalTexture(
bottomRightBack, rightNormal, textureBottomRight);
cubeVertices[33] =
new VertexPositionNormalTexture(
topRightBack, rightNormal, textureTopRight);
cubeVertices[34] =
new VertexPositionNormalTexture(
topRightFront, rightNormal, textureTopLeft);
cubeVertices[35] =
new VertexPositionNormalTexture(
bottomRightBack, rightNormal, textureBottomRight);
vertexBuffer = factory.CreateVertexBuffer(VertexPositionNormalTexture.VertexDeclaration,36, BufferUsage.None);
vertexBuffer.SetData<VertexPositionNormalTexture>(cubeVertices);
bi = new BatchInformation(0, 36, 23, 0, 0, VertexPositionNormalTexture.VertexDeclaration, VertexPositionNormalTexture.VertexDeclaration.VertexStride, BatchType.NORMAL);
bi.VertexBuffer = vertexBuffer;
}
示例4: QuadTerrain
/// <summary>
/// Initialises a complete QuadTerrain.
///This is the Constructor method. As you might have guessed, it constructs a quad terrain.
/// Quasar.
/// </summary>
/// <param name="factory">The factory.</param>
/// <param name="heightMap">The Texture2D to use as a heightmap. Must have square dimensions of (2^n)+1, where n is an integer.</param>
/// <param name="squareSize">The edge size of each individual LOD square. Lower values increase CPU Load, decrease GPU Load, and increase Loading times. Must be (2^n)+1, and larger than 5.</param>
/// <param name="vertexBufferSize">The size of Vertex buffer to use. Lower Values increase the number of draw calls by splitting the terrain into several Vertex Buffers. Must be (2^n)+1, and larger than squareSize.</param>
/// <param name="scale">The XZ scale to multiply the terrain by.</param>
/// <param name="height">The Y scale to multiply the terrain by.</param>
public QuadTerrain(GraphicFactory factory ,Texture2D heightMap, int squareSize, int vertexBufferSize, float scale, float height)
{
this.factory = factory;
//I'm not entirely sure what this does, but it is used in updateTerrain.
//I think it is used to prevent the Vertex Buffers being filled during the initialisation UpdateTerrain call.
first = true;
LODHeightImpact = 1.0f;
//Set terrain width and height from heightmap.
terrainHeight = heightMap.Height;
terrainWidth = heightMap.Width;
//Set some obvious public variables
HeightMap = heightMap;
SquareSize = squareSize;
Scale = scale;
HeightScale = height;
VBsize = vertexBufferSize;
//Copy the heightmap from a Texture to an array of colours...
Color[] heightMapColors = new Color[terrainWidth * terrainHeight];
heightMap.GetData(heightMapColors);
//Initialise the HeightStore and
heightStore = new float[heightMap.Width, heightMap.Height];
normStore = new Vector3[heightMap.Width, heightMap.Height];
//this is the Normal texture for the entire terrain. It is used within the shader to prevent normal popup.
normalTexture = factory.CreateTexture2D(heightMap.Width, heightMap.Height, true, SurfaceFormat.Color);
Color[] normalData = new Color[heightMap.Width * heightMap.Height];
#region depricated
/*
int NodeDepth= 0;
int NodeLevel = (int)Math.Pow(2, (NodeDepth));
int NodeScale = ((heightMap.Height - 1) / NodeLevel) + 1;
int stepSize = (NodeScale - 1) / (squareSize - 1);
*/
////////////////////////////////////////////////////
// For:
// SquareSize = 9
// Height = 257
// NodeDepth, NodeLevel, NodeScale, stepSize
// 0, 1, 257, 64
// 1, 2, 129, 32
// 2, 4, 65, 16
// 3, 8, 33, 8
// 4, 16, 19, 4
// 5, 32, 9, 2
// 6, 64, 5, 1
////////////////////////////////////////////////////
//Get node depth:
//int NodeScale = stepSize*(squareSize-1)+1;
//int NodeLevel = (NodeScale - 1) * (heightMap.Height - 1);
//int maxNodeDepth = (int)Math.Log(NodeLevel, 2);
//int maxNodeDepth;
#endregion
//Determine Maximum Node Depth from Square Size and height of heightmap
int NodeScale = 1 * (squareSize - 1) + 1;
int NodeLevel = (heightMap.Height - 1) / (NodeScale - 1);
maxNodeDepth = (int)Math.Log(NodeLevel, 2);
//Work out number of vertex arrays needed:
//Math.Pow(HeightMap.HEIGHT / 512, 2))+1;
numberOfVBs = (int)Math.Pow((terrainHeight - 1) / (VBsize - 1), 2);
sqrtNumberOfVBs = (int)Math.Sqrt(numberOfVBs);
//Initialise the Array of Vertex Arrays, accompanying Array of Vertex Buffers and the Array of Integer Index Arrays.
allVertices = new VertexPosition[numberOfVBs + 1][];
allVBs = new VertexBuffer[numberOfVBs + 1];
allIndices = new int[numberOfVBs + 1][];
//And as if that wasn't confusing enough...
//Now I initialise each Array in the Array of Vertex Arrays, each corresponding Buffer in the Array of Vertex Buffers,
//and each Integer Index Array in the Array of Integer Index Arrays.
for (int i = 0; i < numberOfVBs + 1; i++)
{
allVertices[i] = new VertexPosition[(VBsize + 1) * (VBsize + 1)];
allVBs[i] = factory.CreateVertexBuffer(VertexPosition.VertexDeclaration, (VBsize + 1) * (VBsize + 1), BufferUsage.WriteOnly);
allIndices[i] = new int[VBsize * VBsize * 6];
}
//Array.
//.........这里部分代码省略.........
示例5: LoadModel
/// <summary>
/// Loads the model.
/// </summary>
/// <param name="factory">The factory.</param>
/// <param name="BatchInformations">The batch informations.</param>
/// <param name="TextureInformations">The texture informations.</param>
protected override void LoadModel(GraphicFactory factory, out BatchInformation[][] BatchInformations, out TextureInformation[][] TextureInformations)
{
VertexPositionTexture[] billboardVertices = new VertexPositionTexture[4];
int i = 0;
billboardVertices[i++] = new VertexPositionTexture(Vector3.Zero, new Vector2(0, 0));
billboardVertices[i++] = new VertexPositionTexture(Vector3.Zero, new Vector2(1, 0));
billboardVertices[i++] = new VertexPositionTexture(Vector3.Zero, new Vector2(0, 1));
billboardVertices[i++] = new VertexPositionTexture(Vector3.Zero, new Vector2(1, 1));
VertexElement v0 = new VertexElement(0,VertexElementFormat.Vector3,VertexElementUsage.TextureCoordinate,1);
VertexElement v1 = new VertexElement(sizeof(float) * 3,VertexElementFormat.Vector2,VertexElementUsage.TextureCoordinate,2);
vd = new VertexDeclaration(v0, v1);
VertexBuffer InstancedvertexBufferS;
if (dynamicBufferSize != -1)
{
InstancedvertexBufferS = factory.CreateDynamicVertexBuffer(vd, dynamicBufferSize, BufferUsage.WriteOnly);
}
else
{
InstancedvertexBufferS = factory.CreateDynamicVertexBuffer(vd, instances.Count(), BufferUsage.WriteOnly);
}
InstancedvertexBufferS.SetData(instances);
VertexBuffer vertexBufferS = factory.CreateVertexBuffer(VertexPositionTexture.VertexDeclaration, billboardVertices.Count(), BufferUsage.WriteOnly);
vertexBufferS.SetData(billboardVertices);
short[] indices = new short[] { 0,2,1,1,2,3};
IndexBuffer indexBufferS = factory.CreateIndexBuffer(IndexElementSize.SixteenBits, 6, BufferUsage.WriteOnly);
indexBufferS.SetData<short>(indices);
BatchInformations = new BatchInformation[1][];
BatchInformation[] b = new BatchInformation[1];
b[0] = new BatchInformation(0, 4, 2, 0, 0, VertexPositionTexture.VertexDeclaration, VertexPositionTexture.VertexDeclaration.VertexStride,instances.Count());
b[0].VertexBuffer = vertexBufferS;
b[0].IndexBuffer = indexBufferS;
b[0].InstancedVertexBuffer = InstancedvertexBufferS;
BatchInformations[0] = b;
TextureInformations = new TextureInformation[1][];
TextureInformations[0] = new TextureInformation[1];
TextureInformations[0][0] = new TextureInformation(isInternal, factory, diffuseTextureName, null, null, null);
TextureInformations[0][0].LoadTexture();
}
示例6: LoadModel
protected override void LoadModel(GraphicFactory factory, out BatchInformation[][] BatchInformations, out TextureInformation[][] TextureInformations)
{
Vector3 myPosition = new Vector3(basePosition.X - (myWidth / 2), basePosition.Y, basePosition.Z - (myHeight / 2));
Vector3[] pos = new Vector3[myWidth * myHeight];
// Vertices
VertexMultitextured[] myVertices = new VertexMultitextured[myWidth * myHeight];
for (int x = 0; x < myWidth; x++)
for (int y = 0; y < myHeight; y++)
{
myVertices[x + y * myWidth].Position = new Vector3(y, 0, x);
pos[x + y * myWidth] = new Vector3(y, 0, x);
myVertices[x + y * myWidth].Normal = new Vector3(0, -1, 0);
myVertices[x + y * myWidth].TextureCoordinate.X = (float)x / 30.0f;
myVertices[x + y * myWidth].TextureCoordinate.Y = (float)y / 30.0f;
}
modelRadius = BoundingSphere.CreateFromPoints(pos).Radius;
// Calc Tangent and Bi Normals.
for (int x = 0; x < myWidth; x++)
for (int y = 0; y < myHeight; y++)
{
// Tangent Data.
if (x != 0 && x < myWidth - 1)
myVertices[x + y * myWidth].Tangent = myVertices[x - 1 + y * myWidth].Position - myVertices[x + 1 + y * myWidth].Position;
else
if (x == 0)
myVertices[x + y * myWidth].Tangent = myVertices[x + y * myWidth].Position - myVertices[x + 1 + y * myWidth].Position;
else
myVertices[x + y * myWidth].Tangent = myVertices[x - 1 + y * myWidth].Position - myVertices[x + y * myWidth].Position;
// Bi Normal Data.
if (y != 0 && y < myHeight - 1)
myVertices[x + y * myWidth].BiNormal = myVertices[x + (y - 1) * myWidth].Position - myVertices[x + (y + 1) * myWidth].Position;
else
if (y == 0)
myVertices[x + y * myWidth].BiNormal = myVertices[x + y * myWidth].Position - myVertices[x + (y + 1) * myWidth].Position;
else
myVertices[x + y * myWidth].BiNormal = myVertices[x + (y - 1) * myWidth].Position - myVertices[x + y * myWidth].Position;
}
VertexDeclaration vd = new VertexDeclaration(VertexMultitextured.SizeInBytes,VertexMultitextured.VertexElements);
VertexBuffer vb = factory.CreateVertexBuffer(vd, myWidth * myHeight, BufferUsage.WriteOnly);
vb.SetData(myVertices);
short[] terrainIndices = new short[(myWidth - 1) * (myHeight - 1) * 6];
for (short x = 0; x < myWidth - 1; x++)
{
for (short y = 0; y < myHeight - 1; y++)
{
terrainIndices[(x + y * (myWidth - 1)) * 6] = (short)((x + 1) + (y + 1) * myWidth);
terrainIndices[(x + y * (myWidth - 1)) * 6 + 1] = (short)((x + 1) + y * myWidth);
terrainIndices[(x + y * (myWidth - 1)) * 6 + 2] = (short)(x + y * myWidth);
terrainIndices[(x + y * (myWidth - 1)) * 6 + 3] = (short)((x + 1) + (y + 1) * myWidth);
terrainIndices[(x + y * (myWidth - 1)) * 6 + 4] = (short)(x + y * myWidth);
terrainIndices[(x + y * (myWidth - 1)) * 6 + 5] = (short)(x + (y + 1) * myWidth);
}
}
IndexBuffer ib = factory.CreateIndexBuffer(IndexElementSize.SixteenBits, (myWidth - 1) * (myHeight - 1) * 6, BufferUsage.WriteOnly);
ib.SetData(terrainIndices);
BatchInformations = new BatchInformation[1][];
BatchInformation[] b = new BatchInformation[1];
b[0] = new BatchInformation(0,myVertices.Count(),terrainIndices.Count() /3,0,0,vd,VertexMultitextured.SizeInBytes);
b[0].VertexBuffer = vb;
b[0].IndexBuffer = ib;
BatchInformations[0] = b;
TextureInformations = new TextureInformation[1][];
TextureInformations[0] = new TextureInformation[1];
TextureInformations[0][0] = new TextureInformation(isInternal, factory, null, null, null, null);
TextureInformations[0][0].LoadTexture();
}