protected override void AddTransformedPoint(Vector3 transformedPoint, float u, float v) { if (!_requests.ContainsKey(CurrentTextureID)) { _requests.Add(CurrentTextureID, new List <VertexBufferElement>()); } _requests[CurrentTextureID].Add(VertexBufferElement.New() .Position(transformedPoint) .Color(CurrentColor) .TextureUV(u, v) .Normal(Vector3.Zero) .Build()); }
public VertexBufferObject(int textureID, VertexBufferElement[] vertices, short[] elements) { _disposed = false; EnableStates(); _textureID = textureID; _vertices = vertices; _elements = elements; _stride = BlittableValueType.StrideOf(vertices); LoadData(); }
/// <remarks> /// Based on the algorithm described here: http://www.opengl.org/wiki/Calculating_a_Surface_Normal /// </remarks> private void CalculateNormals(VertexBufferElement[] vertices) { for (var n = 0; n < vertices.Length; n += PointsPerPrimitive) { var i1 = n + 0; var i2 = n + 1; var i3 = n + 2; //var i4 = n + 3; var p1 = vertices[i1].Position; var p2 = vertices[i2].Position; var p3 = vertices[i3].Position; var U = p2 - p1; var V = p3 - p1; var normal = Vector3.Cross(U, V); for (var p = 0; p < PointsPerPrimitive; p++) { vertices[n + p].Normal = normal; } } }