private void RenderPartialMesh(MeshRenderMode renderMode, SurfaceModelMesh model, MaterialInfo material) { if (renderMode == MeshRenderMode.Wireframe && model.IsSelected) { //in wireframe mode, disable depth and color mask //but still write in stencil mask, this is needed for drawing the selection outline correctly GL.ColorMask(false, false, false, false); GL.DepthMask(false); } if (renderMode != MeshRenderMode.Wireframe || model.IsSelected) { DrawSolidModel(model, material); } if (model.IsSelected) { RenderHelper.DisableStencilMask(); } if (renderMode == MeshRenderMode.Wireframe && model.IsSelected) { GL.ColorMask(true, true, true, true); GL.DepthMask(true); } if (renderMode == MeshRenderMode.Wireframe || renderMode == MeshRenderMode.SolidWireframe) { var wireColor = model.IsSelected && renderMode == MeshRenderMode.SolidWireframe ? RenderHelper.WireframeColorAlt : RenderHelper.WireframeColor; DrawWireframeModel(model, wireColor, 1f); } }
public override void RenderModel(Camera camera, MeshRenderMode mode = MeshRenderMode.Solid) { RenderHelper.ModelShader.Use(); RenderHelper.ModelShader.UseTexture.Set(mode != MeshRenderMode.Wireframe && Surface.SurfaceID > 0); RenderHelper.RenderWithStencil(IsSelected, () => { RenderPartialMesh(mode, this, SurfaceModel.Material); }, () => { DrawWireframeModel(RenderHelper.SelectionOutlineColor, 4f); } ); if (IsSelected && !BoundingBox.IsEmpty) { var selectionBox = BoundingBox; selectionBox.Size += new Vector3(0.1f); RenderHelper.DrawBoundingBox(Transform, selectionBox, new Vector4(0f, 1f, 1f, 1f), 1.5f); } if (Surface.SurfaceID > 0) { RenderHelper.ModelShader.Use(); RenderHelper.ModelShader.UseTexture.Set(false); } }
/// <summary> /// Set the render mode to the next in enum; /// </summary> public void SetNextRendereMode() { RenderMode = (MeshRenderMode)((int)(RenderMode + 1) % _renderModeCount); // Clear existing meshes to process the new mesh type. switch (RenderMode) { case MeshRenderMode.Wireframe: case MeshRenderMode.Occlusion: case MeshRenderMode.None: { _meshingBehavior.MeshType = MLMeshingBehavior.MeshingType.Triangles; break; } case MeshRenderMode.PointCloud: { _meshingBehavior.MeshType = MLMeshingBehavior.MeshingType.PointCloud; break; } default: break; } foreach (MeshRenderer renderer in _meshingBehavior.MeshParent.GetComponentsInChildren <MeshRenderer>()) { if (renderer.gameObject.name.StartsWith("Mesh")) { UpdateRenderer(renderer); } } }
public void Render(Camera camera, MeshRenderMode renderMode) { var visibleMeshes = MeshModels.Where(x => x.Visible) .OrderByDescending(x => x.IsSelected).ToList(); if (!visibleMeshes.Any()) { return; } RenderHelper.ModelShader.Use(); RenderHelper.ModelShader.UseTexture.Set(renderMode != MeshRenderMode.Wireframe && Surface.SurfaceID > 0); bool useOutlineStencil = visibleMeshes.Any(x => x.IsSelected); if (useOutlineStencil) { RenderHelper.EnableStencilTest(); } foreach (var model in visibleMeshes) { if (model.IsSelected && !useOutlineStencil) { } RenderHelper.RenderWithStencil(model.IsSelected, () => { RenderPartialMesh(renderMode, model, Material); }, () => { DrawWireframeModel(model, RenderHelper.SelectionOutlineColor, 4f); } ); if (useOutlineStencil) { RenderHelper.ClearStencil(); } } if (useOutlineStencil) { RenderHelper.DisableStencilTest(); } //Draw selected models bounding boxes foreach (var model in visibleMeshes) { if (model.IsSelected) { var selectionBox = model.BoundingBox; selectionBox.Size += new Vector3(0.1f); RenderHelper.DrawBoundingBox(model.Transform, selectionBox, new Vector4(0f, 1f, 1f, 1f), 1.5f); } } }
public void RenderTransformed(Matrix4 transform, Camera camera, MeshRenderMode mode = MeshRenderMode.Solid) { var currentTransform = Transform; SetTransform(transform, false); RenderModel(camera, mode); SetTransform(currentTransform, false); }
public override void RenderModel(Camera camera, MeshRenderMode mode = MeshRenderMode.Solid) { RenderHelper.GridShader.MVMatrix.Set(camera.GetViewMatrix()); RenderHelper.GridShader.PMatrix.Set(camera.GetProjectionMatrix()); RenderHelper.GridShader.FadeDistance.Set(camera.IsPerspective ? 20f : 0f); GL.DepthMask(false); GL.DepthMask(true); }
public override void RenderModel(Camera camera, MeshRenderMode mode = MeshRenderMode.Solid) { if (CollisionType == CollisionType.Box) { DrawBoxCollision(); } else { DrawSphereCollision(); } }
void OnDrawGizmos() { if (Application.isPlaying) { return; } print("±àÒëɾ³ý"); if (tmp_externt != externt || tmp_mrm != rendermode || !GetComponent <MeshFilter>().sharedMesh) { tmp_externt = externt; tmp_mrm = rendermode; GetComponent <MeshFilter>().sharedMesh = GetMesh(); } }
public override void RenderModel(Camera camera, MeshRenderMode mode = MeshRenderMode.Solid) { if (ClonePattern?.Repetitions > 1) { if (ClonePattern is LinearPattern linearPattern) { float lineLength = (linearPattern.Repetitions - 1) * linearPattern.Offset; //var dir = linearPattern.Direction.ToGL(); RenderHelper.DrawLine(Transform, new Vector4(1f, 1f, 0f, 1f), Vector3.Zero, Vector3.UnitZ * lineLength, 1.5f); } if (ElementModels == null || ElementModels.Count == 0) { return; } foreach (var elem in ClonePattern.Elements) { var elemModel = ElementModels.FirstOrDefault(x => x.Element == elem); if (elemModel != null && elemModel.Visible) { var originalTrans = elemModel.Transform; var baseTransform = ItemTransform.FromMatrix(elemModel.Transform.ToLDD()); bool isSelected = elemModel.IsSelected; for (int i = 1; i < ClonePattern.Repetitions; i++) { if (ClonePattern.SkippedInstances.Contains(i)) { continue; } var trans = ClonePattern.ApplyTransform(baseTransform, i).ToMatrix().ToGL(); //elemModel.SetTransform(trans, false); elemModel.IsSelected = false; elemModel.SetTemporaryTransform(trans); elemModel.RenderModel(camera, mode); elemModel.SetTemporaryTransform(null); } elemModel.IsSelected = isSelected; //elemModel.SetTransform(originalTrans, false); } } } }
public override void RenderModel(Camera camera, MeshRenderMode mode = MeshRenderMode.Solid) { var modelColor = new Vector4(1f, 0.6f, 0.1f, 0.5f); var wireColor = IsSelected ? RenderHelper.SelectionOutlineColor : RenderHelper.WireframeColor; var wireThickness = IsSelected ? 4f : 2f; GL.Disable(EnableCap.CullFace); GL.Disable(EnableCap.DepthTest); ModelManager.SphereModel.DrawOutlined(SphereTransform * Transform, modelColor, wireColor, wireThickness); ModelManager.ConeModel.DrawOutlined(ConeTransform * Transform, modelColor, wireColor, wireThickness); ModelManager.CircleModel.DrawColored(ContourTransform * Transform, wireColor); GL.Enable(EnableCap.DepthTest); GL.Enable(EnableCap.CullFace); if (!BoneBounding.IsEmpty && IsSelected) { RenderHelper.DrawBoundingBox(Transform, BoneBounding, new Vector4(0f, 1f, 1f, 1f), IsSelected ? 1.5f : 1f); } }