Пример #1
0
 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();
 }
Пример #2
0
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());
}
Пример #3
0
//VECGEOM_CUDA_HEADER_BOTH
void UnplacedSphere::Print(std::ostream &os) const {
  os << "UnplacedSphere { " << GetInnerRadius() <<" " << GetOuterRadius() <<" " << GetStartPhiAngle() <<" " << GetDeltaPhiAngle() <<" "
           << GetStartThetaAngle() <<" " << GetDeltaThetaAngle() <<" }";
}
Пример #4
0
  VECGEOM_CUDA_HEADER_BOTH
void UnplacedSphere::Print() const {
  printf("UnplacedSphere {%.2f , %.2f , %.2f , %.2f , %.2f , %.2f}",GetInnerRadius(),GetOuterRadius(),
                                                          GetStartPhiAngle(), GetDeltaPhiAngle(),
                                                          GetStartThetaAngle(), GetDeltaThetaAngle() );
}
Пример #5
0
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 );

}