Ejemplo n.º 1
0
 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());
 }
Ejemplo n.º 2
0
		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;
				}
			}
		}