void UnplacedSphere::GetParametersList(int, double* aArray)const { aArray[0] = GetInnerRadius(); aArray[1] = GetOuterRadius(); aArray[2] = GetStartPhiAngle(); aArray[3] = GetDeltaPhiAngle(); aArray[4] = GetStartThetaAngle(); aArray[5] = GetDeltaThetaAngle(); }
DevicePtr<cuda::VUnplacedVolume> UnplacedSphere::CopyToGpu( DevicePtr<cuda::VUnplacedVolume> const in_gpu_ptr) const { return CopyToGpuImpl<UnplacedSphere>(in_gpu_ptr, GetInnerRadius(), GetOuterRadius(), GetStartPhiAngle(), GetDeltaPhiAngle(), GetStartThetaAngle(),GetDeltaThetaAngle()); }
//VECGEOM_CUDA_HEADER_BOTH void UnplacedSphere::Print(std::ostream &os) const { os << "UnplacedSphere { " << GetInnerRadius() <<" " << GetOuterRadius() <<" " << GetStartPhiAngle() <<" " << GetDeltaPhiAngle() <<" " << GetStartThetaAngle() <<" " << GetDeltaThetaAngle() <<" }"; }
VECGEOM_CUDA_HEADER_BOTH void UnplacedSphere::Print() const { printf("UnplacedSphere {%.2f , %.2f , %.2f , %.2f , %.2f , %.2f}",GetInnerRadius(),GetOuterRadius(), GetStartPhiAngle(), GetDeltaPhiAngle(), GetStartThetaAngle(), GetDeltaThetaAngle() ); }
void r3dLight :: SetShaderConstants(r3dCamera &Cam) { const int MAX_CONSTANTS = 10; const int COLOR_INDEX = 1; D3DXVECTOR4 vColor; vColor = D3DXVECTOR4( (R/255.0f), (G/255.0f), (B/255.0f), 1 ); vColor.x = powf( vColor.x, 2.2f ) ; vColor.y = powf( vColor.y, 2.2f ) ; vColor.z = powf( vColor.z, 2.2f ) ; vColor = vColor * Intensity; // Common params D3DXVECTOR4 vConsts[ MAX_CONSTANTS ] = { D3DXVECTOR4( Cam.X, Cam.Y, Cam.Z, 0 ), D3DXVECTOR4( vColor ) }; int NUM_CONSTANTS = 2; float invFadeDistance = 1.0f / (GetOuterRadius() - GetInnerRadius()); switch (Type) { case R3D_DIRECT_LIGHT: { r3dColor Amb = r3dRenderer->AmbientColor; r3d_assert( NUM_CONSTANTS == 2 ); // float4 vAmbientColor : register(c2); D3DXVECTOR4 amb ( Amb.R/255.0f, Amb.G/255.0f, Amb.B/255.0f, 1.0f ) ; amb.x = powf( amb.x, 2.2f ) ; amb.y = powf( amb.y, 2.2f ) ; amb.z = powf( amb.z, 2.2f ) ; vConsts[ NUM_CONSTANTS ++ ] = amb ; } break; case R3D_OMNI_LIGHT: { r3d_assert( NUM_CONSTANTS == 2 ); // float4 vLightPos: register(c2); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( X, Y, Z, 0 ); // float4 vLightDistanceParams: register(c3); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4(invFadeDistance, GetInnerRadius() * invFadeDistance, 0, 0); } break; case R3D_SPOT_LIGHT: { Direction.Normalize(); float spotAngleOuter = SpotAngleOuter; float spotAngleInner = R3D_MIN( SpotAngleInner, SpotAngleOuter - 0.33f ); float cosInner = cosf( R3D_DEG2RAD( spotAngleInner ) ); float cosOuter = cosf ( R3D_DEG2RAD( spotAngleOuter ) ); float fallofX = 1.f / ( cosInner - cosOuter ); float fallofY = - cosOuter * fallofX; r3d_assert( NUM_CONSTANTS == 2 ); // float4 vLightPos_RcpRad : register(c2); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( X, Y, Z, 0 ); // float3 vLightDir : register(c3); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( Direction.x, Direction.y, Direction.z, 0 ); // float4 vLightFalloff : register(c4); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( fallofX, fallofY, SpotAngleFalloffPow, 0 ); // float4 vLightDistanceParams : register(c5); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4(invFadeDistance, GetInnerRadius() * invFadeDistance, 0, 0);; } break; case R3D_TUBE_LIGHT: { r3d_assert( NUM_CONSTANTS == 2 ); // float4 vLightDistanceParams: register(c2); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( 0.5f * 0.03125f * Radius2 * Radius2 * Radius2 * Radius2 / Length , 0.5f * Length , 0, 0 ); // float4x3 mLightMtx : register(c3); D3DXMATRIX lightMtx ; GetTubeLightMatrix( &lightMtx ) ; D3DXMatrixTranspose( &lightMtx, &lightMtx ) ; vConsts[ NUM_CONSTANTS ++ ] = *(D3DXVECTOR4*)lightMtx.m[0] ; vConsts[ NUM_CONSTANTS ++ ] = *(D3DXVECTOR4*)lightMtx.m[1] ; vConsts[ NUM_CONSTANTS ++ ] = *(D3DXVECTOR4*)lightMtx.m[2] ; vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( X, Y, Z, 1 ) ; } break ; case R3D_PLANE_LIGHT: { r3d_assert( NUM_CONSTANTS == 2 ); // float4 vLightDistanceParams: register(c2); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( -1.f / Radius2 , 1.f, 0.5f * Length, 0.5f * Width ); // float4x3 mLightMtx : register(c3); D3DXMATRIX lightMtx ; GetTubeLightMatrix( &lightMtx ) ; D3DXMatrixTranspose( &lightMtx, &lightMtx ) ; vConsts[ NUM_CONSTANTS ++ ] = *(D3DXVECTOR4*)lightMtx.m[0] ; vConsts[ NUM_CONSTANTS ++ ] = *(D3DXVECTOR4*)lightMtx.m[1] ; vConsts[ NUM_CONSTANTS ++ ] = *(D3DXVECTOR4*)lightMtx.m[2] ; vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( X, Y, Z, 1 ) ; vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( bDoubleSided ? 0.f : FLT_MAX, 0.f, 0.f, 0.f ); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( 0.f, 0.f, 0.f, 0.f ); } break ; case R3D_VOLUME_LIGHT: { vConsts[COLOR_INDEX] = D3DXVECTOR4( (R/255.0f), (G/255.0f), (B/255.0f), Intensity ); r3d_assert( NUM_CONSTANTS == 2 ); float DepthZ = r3dRenderer->FarClip * 0.9375f; // float4 vLightPos: register(c2); vConsts[ NUM_CONSTANTS ++ ] = D3DXVECTOR4( X, Y, Z, 1.0f / DepthZ ); } break; case R3D_PROJECTOR_LIGHT: r3d_assert( false && "not implemented" ); #if 0 LightVec = D3DXVECTOR4(X,Y,Z,0); r3dRenderer->pd3ddev->SetVertexShaderConstantF( 15, (float *)&LightVec, 1 ); r3dRenderer->pd3ddev->SetPixelShaderConstantF( 4, (float *)&LightVec, 1 ); Direction.Normalize(); LightVec = D3DXVECTOR4(Direction.X,Direction.Y,Direction.Z,0); r3dVector vTo = r3dPoint3D(X,Y,Z) + Direction *100.0f; r3dRenderer->pd3ddev->SetPixelShaderConstantF( 5, (float *)&LightVec, 1 ); r3dRenderer->pd3ddev->SetVertexShaderConstantF( 16, (float *)&LightVec, 1 ); r3dRenderer->SetTex(ProjectMap,3); r3dRenderer->pd3ddev->SetSamplerState( 3, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP ); r3dRenderer->pd3ddev->SetSamplerState( 3, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP ); SetupProjectiveTransform(D3DXVECTOR3(X,Y,Z),D3DXVECTOR3(vTo.x,vTo.y, vTo.Z), SpotAngle); break; #endif } r3d_assert( NUM_CONSTANTS < MAX_CONSTANTS ); r3dRenderer->pd3ddev->SetPixelShaderConstantF( 0, (float *)vConsts, NUM_CONSTANTS ); }