do you want the whole code? or just a part of it?
EDIT:
nevermind. I didn't want to do that but youve asked for it(muhahahaha), here is my very not organized code:
So my need is a function that would be used like that:
spotlight1=createlight(); I guess
positionentity spotlight1,entityx(camera_pivot),entity(camera_pivot),entityz(camera_pivot)
if keyhit(key_r)
shadeterrainacordingtospotlight(terrain1,spotlight1)
end if
or another option is
if keyhit(key_r)
shadeterrainacordingtoposition(terrain1,x,y,z)
end if
so what will come out will be like the function you gave me using line pick on last topic, but it should be much more accurated(the problem with tha function you gave is that it send a linepick to the center of the triangle, but my need is like to send it to every single point on the triangle and even if one is visible then color the triangle(and some why it wasnt accurated and colored some triangle wrong)
EDIT:
nevermind. I didn't want to do that but youve asked for it(muhahahaha), here is my very not organized code:
Graphics3D 1024,768,32,2 SetBuffer BackBuffer() Include "ScanCodes.bb" Include "centermesh.bb" Global touchv# Global jumpv# Global RecievedStr$ Global FFt Global FFx$ Global FFy$ Global FFz$ Global mapcount%=1 Global currentcam=0 ; -- Viewport. Global viewport_center_x = GraphicsWidth () / 2 Global viewport_center_y = GraphicsHeight () / 2 ;^^^^^^ ;UDP Stream Global Mystream=CreateUDPStream(3365) If Not Mystream Then RuntimeError("Couldn't Create Port To Read From") Global msg$="" Global msgdata$="" ; -- User. Global user_movement_speed# = 4.0 ; The user's movement speed. This produces a movement speed of 4 metres per second. Global user_camera_pitch# Global light1=CreateLight() PositionEntity light1,0,0,0 ;^^^^^^ ; -- Timing. Global milli_secs ; Holds the value of the Millisecs() timer. Set at the start of the main loop. Global old_time ; This must be set to the current 'MilliSecs()' time at the start of a new game and when returning from a pause. Global game_time ; This holds a relative game time value which is used with timeouts so that they can be paused. Global Delta_Time# ; Use this as a multiplier for all continuous game world events, to regulate game speed. ;^^^^^^ ;collision groups Global PLAYER = 2 Global ter = 1 ;light Global light = CreateLight() TurnEntity light,45,45,0 ;CAMERA PIVOT Global camera_pivot= CreatePivot() EntityRadius camera_pivot,2,5 EntityType camera_pivot, PLAYER ;User Sphere ball1=CreateCone(32,True,camera_pivot) RotateEntity ball1,0,270,90 ScaleEntity ball1,30,60,30 EntityColor ball1,70,80,190 ;Pyramyd FOV PyFov=CreateCone(32,True,camera_pivot) RotateEntity PyFov,0,90,90 MoveEntity pyfov,0,-300,0 EntityAlpha(pyfov,0.5) ScaleEntity pyfov,700,350,700 ;CAMERA Global camera = CreateCamera(camera_pivot) CameraViewport(camera,0,GraphicsHeight()/2,GraphicsWidth()/2,GraphicsHeight()/2) CameraRange(camera,1,50000) CameraZoom(camera,FovToZoom(90)) ;Camera 2 Global camera2 = CreateCamera() CameraViewport(camera2,GraphicsWidth()/2,GraphicsHeight()/2,GraphicsWidth()/2,GraphicsHeight()/2) PositionEntity camera2,0,300,0 CameraRange(camera2,1,50000) RotateEntity camera2,90,180,180 ;Camera 3 Global camera3 = CreateCamera() CameraViewport(camera3,GraphicsWidth()/2,0,GraphicsWidth()/2,GraphicsHeight()/2) PositionEntity camera3,0,6600,0 CameraRange(camera3,1,100000) RotateEntity camera3,90,180,180 ;CAMERA11 PIVOT Global camera_pivot11= CreatePivot() EntityRadius camera_pivot11,2,50 EntityType camera_pivot11, PLAYER ;CAMERA12 PIVOT Global camera_pivot12= CreatePivot() EntityRadius camera_pivot12,2,50 EntityType camera_pivot12, PLAYER ;CAMERA13 PIVOT Global camera_pivot13= CreatePivot() EntityRadius camera_pivot13,2,50 EntityType camera_pivot13, PLAYER ;CAMERA14 PIVOT Global camera_pivot14= CreatePivot() EntityRadius camera_pivot14,2,50 EntityType camera_pivot14, PLAYER ;Pyramyd FOV11 PyFov11=CreateCone(32,True,camera_pivot11) RotateEntity PyFov11,0,90,90 MoveEntity pyfov11,0,-300,0 EntityAlpha(pyfov11,0.5) ScaleEntity pyfov11,800,400,800 EntityColor(pyfov11,0,255,255) ;Pyramyd FOV12 PyFov12=CreateCone(32,True,camera_pivot12) RotateEntity PyFov12,0,90,90 MoveEntity pyfov12,0,-300,0 EntityAlpha(pyfov12,0.5) ScaleEntity pyfov12,800,400,800 EntityColor(pyfov12,155,100,255) ;Pyramyd FOV13 PyFov13=CreateCone(32,True,camera_pivot13) RotateEntity PyFov13,0,90,90 MoveEntity pyfov13,0,-300,0 EntityAlpha(pyfov13,0.5) ScaleEntity pyfov13,800,400,800 EntityColor(pyfov13,255,255,0) ;Pyramyd FOV14 PyFov14=CreateCone(32,True,camera_pivot14) RotateEntity PyFov14,0,90,90 MoveEntity pyfov14,0,-300,0 EntityAlpha(pyfov14,0.5) ScaleEntity pyfov14,800,400,800 EntityColor(pyfov14,255,0,255) ;Camera 11 Global camera11 = CreateCamera(camera_pivot11) CameraViewport(camera11,0,0,GraphicsWidth()/4,GraphicsHeight()/4) CameraRange(camera11,1,50000) CameraZoom(camera11,FovToZoom(90)) ;Camera 12 Global camera12 = CreateCamera(camera_pivot12) CameraViewport(camera12,GraphicsWidth()/4,0,GraphicsWidth()/4,GraphicsHeight()/4) CameraRange(camera12,1,50000) CameraZoom(camera12,FovToZoom(90)) ;Camera 13 Global camera13 = CreateCamera(camera_pivot13) CameraViewport(camera13,GraphicsWidth()/4,GraphicsHeight()/4,GraphicsWidth()/4,GraphicsHeight()/4) CameraRange(camera13,1,50000) CameraZoom(camera13,FovToZoom(90)) ;Camera 14 Global camera14 = CreateCamera(camera_pivot14) CameraViewport(camera14,0,GraphicsHeight()/4,GraphicsWidth()/4,GraphicsHeight()/4) CameraRange(camera14,1,50000) CameraZoom(camera14,FovToZoom(90)) ;cam11 Sphere ball11=CreateCone(32,True,camera_pivot11) RotateEntity ball11,0,270,90 ScaleEntity ball11,20,40,20 EntityColor ball11,255,0,0 ;cam12 Sphere ball12=CreateCone(32,True,camera_pivot12) RotateEntity ball12,0,270,90 ScaleEntity ball12,20,40,20 EntityColor ball12,255,0,0 ;cam13 Sphere ball13=CreateCone(32,True,camera_pivot13) RotateEntity ball13,0,270,90 ScaleEntity ball13,20,40,20 EntityColor ball13,255,0,0 ;cam14 Sphere ball14=CreateCone(32,True,camera_pivot14) RotateEntity ball14,0,270,90 ScaleEntity ball14,20,40,20 EntityColor ball14,255,0,0 ; Terrain Terrain1 = LoadMesh("israp1p1.3ds") EntityType Terrain1,ter ScaleEntity(terrain1,0.25,1,0.25) Meshcenter(terrain1) tex1=LoadBrush("N31E342.jpg") BrushFX tex1,16 PaintEntity(terrain1,tex1) ;Trees Tree=LoadMesh("tree1.3ds") ScaleEntity tree,5,5,5 HideEntity Tree RndSeed() EntityPickMode(terrain1,2) ;For i=0 To 30 ; x# = Rand(0,MeshWidth(terrain1)) ; z# = Rand(0,MeshDepth(terrain1)) ; x=x-MeshWidth(terrain1)/2 ; z=z-MeshDepth(terrain1)/2 ; LinePick(x#,20000,z#,x#,-40000,z#) ; y#=PickedY() ; tree1=CopyEntity(tree) ; PositionEntity(tree1,x,y,z) ;Next ;Position the cameras PositionEntity camera_pivot11,100,300,0 PositionEntity camera_pivot12,0,300,-100 PositionEntity camera_pivot13,-100,300,0 PositionEntity camera_pivot14,0,300,100 RotateEntity camera_pivot11,30,270,0 RotateEntity camera_pivot12,30,180,0 RotateEntity camera_pivot13,30,90,0 RotateEntity camera_pivot14,30,0,0 Collisions PLAYER,ter,2,3 Color(255,0,0) While Not KeyHit(1) PositionEntity light1,EntityX(camera_pivot),EntityY(camera_pivot),EntityZ(camera_pivot) PositionEntity(camera2,EntityX(camera_pivot),1000,EntityZ(camera_pivot)) If EntityX(camera_pivot)>6800 And mapcount>1 mapcount=mapcount-1 FreeEntity terrain1 Terrain1 = LoadMesh("israp1p" +Str(mapcount) + ".3ds") EntityType Terrain1,ter ScaleEntity(terrain1,0.25,1,0.25) Meshcenter(terrain1) tex1=LoadBrush("N31E342.jpg") BrushFX tex1,16 PaintEntity(terrain1,tex1) End If If EntityX(camera_pivot)<-7250 And mapcount<6 mapcount=mapcount+1 FreeEntity terrain1 Terrain1 = LoadMesh("israp1p" +Str(mapcount) + ".3ds") EntityType Terrain1,ter ScaleEntity(terrain1,0.25,1,0.25) Meshcenter(terrain1) tex1=LoadBrush("N31E342.jpg") BrushFX tex1,16 PaintEntity(terrain1,tex1) End If ReadStream(mystream) If KeyDown(KEY_SPACE) Then jumpv=True If KeyHit(19) Then MESHnormals(Terrain1) resetpolygons(terrain1) TRIScolor(Terrain1,camera_pivot,6500) End If If KeyHit(key_0) currentcam=0 ElseIf KeyHit(key_1) currentcam=1 ElseIf KeyHit(key_2) currentcam=2 ElseIf KeyHit(key_3) currentcam=3 ElseIf KeyHit(key_4) currentcam=4 End If CalculateDeltatimeAndGametime() If currentcam=0 MoveUser(camera_pivot) RotateCams(camera_pivot,2) ElseIf currentcam=1 RotateCams(camera_pivot11,1) ElseIf currentcam=2 RotateCams(camera_pivot12,1) ElseIf currentcam=3 RotateCams(camera_pivot13,1) ElseIf currentcam=4 RotateCams(camera_pivot14,1) End If ;touchground(camera_pivot) If jumpv=True jump(camera_pivot) HideEntity camera2 HideEntity camera3 HideEntity pyfov HideEntity pyfov11 HideEntity pyfov12 HideEntity pyfov13 HideEntity pyfov14 ShowEntity camera11 ShowEntity camera12 ShowEntity camera13 ShowEntity camera14 ShowEntity camera UpdateWorld RenderWorld HideEntity camera HideEntity camera11 HideEntity camera12 HideEntity camera13 HideEntity camera14 ShowEntity pyfov ShowEntity pyfov11 ShowEntity pyfov12 ShowEntity pyfov13 ShowEntity pyfov14 ShowEntity camera2 ShowEntity camera3 RenderWorld ShowEntity camera ShowEntity camera11 ShowEntity camera12 ShowEntity camera13 ShowEntity camera14 Color 255,255,255 Text(0,0,"Cam:1") Text(0,10,"Pitch(X):" + EntityPitch(camera_pivot11)) Text(0,20,"Yaw(Y):" + EntityYaw(camera_pivot11)) Text(GraphicsWidth()/4,0,"Cam:2") Text(GraphicsWidth()/4,10,"Pitch(X):" + EntityPitch(camera_pivot12)) Text(GraphicsWidth()/4,20,"Yaw(Y):" + EntityYaw(camera_pivot12)) Text(GraphicsWidth()/4,GraphicsHeight()/4,"Cam:3") Text(GraphicsWidth()/4,GraphicsHeight()/4+ 10,"Pitch(X):" + EntityPitch(camera_pivot13)) Text(GraphicsWidth()/4,GraphicsHeight()/4+20,"Yaw(Y):" + EntityYaw(camera_pivot13)) Text(0,GraphicsHeight()/4,"Cam:4") Text(0,GraphicsHeight()/4+ 10,"Pitch(X):" + EntityPitch(camera_pivot14)) Text(0,GraphicsHeight()/4+20,"Yaw(Y):" + EntityYaw(camera_pivot14)) CameraProject camera2, EntityX( camera_pivot12 ), EntityY( camera_pivot12 ) , EntityZ( camera_pivot12 ) If (ProjectedX()>0) And (ProjectedY()>0) Then Text GraphicsWidth()/2+ProjectedX(), GraphicsHeight()/2+ProjectedY(), "2" End If CameraProject camera2, EntityX( camera_pivot11 ), EntityY( camera_pivot11 ) , EntityZ( camera_pivot11 ) If (ProjectedX()>0) And (ProjectedY()>0) Then Text GraphicsWidth()/2+ProjectedX(), GraphicsHeight()/2+ProjectedY(), "1" End If CameraProject camera2, EntityX( camera_pivot13 ), EntityY( camera_pivot13 ) , EntityZ( camera_pivot13 ) If (ProjectedX()>0) And (ProjectedY()>0) Then Text GraphicsWidth()/2+ProjectedX(), GraphicsHeight()/2+ProjectedY(), "3" End If CameraProject camera2, EntityX( camera_pivot14 ), EntityY( camera_pivot14 ) , EntityZ( camera_pivot14 ) If (ProjectedX()>0) And (ProjectedY()>0) Then Text GraphicsWidth()/2+ProjectedX(), GraphicsHeight()/2+ProjectedY(), "4" End If Text 500,600,"X:" + EntityX(camera_pivot) + "y:" + EntityY(camera_pivot) + "z:" + EntityZ(camera_pivot) Color 255,0,0 Line(GraphicsWidth()/4,0,GraphicsWidth()/4,GraphicsHeight()/2) Line(0,GraphicsHeight()/4,GraphicsWidth()/2,GraphicsHeight()/4) Line(GraphicsWidth()/2,0,GraphicsWidth()/2,GraphicsHeight()) Line(0,GraphicsHeight()/2,GraphicsWidth(),GraphicsHeight()/2) Flip Wend ;================================== ; ReadStream function ;================================== Function ReadStream(serverstream) msg = RecvUDPMsg(serverstream) If Not msg = 0 MsgData=ReadLine(serverstream) If Not Trim(msgdata)="" RecievedStr=Trim(msgdata) End If End If End Function ;================================== ; RotateCams function ;================================== Function RotateCams(CamPiv,MP) enty=EntityYaw(campiv) entR=EntityRoll(campiv) If KeyDown(key_down) RotateEntity(campiv,EntityPitch(campiv)+2*MP,EntityYaw(campiv),EntityRoll(campiv)) ElseIf KeyDown(key_up) RotateEntity(campiv,EntityPitch(campiv)-2*MP,EntityYaw(campiv),EntityRoll(campiv)) ElseIf KeyDown(KEY_left) RotateEntity(campiv,EntityPitch(campiv),EntityYaw(campiv)+2*MP,EntityRoll(campiv)) ElseIf KeyDown(KEY_right) RotateEntity(campiv,EntityPitch(campiv),EntityYaw(campiv)-2*MP,EntityRoll(campiv)) End If If EntityPitch(campiv)>90-2*mp Then RotateEntity(campiv,90-2*mp,enty,entR) If EntityPitch(campiv)<-(90-2*mp) Then RotateEntity(campiv,-(90-2*mp),enty,entR) End Function ;================================== ; touchGround function ;================================== Function touchground(n$) If Not EntityCollided(n$,ter) touchv=touchv-0.5 MoveEntity (n$,0,touchv,0) Else touchv=0 End If End Function ;================================== ; Jump function ;================================== Function Jump(n$) If Not EntityCollided(n$,ter) MoveEntity (n$,0,10,0) Else jumpv=False End If End Function Function MoveUser(user) fft=False If Left(RecievedStr$,2)="FF" fft=True End If If fft=True ffx = Mid(RecievedStr$,4,1) ffy = Mid(RecievedStr$,6,1) ffz = Mid(RecievedStr$,8,1) End If If KeyDown( key_d ) Or (fft=True And ffx=1) ; Right. The 'D' and 'CURSOR RIGHT' keys. x#=100.0 Else If KeyDown( key_a ) Or (fft=True And ffx=-1) ; Left. The 'A' and 'CURSOR LEFT' keys. x#=-100.0 EndIf If KeyDown( KEY_F ) Or KeyDown( 54 ) Or (fft=True And ffy=1) ; Up. The 'F' and 'RIGHT SHIFT' keys. y#=500.0 Else If KeyDown( key_c ) Or KeyDown( 157 )Or (fft=True And ffy=-1) ; Down. The 'C' and 'RIGHT CONTROL' keys. y#=-500.0 EndIf If KeyDown( key_w ) Or (fft=True And ffz=1) ; Right. The 'w' and 'CURSOR RIGHT' keys. z#=100.0 Else If KeyDown( key_s ) Or (fft=True And ffz=-1) ; Left. The 's' and 'CURSOR LEFT' keys. z#=-100.0 EndIf MoveEntity user, x# * user_movement_speed# * Delta_Time#, y# * user_movement_speed# * Delta_Time#, z# * user_movement_speed# * Delta_Time# ; Move the user. If fft=True RecievedStr$="" End If End Function Function CalculateDeltatimeAndGametime() ; NOTES: ; The variable 'old_time' must be set to the current millisecs time at the start of a new game and when returning from a pause. milli_secs = MilliSecs () ; Store the 'MilliSecs ()' time in the 'milli_secs' variable so that you can use the stored time value without calling 'MilliSecs ()' again in this loop. the_time_taken = milli_secs - old_time ; Calculate the time the last loop took to execute. If the_time_taken > 100 Then the_time_taken = 100 ; This stop disk accesses And the like from causing jumps in position. game_time = game_time + the_time_taken ; Calculate the value for the 'game_time' variable used with timeouts, etc. Delta_Time# = the_time_taken / 1000.0 ; Calculate the value for the 'Delta_Time#' variable used to regulate game speed. old_time = milli_secs ; Update the 'old_time' variable with the current time. End Function Function FovToZoom#(FOV#) Return 1.0 / Tan(FOV#/2.0) End Function Function ZoomToFov#(Zoom#) Return 2*ATan(1.0/Zoom) End Function
So my need is a function that would be used like that:
spotlight1=createlight(); I guess
positionentity spotlight1,entityx(camera_pivot),entity(camera_pivot),entityz(camera_pivot)
if keyhit(key_r)
shadeterrainacordingtospotlight(terrain1,spotlight1)
end if
or another option is
if keyhit(key_r)
shadeterrainacordingtoposition(terrain1,x,y,z)
end if
so what will come out will be like the function you gave me using line pick on last topic, but it should be much more accurated(the problem with tha function you gave is that it send a linepick to the center of the triangle, but my need is like to send it to every single point on the triangle and even if one is visible then color the triangle(and some why it wasnt accurated and colored some triangle wrong)