WorldShadows

Everything related to 3D programming
User avatar
Samuel
Enthusiast
Enthusiast
Posts: 756
Joined: Sun Jul 29, 2012 10:33 pm
Location: United States

WorldShadows

Post by Samuel »

2 year later EDIT:
Shadows weren't lining up because I didn't have any vertex normals. Entities need to have correct normals in order to render both light and shadow correctly.

Original Post:
When i rotate a entity the shadows don't always line up with the edge perfectly. Not sure if the shadows are just limited or if i forgot a step. I tried changing the distance for the rendering of the shadows, but that didn't seem to change much. Any help would be greatly appreciated.

Code: Select all

;***********************************************
;PRESS ESCAPE TO EXIT PROGRAM
;***********************************************

ExamineDesktops()

  InitKeyboard()
  InitMouse()
  
DeskWid=DesktopWidth(0)
DeskHei=DesktopHeight(0)

#CameraRotateSpeed=2

If OpenWindow(0, 0, 0, DeskWid, DeskHei, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
  If InitEngine3D()
  Else
    MessageRequester("Information", "ERROR///Could not InitEngine3D", 0) 
    End
  EndIf
  If  InitSprite()
  Else
    MessageRequester("Information", "ERROR///Could not InitSprite", 0)     
    End
  EndIf  

 If OpenWindowedScreen(WindowID(0), 0, 0, DeskWid, DeskHei, 0, 0, 0)

   
    CreateTexture(2, 512, 512)
    StartDrawing(TextureOutput(2))
       Box(0, 0, 512, 512 ,RGB(255,100,20))
    StopDrawing()
       
    CreateTexture(1, 512, 512)
    StartDrawing(TextureOutput(1))
       Box(0, 0, 512, 512 ,RGB(150,150,150))
    StopDrawing()
    CreateMaterial(2, TextureID(1))
    
     CreateMaterial(3, TextureID(2))
     MaterialAmbientColor(3, RGB(0,0,0))
     CreatePlane(3, 30000, 30000, 100, 100, 100, 100)
     CreateEntity(3,MeshID(3),MaterialID(3), 0, -1000, 0)
     
     CreateLight(0, RGB(250, 250, 250), 0, 100, 1000)
     WorldShadows(#PB_Shadow_Modulative, 600,RGB(150,150,150))
     
     CreateCamera(0, 0, 0, 100, 100)
     CameraLocate(0, 1250, 0, 100)
     CameraLookAt(0, 0, 0, 0)
     CameraBackColor(0, RGB(155, 155, 155)) 
     
     
If CreateMesh(0)     
AddMeshVertex(-210,176,50)
AddMeshVertex(203,176,50)
AddMeshVertex(203,-166,50)
AddMeshVertex(-210,-166,50)
AddMeshVertex(-210,176,-50)
AddMeshVertex(203,176,-50)
AddMeshVertex(203,-166,-50)
AddMeshVertex(-210,-166,-50)
AddMeshFace(0,2,1)
AddMeshFace(4,5,6)
AddMeshFace(2,3,0)
AddMeshFace(2,0,3)
AddMeshFace(6,7,4)
AddMeshFace(0,1,4)
AddMeshFace(5,4,1)
AddMeshFace(1,2,5)
AddMeshFace(6,5,2)
AddMeshFace(2,3,6)
AddMeshFace(7,6,3)
AddMeshFace(3,0,7)
AddMeshFace(4,7,0)
FinishMesh()

MeshCreated=1 
CreateEntity(1, MeshID(0), MaterialID(2))
EndIf
     
     
 Repeat
      Event = WaitWindowEvent(0) 

      If ExamineKeyboard()
      EndIf
      
      If ExamineMouse()
        MouseX = -(MouseDeltaX()/10)*#CameraRotateSpeed/2
        MouseY = -(MouseDeltaY()/10)*#CameraRotateSpeed/2
      EndIf
      
      If MeshCreated=1 
        MX=MX+MouseX
        MY=MY+MouseY
      RotateEntity(1, MY, MX, RollZ, #PB_Absolute)
      EndIf   

      RenderWorld()
      FlipBuffers()
      Delay(10)
      
  Until KeyboardPushed(#PB_Key_Escape)
 EndIf
EndIf    
End