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

ui3d.py (6935B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\ui3d.py
      2 import logging
      3 import trinity
      4 import geo2
      5 from carbonui.primitives.desktop import UIRoot
      6 from carbonui.uicore import uicore
      7 logger = logging.getLogger(__name__)
      8 
      9 class InSceneContainer(UIRoot):
     10     __guid__ = 'ui3d.InSceneContainer'
     11     TRACKTYPE_BALL = 1
     12     TRACKTYPE_TRANSFORM = 2
     13     default_trackType = TRACKTYPE_BALL
     14     default_faceCamera = False
     15 
     16     def __init__(self, *args, **kwargs):
     17         trinity.device.RegisterResource(self)
     18         self.renderScene = kwargs['scene']
     19         self.sceneParent = kwargs.get('sceneParent', self.renderScene.objects)
     20         self._camera = kwargs.get('camera', None)
     21         self.trackType = kwargs.get('trackType', self.default_trackType)
     22         self.initialized = False
     23         self.sceneManager = sm.GetService('sceneManager')
     24         self.name = kwargs['name']
     25         self.faceCamera = kwargs.get('faceCamera', self.default_faceCamera)
     26         self.parentTransform = kwargs.get('parentTransform', None)
     27         try:
     28             super(InSceneContainer, self).__init__(**kwargs)
     29             self.Create3DRender()
     30             uicore.uilib.AddRootObject(self)
     31             self.initialized = True
     32         except Exception as e:
     33             logger.exception(e)
     34         finally:
     35             if not self.initialized:
     36                 self.Close()
     37 
     38     def Create3DRender(self):
     39         self.renderTexture = trinity.TriTextureParameter()
     40         self.renderTexture.name = 'DiffuseMap'
     41         self.renderColor = trinity.Tr2Vector4Parameter()
     42         self.renderColor.name = 'DiffuseColor'
     43         self.renderColor.value = (1, 1, 1, 1)
     44         self.renderEffect = trinity.Tr2Effect()
     45         self.renderEffect.options.append(('DEPTH_MAP_OCCLUSION', 'DEPTH_MAP_OCCLUSION_YES'))
     46         self.renderEffect.effectFilePath = 'res:/Graphics/Effect/Managed/Space/SpecialFX/TextureColor.fx'
     47         self.renderEffect.resources.append(self.renderTexture)
     48         self.renderEffect.parameters.append(self.renderColor)
     49         self.renderArea = trinity.Tr2MeshArea()
     50         self.renderArea.effect = self.renderEffect
     51         self.renderMesh = trinity.Tr2Mesh()
     52         self.renderMesh.name = 'orbitalBombardmentTarget'
     53         self.renderMesh.geometryResPath = 'res:/Graphics/Generic/UnitPlane/UnitPlane.gr2'
     54         self.renderMesh.transparentAreas.append(self.renderArea)
     55         if self.trackType == self.TRACKTYPE_BALL:
     56             self.transform = trinity.EveRootTransform()
     57         else:
     58             self.transform = trinity.EveTransform()
     59         if self.faceCamera:
     60             self.transform.modifier = 1
     61         self.transform.mesh = self.renderMesh
     62         if self.parentTransform:
     63             self.parentTransform.children.append(self.transform)
     64         else:
     65             self.sceneParent.append(self.transform)
     66         self.transform.name = self.name
     67         self.renderJob = trinity.CreateRenderJob()
     68         self.renderJob.Update(self.renderObject)
     69         self.renderObject = self.GetRenderObject()
     70         self.renderObject.is2dPick = False
     71         self.create_render_target()
     72         self.renderJob.PushRenderTarget(self.renderTarget)
     73         self.renderJob.RenderScene(self.renderObject)
     74         self.renderJob.PopRenderTarget()
     75         self.renderJob.ScheduleRecurring(insertFront=True)
     76         self.renderTexture.SetResource(trinity.TriTextureRes(self.renderTarget))
     77         self.disable_render_steps()
     78 
     79     def create_render_target(self):
     80         self.renderTarget = trinity.Tr2RenderTarget(self.width, self.height, 1, trinity.PIXEL_FORMAT.B8G8R8A8_UNORM)
     81 
     82     def disable_render_steps(self):
     83         self.renderSteps[-1].enabled = False
     84 
     85     def Close(self):
     86         if getattr(self, 'renderJob', None) is not None:
     87             self.renderJob.UnscheduleRecurring()
     88         if getattr(self, 'transform', None) is not None and getattr(self, 'renderScene', None) is not None:
     89             if self.transform in self.sceneParent:
     90                 self.sceneParent.remove(self.transform)
     91         UIRoot.Close(self)
     92         uicore.uilib.RemoveRootObject(self)
     93 
     94     def OnInvalidate(self, device):
     95         pass
     96 
     97     def OnCreate(self, level):
     98         self.renderTexture.SetResource(trinity.TriTextureRes(self.renderTarget))
     99 
    100     def PickObject(self, x, y):
    101         if self.sceneManager.GetActiveScene() != self.renderScene:
    102             return
    103         rescale = 1.0 / 10000.0
    104         projection = trinity.TriProjection()
    105         projection.PerspectiveFov(trinity.GetFieldOfView(), trinity.GetAspectRatio(), trinity.GetFrontClip(), trinity.GetBackClip())
    106         view = trinity.TriView()
    107         view.transform = trinity.GetViewTransform()
    108         scaling, rotation, translation = geo2.MatrixDecompose(self.transform.worldTransform)
    109         pZ = geo2.Vec3Transform((0, 0, 1), self.transform.worldTransform)
    110         surfaceNormal = geo2.Subtract(pZ, translation)
    111         cameraZ = geo2.Vector(view.transform[0][2], view.transform[1][2], view.transform[2][2])
    112         if geo2.Vec3Dot(surfaceNormal, cameraZ) < 0:
    113             return
    114         self.renderObject.translation = geo2.Vec3Scale(translation, rescale)
    115         self.renderObject.rotation = rotation
    116         self.renderObject.scaling = geo2.Vec3Scale(scaling, rescale)
    117         scaling, rotation, translation = geo2.MatrixDecompose(view.transform)
    118         translation = geo2.Vec3Scale(translation, rescale)
    119         view.transform = geo2.MatrixTransformation(None, None, scaling, None, rotation, translation)
    120         return self.renderObject.PickObject(x, y, projection, view, trinity.device.viewport)
    121 
    122     def _GetColor(self):
    123         return self.renderColor.value
    124 
    125     def _SetColor(self, value):
    126         self.renderColor.value = value
    127 
    128     color = property(_GetColor, _SetColor)
    129 
    130     def _GetRed(self):
    131         return self.renderColor.value[0]
    132 
    133     def _SetRed(self, value):
    134         self.renderColor.value = (value,
    135          self.renderColor.value[1],
    136          self.renderColor.value[2],
    137          self.renderColor.value[3])
    138 
    139     red = property(_GetRed, _SetRed)
    140 
    141     def _GetBlue(self):
    142         return self.renderColor.value[1]
    143 
    144     def _SetBlue(self, value):
    145         self.renderColor.value = (self.renderColor.value[0],
    146          value,
    147          self.renderColor.value[2],
    148          self.renderColor.value[3])
    149 
    150     blue = property(_GetBlue, _SetBlue)
    151 
    152     def _GetGreen(self):
    153         return self.renderColor.value[2]
    154 
    155     def _SetGreen(self, value):
    156         self.renderColor.value = (self.renderColor.value[0],
    157          self.renderColor.value[1],
    158          value,
    159          self.renderColor.value[3])
    160 
    161     green = property(_GetGreen, _SetGreen)
    162 
    163     def _GetAlpha(self):
    164         return self.renderColor.value[3]
    165 
    166     def _SetAlpha(self, value):
    167         self.renderColor.value = (self.renderColor.value[0],
    168          self.renderColor.value[1],
    169          self.renderColor.value[2],
    170          value)
    171 
    172     alpha = property(_GetAlpha, _SetAlpha)