Light?

Started by
2 comments, last by marcalva 21 years, 10 months ago
Hi! I''m trying to create a light, but I can''t. could somebody help me? ************************ procedure TForm1.DXDrawInitializeSurface(Sender: TObject); var View : TD3DViewport7; Material : TD3DMaterial7; Proyeccion : TD3DMatrix; Camara : TD3DMatrix; Normal : TD3DVector; Luz : TD3DLight7; begin // Crea el viewport. FillChar (View, SizeOf (View), 0); View.dwX := 0; View.dwY := 0; View.dwWidth := DXDraw.SurfaceWidth; View.dwHeight := DXDraw.SurfaceHeight; View.dvMinZ := 0.0; View.dvMaxZ := 1.0; DXDraw.D3DDevice7.SetViewport (View); // Crea el material. { FillChar (Material, SizeOf (Material), 0); Material.ambient.r := 1.0; Material.ambient.g := 1.0; Material.ambient.b := 1.0; Material.diffuse.r := 1.0; Material.diffuse.g := 1.0; Material.diffuse.b := 1.0; DXDraw.D3DDevice7.SetMaterial (Material); DXDraw.D3DDevice7.SetRenderState (D3DRENDERSTATE_AMBIENT, $ffffffff);} // Crea la luz. FillChar (Luz, SizeOf (Luz), 0); Luz.dltType := D3DLIGHT_DIRECTIONAL; Luz.dcvAmbient.r := 1.0; Luz.dcvAmbient.g := 1.0; Luz.dcvAmbient.b := 1.0; { Luz.dcvDiffuse.r := 1.0; Luz.dcvDiffuse.g := 1.0; Luz.dcvDiffuse.b := 1.0; Luz.dcvSpecular.r := 1.0; Luz.dcvSpecular.g := 1.0; Luz.dcvSpecular.b := 1.0;} Luz.dvPosition := MakeD3DVector (0, 0, -5); Luz.dvDirection := MakeD3DVector (0, 0, 0); Luz.dvRange := 10; // Luz.dvFalloff := 10; Luz.dvPhi := Pi/4; DXDraw.D3DDevice7.SetLight (0, Luz); DXDraw.D3DDevice7.SetRenderState (D3DRENDERSTATE_LIGHTING, Cardinal (True)); // Crea la matriz de proyeccion. FillChar (Proyeccion, SizeOf (Proyeccion), 0); Proyeccion._11 := 2.0; Proyeccion._22 := 2.0; Proyeccion._33 := 1.0; Proyeccion._34 := 1.0; Proyeccion._43 := -1.0; DXDraw.D3DDevice7.SetTransform (D3DTRANSFORMSTATE_PROJECTION, Proyeccion); // Coloca la camara. FillChar (Camara, SizeOf (Camara), 0); Camara._11 := 1.0; Camara._22 := cos (-0.5); Camara._23 := sin (-0.5); Camara._32 := -sin (-0.5); Camara._33 := cos (-0.5); Camara._43 := 3.0; Camara._44 := 1.0; DXDraw.D3DDevice7.SetTransform (D3DTRANSFORMSTATE_VIEW, Camara); // Crea el cuadro. Normal := MakeD3DVector (0.0, 0.0, -1.0); Cuadro [0] := MakeD3DVertex (MakeD3DVector (-1.0, 1.0, 0.0), Normal, 0.0, 0.0); Cuadro [1] := MakeD3DVertex (MakeD3DVector ( 1.0, 1.0, 0.0), Normal, 0.0, 1.0); Cuadro [2] := MakeD3DVertex (MakeD3DVector (-1.0, -1.0, 0.0), Normal, 1.0, 0.0); Cuadro [3] := MakeD3DVertex (MakeD3DVector ( 1.0, -1.0, 0.0), Normal, 1.0, 1.0); // Activa el reloj. DXTimer.Enabled := True; end;
Advertisement
Uhh... You may be forgetting to enable the light itself. In C++, the call is:
IDirect3DDevice8::LightEnable(DWORD LightIndex, BOOL bEnable);
Hope this helps.
Thanks! Now it works!
Thanks! Now it works!

This topic is closed to new replies.

Advertisement