private static void FixClockwiseness(TrianglesRenderableObject <InputLayouts.VerticePNTG> obj) { for (var i = 2; i < obj.IndicesCount; i += 3) { FixClockwiseness(obj.Vertices, ref obj.Indices[i - 2], ref obj.Indices[i - 1], ref obj.Indices[i]); } }
protected override void DrawOverride(IDeviceContextHolder contextHolder, ICamera camera, SpecialRenderMode mode) { if (mode == SpecialRenderMode.Shadow) { if (_pntgObject == null) { _pntgObject = new TrianglesRenderableObject <InputLayouts.VerticePNTG>("", InputLayouts.VerticePNTG.Convert(OriginalNode.Vertices), Indices); _pntgObject.Draw(contextHolder, camera, SpecialRenderMode.InitializeOnly); _txNormal = contextHolder.Get <INormalsNormalTexturesProvider>().GetTexture(contextHolder, OriginalNode.MaterialId); _txNormalView = _txNormal?.Item1.Resource ?? contextHolder.GetFlatNmTexture(); } if (_materialDepth == null) { return; } _materialDepth.PrepareAo(contextHolder, _txNormalView, _txNormal?.Item2 ?? 1f); _pntgObject.SetBuffers(contextHolder); _materialDepth.SetMatricesAo(ParentMatrix); _materialDepth.DrawAo(contextHolder, Indices.Length); } else { if (mode != SpecialRenderMode.Simple) { return; } if (!_material.Prepare(contextHolder, mode)) { return; } if (_materialDepth != null) { if (!_txAlphaSet) { _txAlphaSet = true; _txAlpha = contextHolder.TryToGet <IAlphaTexturesProvider>()?.GetTexture(contextHolder, OriginalNode.MaterialId); _txAlphaView = _txAlpha?.Item1.Resource; } if (_txAlpha != null) { _materialDepth.PrepareShadow(_txAlphaView, _txAlphaView == null ? -1f : _txAlpha.Item2); } else { _materialDepth.PrepareShadow(null, -1f); } } base.DrawOverride(contextHolder, camera, mode); _material.SetMatrices(ParentMatrix, camera); _material.Draw(contextHolder, Indices.Length, mode); } }
private static bool IsOverlap(Vector2 offset, TrianglesRenderableObject <InputLayouts.VerticePT> obj) { for (var i = 2; i < obj.IndicesCount; i += 3) { if (IsOverlap(offset, obj.Vertices[obj.Indices[i - 2]].Tex, obj.Vertices[obj.Indices[i - 1]].Tex, obj.Vertices[obj.Indices[i]].Tex)) { return(true); } } return(false); }
private static IEnumerable <Vector2> GetOffsets(TrianglesRenderableObject <InputLayouts.VerticePT> obj) { for (var o = new Vector2(-OptionUvProjectMaximumArea); o.X <= OptionUvProjectMaximumArea; o.X++) { for (o.Y = -OptionUvProjectMaximumArea; o.Y <= OptionUvProjectMaximumArea; o.Y++) { if (IsOverlap(o, obj)) { yield return(o); } } } }
public UvProjectedObject(TrianglesRenderableObject <InputLayouts.VerticePT> mesh) { _mesh = mesh; _offsets = GetOffsets(mesh).ToArray(); }