Entityvisible help?
Blitz3D Forums/Blitz3D Programming/Entityvisible help?
| ||
Whenever I use entityvisible it always returns true. I have tried exchanging the source and destination entity and it still always returns true. ; Entityvisible Example ; -------------------- Graphics3D 640,480 SetBuffer BackBuffer() camera=CreateCamera() PositionEntity camera,0,2,-10 light=CreateLight() RotateEntity light,90,0,0 plane=CreatePlane() ;ground_tex=LoadTexture("media/Chorme-2.bmp") ;EntityTexture plane,ground_tex cube=CreateCube() ;cube_tex=LoadTexture("media/b3dlogo.jpg") ;EntityTexture cube,cube_tex PositionEntity cube,0,1,0 While Not KeyDown( 1 ) If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05 If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05 RenderWorld Text 0,0,"Use cursor keys to move about" Text 0,20,"ProjectedX: "+ProjectedX#() Text 0,40,"ProjectedY: "+ProjectedY#() Text 0,60,"ProjectedZ: "+ProjectedZ#() Text 0,80,"EntityInView: "+EntityVisible(cube,camera) Flip Wend End |
| ||
the things between the two objects must be pickable. and also use entityinview to filter onscreen stuff. |
| ||
what does that mean? sorry im a bit of a newb There isnt anything in between the 2 objects I also tried to use this command when I wasnt projecting text, I have modified the above code just to include the bare bones of what is going on. |
| ||
Text 0,80,"EntityInView: "+EntityInView(cube,camera) |
| ||
Sorry "Slenkar" that was a bit of a short answer With EntityVisible they will always see each other (doesn't relate to where you are looking) EntityInView is working as the camera is "seeing" it - it's in the view of the camera |
| ||
o.k. thanks how is entityvisible useful? |
| ||
You could be checking 2 game objects - such as 2 AI controlled characters - for example - nothing to do with the camera EntityInView relates to the camera |
| ||
You could also check if an object is in another object´s view, by using a view angle:;Obscurer example by Jeppe Nielsen 2004 ;nielsen_jeppe@... Graphics3D 800,600,16,2 viewangle#=45 CreateLight(2) cam=CreateCamera() PositionEntity cam,0,40,0 RotateEntity cam,90,0,0 CameraZoom cam,2 obj1=CreateCone() RotateMesh obj1,-90,0,0 view=CreateCone(16,1,obj1) RotateMesh view,-90,0,0 PositionMesh view,0,0,1 ScaleMesh view,0.5,0.5,0.5 EntityColor view,128,128,0 EntityAlpha view,0.8 UpdateViewCone(view,10,viewangle#) obj2=CreateCube() cube1=CreateCube() EntityColor cube1,255,255,0 EntityPickMode cube1,3 cube2=CreateCube() EntityColor cube2,255,255,0 EntityPickMode cube2,3 cube3=CreateCube() EntityColor cube3,255,255,0 EntityPickMode cube3,3 Repeat If KeyDown(203) TurnEntity obj1,0,2,0 EndIf If KeyDown(205) TurnEntity obj1,0,-2,0 EndIf If KeyDown(78) viewangle#=viewangle#+1 If viewangle#>179 viewangle#=179 EndIf UpdateViewCone(view,10,viewangle#) EndIf If KeyDown(74) viewangle#=viewangle#-1 If viewangle#<15 viewangle#=15 EndIf UpdateViewCone(view,10,viewangle#) EndIf an#=MilliSecs()/20 PositionEntity obj2,Sin(an#)*10,0,Cos(an#)*10 an#=MilliSecs()/50 PositionEntity cube1,Sin(an#)*6,0,Cos(an#)*6 PositionEntity cube2,Sin(an#+120)*6,0,Cos(an#+120)*6 PositionEntity cube3,Sin(an#+240)*6,0,Cos(an#+240)*6 RenderWorld If CanSeeObject(obj1,obj2,viewangle) Color 255,255,255 Text 400,200,"I see it :)",1 CameraProject cam,EntityX(obj1),EntityY(obj1),EntityZ(obj1) x1=ProjectedX() y1=ProjectedY() CameraProject cam,EntityX(obj2),EntityY(obj2),EntityZ(obj2) x2=ProjectedX() y2=ProjectedY() Color Rnd(255),Rnd(255),Rnd(255) Line x1,y1,x2,y2 EndIf Color 255,255,255 Text 400,10,"Left/right to rotate observer",1 Text 400,30,"+ / - to change view angle",1 Text 400,50,"Yellow boxes obscurers the view",1 Text 400,70,"View angle : "+viewangle,1 Flip Until KeyDown(1) End Function UpdateViewCone(cone,depth#,angle#) sc#=Tan(angle/2)*depth*2 ScaleEntity cone,sc,sc,depth# End Function Function CanSeeObject(obj1,obj2,angle#=90) dist#=EntityDistance(obj1,obj2) dx#=(EntityX(obj2,1)-EntityX(obj1,1)) / dist dy#=(EntityY(obj2,1)-EntityY(obj1,1)) / dist dz#=(EntityZ(obj2,1)-EntityZ(obj1,1)) / dist TFormVector 0,0,1,obj1,0 ;dot product: dot#=dx*TFormedX()+dy*TFormedY()+dz*TFormedZ() If ACos(dot#)<angle/2 Return EntityVisible(obj1,obj2) EndIf End Function |
| ||
ah I see entityvisible just checks if there are objects in the way or not |
| ||
"ah I see entityvisible just checks if there are objects in the way or not" Pretty much. I think it basically checks if a straight line can be picked between the centerpoints of the specified source and destination entities without any pick enabled objects getting in the way of that line. If no objects in your game world are pick enabled (by setting their pickmode using EntityPickMode with the obscurer flag set to true) then it will always return true. |
| ||
o.k. thanks |