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)