After experimenting with these routines i seem to have a little problem. I'm trying to add normal to two different faces, but they both are coming up with the same result.
So only one of the faces is getting the lighting effects. The one face does seem to be working correctly though. Its just that i can't get the other faces to work right.
Code: Select all
;***********************************************
;PRESS ESCAPE TO EXIT PROGRAM
;***********************************************
Global x,y,z
Procedure CalculateNormalFace(x1,y1,z1,x2,y2,z2,x3,y3,z3)
Norm_x1 = (y1 - y2) * (z2 - z3) - (z1 - z2) * (y2 - y3)
Norm_y1 = (z1 - z2) * (x2 - x3) - (x1 - x2) * (z2 - z3)
Norm_z1 = (x1 - x2) * (y2 - y3) - (y1 - y2) * (x2 - x3)
Length = Sqr((Norm_x1*Norm_x1) + (Norm_y1*Norm_y1) + (Norm_z1*Norm_z1))
If Length = 0 : Length = 1 : EndIf
x=Norm_x1 / Length
y=Norm_y1 / Length
z=Norm_z1 / Length
Debug x
Debug y
Debug z
EndProcedure
ExamineDesktops()
InitKeyboard()
InitMouse()
DeskWid=DesktopWidth(0)
DeskHei=DesktopHeight(0)
#CameraRotateSpeed=2
#CameraArrowSpeed=5
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, 0, 400)
; 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) ;0
AddMeshVertex(203,176,50) ;1
AddMeshVertex(203,-166,50) ;2
AddMeshVertex(-210,-166,50) ;3
AddMeshVertex(-210,176,-50) ;4
AddMeshVertex(203,176,-50) ;5
AddMeshVertex(203,-166,-50) ;6
AddMeshVertex(-210,-166,-50) ;7
;***********************************************************************************************************FIRST FACE*****************
AddMeshFace(0,2,1)
CalculateNormalFace(-210,176,50,203,176,50,203,-166,50)
MeshVertexNormal(x,y,z)
;***********************************************************************************************************SECOND FACE*************
AddMeshFace(4,5,6)
CalculateNormalFace(-210,176,-50,203,176,-50,203,-166,-50)
MeshVertexNormal(x,y,z)
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
;NormalizeMesh(0)
CreateEntity(1, MeshID(0), MaterialID(2))
EndIf
Repeat
Event = WaitWindowEvent(0)
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up);**********************Edits the variables for the camera to Zoom in
KeyZ = -#CameraArrowSpeed
ElseIf KeyboardPushed(#PB_Key_Down);**********************Edits the variables for the camera to Zoom out
KeyZ = #CameraArrowSpeed
Else
KeyZ = 0
EndIf
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
MoveCamera(0, KeyX, 0, KeyZ)
RenderWorld()
FlipBuffers()
Delay(10)
Until KeyboardPushed(#PB_Key_Escape)
EndIf
EndIf
End