----------------------------------------------------------------------------
| 176 | |
| 177 | //---------------------------------------------------------------------------- |
| 178 | void vtkAnariLightNode::Synchronize(bool prepass) |
| 179 | { |
| 180 | vtkAnariProfiling startProfiling("vtkAnariLightNode::Synchronize", vtkAnariProfiling::BROWN); |
| 181 | if (!prepass || !LightWasModified()) |
| 182 | { |
| 183 | return; |
| 184 | } |
| 185 | |
| 186 | vtkLight* light = this->GetVtkLight(); |
| 187 | this->RenderTime = light->GetMTime(); |
| 188 | |
| 189 | auto anariDevice = this->Internals->RendererNode->GetDeviceHandle(); |
| 190 | auto vtkRenderer = this->Internals->RendererNode->GetRenderer(); |
| 191 | auto anariExtensions = this->Internals->RendererNode->GetAnariDeviceExtensions(); |
| 192 | |
| 193 | this->ClearLight(); |
| 194 | |
| 195 | vtkOpenGLRenderer* openGLRenderer = |
| 196 | vtkOpenGLRenderer::SafeDownCast(this->Internals->RendererNode->GetRenderable()); |
| 197 | vtkTransform* userLightTransform = openGLRenderer->GetUserLightTransform(); |
| 198 | |
| 199 | vtkNew<vtkMatrix4x4> cameraTransform; |
| 200 | vtkNew<vtkMatrix4x4> invCameraTransform; |
| 201 | |
| 202 | if (userLightTransform) |
| 203 | { |
| 204 | vtkAnariCameraNode* anariCameraNode = static_cast<vtkAnariCameraNode*>( |
| 205 | this->Internals->RendererNode->GetFirstChildOfType("vtkAnariCameraNode")); |
| 206 | vtkCamera* vtkCamera = vtkCamera::SafeDownCast(anariCameraNode->GetRenderable()); |
| 207 | vtkCamera->GetModelViewTransformObject()->GetMatrix(cameraTransform); |
| 208 | vtkMatrix4x4::Invert(cameraTransform, invCameraTransform); |
| 209 | } |
| 210 | |
| 211 | // Light Position |
| 212 | double position[3]; |
| 213 | light->GetPosition(position); |
| 214 | |
| 215 | // Light Direction |
| 216 | double focalPoint[3]; |
| 217 | light->GetFocalPoint(focalPoint); |
| 218 | |
| 219 | if (light->LightTypeIsCameraLight()) |
| 220 | { |
| 221 | light->GetTransformedPosition(position); |
| 222 | light->GetTransformedFocalPoint(focalPoint); |
| 223 | } |
| 224 | |
| 225 | if (!light->LightTypeIsSceneLight() && userLightTransform) |
| 226 | { |
| 227 | cameraTransform->MultiplyPoint(position, position); |
| 228 | userLightTransform->TransformPoint(position, position); |
| 229 | invCameraTransform->MultiplyPoint(position, position); |
| 230 | |
| 231 | cameraTransform->MultiplyPoint(focalPoint, focalPoint); |
| 232 | userLightTransform->TransformPoint(focalPoint, focalPoint); |
| 233 | invCameraTransform->MultiplyPoint(focalPoint, focalPoint); |
| 234 | } |
| 235 |
nothing calls this directly
no test coverage detected