NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)