renderer_hologram.py (3663B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\iconrendering2\renderers\renderer_hologram.py 2 from __future__ import absolute_import 3 import blue 4 from .renderer_spaceobject import SpaceObjectIconRenderer 5 from .utils_scene import * 6 from iconrendering2.const import Language 7 8 class HologramIconRenderer(SpaceObjectIconRenderer): 9 10 def __init__(self, sofFactory, dna, language = Language.ENGLISH): 11 super(HologramIconRenderer, self).__init__(sofFactory, None, dna, language) 12 13 def __str__(self): 14 return 'Hologram Icon Renderer <%s>' % hex(id(self)) 15 16 def _PrepareRender(self): 17 super(HologramIconRenderer, self)._PrepareRender() 18 ApplyIsisEffect(self._object) 19 20 def _PrepareSceneForRender(self, renderInfo): 21 view = projection = None 22 boundingSphereRadius = self._object.GetBoundingSphereRadius() 23 angle = (-1.5708, 0, 0) 24 if self._object.mesh is not None: 25 geometry = self._object.mesh.geometry 26 boundingSphereCenter = self._object.GetBoundingSphereCenter() 27 view, projection = GetViewAndProjectionUsingMeshGeometry(geometry, scene=self._scene, boundingSphereRadius=boundingSphereRadius, boundingSphereCenter=boundingSphereCenter, cameraAngle=angle) 28 return (view, projection) 29 30 31 def ApplyIsisEffect(ship): 32 if not ship: 33 return 34 isSkinned = getattr(ship, 'isAnimated', False) 35 36 def getIsisEffect(): 37 if isSkinned: 38 isisEffect = blue.resMan.LoadObject('res:/dx9/model/ui/isisEffectSkinned.red') 39 else: 40 isisEffect = blue.resMan.LoadObject('res:/dx9/model/ui/isisEffect.red') 41 blue.resMan.Wait() 42 return isisEffect 43 44 def getNormalMapPath(area): 45 normalMapParam = [ res for res in area.effect.resources if res.name == 'NormalMap' or res.name == 'NoMap' ][0] 46 if normalMapParam is None: 47 return 48 normalMapPath = normalMapParam.resourcePath 49 return normalMapPath 50 51 blue.resMan.Wait() 52 areaCount = ship.mesh.geometry.GetMeshAreaCount(0) 53 del ship.attachments[:] 54 del ship.decals[:] 55 del ship.effectChildren[:] 56 sourceAreas = [] 57 for area in ship.mesh.opaqueAreas: 58 sourceAreas.append(area) 59 60 for area in ship.mesh.transparentAreas: 61 sourceAreas.append(area) 62 63 del ship.mesh.opaqueAreas[:] 64 del ship.mesh.depthAreas[:] 65 del ship.mesh.transparentAreas[:] 66 del ship.mesh.additiveAreas[:] 67 del ship.mesh.decalAreas[:] 68 del ship.mesh.distortionAreas[:] 69 depthArea = trinity.Tr2MeshArea() 70 depthArea.count = areaCount 71 depthArea.effect = trinity.Tr2Effect() 72 paintMaskMap = trinity.TriTextureParameter() 73 paintMaskMap.name = 'PaintMaskMap' 74 paintMaskMap.resourcePath = 'res:/texture/global/black.dds' 75 depthArea.effect.resources.append(paintMaskMap) 76 if isSkinned: 77 depthArea.effect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpaceObject/V5/Skinned_DepthOnlyV5.fx' 78 else: 79 depthArea.effect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpaceObject/V5/DepthOnlyV5.fx' 80 ship.mesh.depthAreas.append(depthArea) 81 for sourceArea in sourceAreas: 82 normalMapPath = getNormalMapPath(sourceArea) 83 if normalMapPath is None: 84 continue 85 area = trinity.Tr2MeshArea() 86 area.index = sourceArea.index 87 area.count = sourceArea.count 88 area.effect = getIsisEffect() 89 normalMap = [ res for res in area.effect.resources if res.name == 'NormalMap' or res.name == 'NoMap' ][0] 90 normalMap.resourcePath = normalMapPath 91 ship.mesh.additiveAreas.append(area)