public override void Extract() { var objectInfoDataHolder = RootRenderFeature.RenderData.GetData(_objectInfoPropertyKey); var blendMatricesDataHolder = RootRenderFeature.RenderData.GetData(_blendMatricesPropertyKey); foreach (var objectNodeReference in RootRenderFeature.ObjectNodeReferences) { var objectNode = RootRenderFeature.GetObjectNode(objectNodeReference); if (!(objectNode.RenderObject is RenderMesh renderMesh)) { continue; } blendMatricesDataHolder[objectNodeReference] = renderMesh.BlendMatrices; // This is for our skinned models. if (!(renderMesh.Source is ModelComponent modelComponent)) { continue; } var objectInfoData = new ObjectInfoData(modelComponent.RenderGroup); objectInfoDataHolder[objectNodeReference] = objectInfoData; #if DEBUG // This is only for debugging purposes, it can be removed. if (_isFirstRun) { System.Diagnostics.Debug.WriteLine($"Entity: {modelComponent.Entity.Name} - renderGrp: {objectInfoData.RenderGroup}"); } #endif } #if DEBUG _isFirstRun = false; #endif }
/// <inheritdoc/> public override void Extract() { var modelObjectInfo = RootRenderFeature.RenderData.GetData(renderObjectInfoKey); foreach (var objectNodeReference in RootRenderFeature.ObjectNodeReferences) { var objectNode = RootRenderFeature.GetObjectNode(objectNodeReference); var renderMesh = objectNode.RenderObject as RenderMesh; if (renderMesh == null) { continue; } int meshIndex = 0; var modelComponent = renderMesh.Source as ModelComponent; if (modelComponent == null) { continue; } for (int i = 0; i < modelComponent.Model.Meshes.Count; i++) { if (modelComponent.Model.Meshes[i] == renderMesh.Mesh) { meshIndex = i; break; } } modelObjectInfo[objectNodeReference] = new PickingObjectInfo(RuntimeIdHelper.ToRuntimeId(modelComponent), meshIndex, renderMesh.Mesh.MaterialIndex); } }
public override void Extract() { var objectInfoDataHolder = RootRenderFeature.RenderData.GetData(_objectInfoPropertyKey); var blendMatricesDataHolder = RootRenderFeature.RenderData.GetData(_blendMatricesPropertyKey); foreach (var objectNodeReference in RootRenderFeature.ObjectNodeReferences) { var objectNode = RootRenderFeature.GetObjectNode(objectNodeReference); if (!(objectNode.RenderObject is RenderMesh renderMesh)) { continue; } blendMatricesDataHolder[objectNodeReference] = renderMesh.BlendMatrices; // This is for our skinned models. int meshIndex = 0; if (!(renderMesh.Source is ModelComponent modelComponent)) { continue; } for (int i = 0; i < modelComponent.Model.Meshes.Count; i++) { if (modelComponent.Model.Meshes[i] == renderMesh.Mesh) { meshIndex = i; break; } } // RuntimeIdHelper.ToRuntimeId is how Stride does it for its 'Picking' scene. // We should probably change this to use something more appropriate for our data. var modelCompId = RuntimeIdHelper.ToRuntimeId(modelComponent); var objectInfoData = new ObjectInfoData((uint)modelCompId, (ushort)meshIndex, (ushort)renderMesh.Mesh.MaterialIndex); objectInfoDataHolder[objectNodeReference] = objectInfoData; #if DEBUG // This is only for debugging purposes, it can be removed. if (_isFirstRun) { System.Diagnostics.Debug.WriteLine($"Entity: {modelComponent.Entity.Name} - modelCompId: {objectInfoData.ModelComponentId} - meshIndex: {objectInfoData.MeshIndex} - matIndex: {objectInfoData.MaterialIndex}"); } #endif } #if DEBUG _isFirstRun = false; #endif }
public override void Extract() { var renderModelObjectInfo = RootRenderFeature.RenderData.GetData(renderModelObjectInfoKey); foreach (var objectNodeReference in RootRenderFeature.ObjectNodeReferences) { var objectNode = RootRenderFeature.GetObjectNode(objectNodeReference); var renderMesh = (RenderMesh)objectNode.RenderObject; Color4 highlightColor; var isHighlighted = MaterialHighlightColors.TryGetValue(renderMesh.MaterialPass.Material, out highlightColor) || MeshHighlightColors.TryGetValue(renderMesh.Mesh, out highlightColor) || MaterialsHighlightedForModel.Contains(renderMesh.MaterialPass.Material) && ModelHighlightColors.TryGetValue(renderMesh.RenderModel.ModelComponent, out highlightColor); renderModelObjectInfo[objectNodeReference] = highlightColor; } }