Collison mit den "NodesEntity"
Collison mit den "NodesEntity"
Hallo, ich bekommen die Collison mit dem "NodesEntity" nicht hin.
Habe die Demo "SimpleCollisions.pb" mit einem "Nodeskörper" ausprobiert.
Geht nicht.
mfg
Habe die Demo "SimpleCollisions.pb" mit einem "Nodeskörper" ausprobiert.
Geht nicht.
mfg
Hier ist der Code mit dem Nodes.
Der Roboterkörper(Nodes) colligiert nicht.
Wo ist der fehler.
Der Roboterkörper(Nodes) colligiert nicht.
Wo ist der fehler.
Code: Alles auswählen
#CameraSpeed=10
#EntitySpeed=4
#Camera=0
Dim entity(5)
Dim Node(5)
Define.f KeyX,KeyY,MouseX,MouseY
InitEngine3D()
Add3DArchive("Data\", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
hWnd = OpenWindow(0,0,0,800,600,"Nodes",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
OpenWindowedScreen(hWnd,220,10,500,400,0,0,0)
EnableWorldPhysics(#True)
EnableWorldCollisions(#True)
CreateMaterial(0,LoadTexture(0,"gruen.jpg"))
CreateMaterial(1,LoadTexture(1,"hintergr.jpg"))
CreateMaterial(2,LoadTexture(2,"gelb.jpg"))
Restore NumericalData
Read.l Vert
Read.l Tria
Read.l Max
CreateMesh(0, vert)
SetMeshData(0, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
SetMeshData(0, #PB_Mesh_Face, ?Triangle, Tria); 1)
CreateMesh(1, vert)
SetMeshData(1, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
SetMeshData(1, #PB_Mesh_Face, ?Triangle, Tria); 1)
CreateMesh(2, vert)
SetMeshData(2, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
SetMeshData(2, #PB_Mesh_Face, ?Triangle, Tria); 1)
CreateCamera(#Camera,0,0,100,100)
CameraLocate(#Camera,0,200,300)
CameraLookAt(#Camera,0,0,0)
CreateLight(0,RGB(255,255,255),0,500,0)
AmbientColor(RGB(200,200,200))
Floor=CreateEntity(#PB_Any,MeshID(0),MaterialID(1),0,-45,0)
ScaleEntity(Floor,300,10,300)
EntityPhysicBody(Floor,#PB_Entity_StaticBody)
For x=-2 To 2 Step 2
For z=-2 To 2 Step 2
Block=CreateEntity(#PB_Any,MeshID(0),MaterialID(0),x*80,0,z*80)
EntityPhysicBody(Block,#PB_Entity_StaticBody)
ScaleEntity(block,30,30,30)
SetEntityMass(Block,10)
Next
Next
Node(0) = CreateNode(#PB_Any,0,0,0)
Entity(0) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2))
EntityPhysicBody(Entity(0),#PB_Entity_BoxBody ,#PB_Entity_AbsoluteBodyMove)
SetEntityMass(Entity(0),0.01)
ScaleEntity(Entity(0),10,5,10)
AttachNodeObject(Node(0),EntityID(Entity(0)),#PB_Node_Entity)
MoveNode(Node(0),50,0,0)
Repeat
ExamineKeyboard()
Active=0
If KeyboardPushed(#PB_Key_PageUp)
Speed=-#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_PageDown)
Speed=#CameraSpeed
Else
Speed=0
EndIf
If KeyboardPushed(#PB_Key_Left)
Turn_X+1
RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
ElseIf KeyboardPushed(#PB_Key_Right)
Turn_X-1
RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
EndIf
If KeyboardPushed(#PB_Key_X)
Move_X=-#EntitySpeed
Active=1
ElseIf KeyboardPushed(#PB_Key_C)
Move_X=#EntitySpeed
Active=1
EndIf
If KeyboardPushed(#PB_Key_A)
Move_Y=#EntitySpeed
Active=2
ElseIf KeyboardPushed(#PB_Key_Z)
Move_Y=-#EntitySpeed
Active=2
EndIf
If KeyboardPushed(#PB_Key_Up)
Move_Z=#EntitySpeed
Active=3
ElseIf KeyboardPushed(#PB_Key_Down)
Move_Z=-#EntitySpeed
Active=3
EndIf
If Turn_X>360
Turn_X-360
ElseIf Turn_X<0
Turn_X+360
EndIf
Deg_X=Turn_X+90
If Deg_X>360
Deg_X-360
ElseIf Deg_X<0
Deg_X+360
EndIf
Select Active
Case 1
deg.f=(#PI/180)*Turn_X
MoveNode(Node(0),Sin(deg)*Move_X,0,Cos(deg)*Move_X)
Case 2
MoveNode(Node(0),0,Move_Y,0)
Case 3
deg.f=(#PI/180)*Deg_X
MoveNode(Node(0),Sin(deg)*Move_Z,0,Cos(deg)*Move_Z)
Default
MoveNode(Node(0),0,0,0)
EndSelect
If ExamineMouse()
MouseX=-(MouseDeltaX()/30)*#CameraSpeed/2
MouseY=-(MouseDeltaY()/30)*#CameraSpeed/2
EndIf
RotateCamera(0,MouseY/2,MouseX/2,RollZ,#PB_Relative)
MoveCamera(0,0,0,Speed)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit=1
End
DataSection
StringSect:
Data.s ""
NumericalData:
Data.l 24,12,2
Vertice: ;x,y,z,nx,ny,nz,col,u,v = Vertex + Normal + Col + UV Koordinaten
Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
Triangle: ; Vertice x,y,z verbinden/Create Triangle
Data.w 2,0,3
Data.w 1,0,2
Data.w 6,4,7
Data.w 5,4,6
Data.w 10,8,11
Data.w 9,8,10
Data.w 14,12,15
Data.w 13,12,14
Data.w 18,16,19
Data.w 17,16,18
Data.w 22,20,23
Data.w 21,20,22
EndDataSection
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Und noch einmal antworte ich auf denselben Thread:
http://www.purebasic.fr/german/viewtopic.php?t=18707

Hier ist deine alte Frage verschwunden:Bug mit den Nodes und der Kollision ist bekannt:
http://www.purebasic.fr/english/viewtopic.php?t=35840
http://www.purebasic.fr/german/viewtopic.php?t=18707
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Dazu kann ich dir nichts genaueres sagen. Ich denke schon, dass daran gearbeitet wird.sechsrad hat geschrieben:Wann kann man damit rechnen , das die Nodes mit bei der Collison erkannt werden. Wird daran gearbeitet?
Als Workaround kannst du einen Würfel erstellen, den du mit dem Node bewegst und mit HideEntity unsichtbar machst.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
So ungefähr:
Code: Alles auswählen
#CameraSpeed=10
#EntitySpeed=4
#Camera=0
Dim entity(5, 1)
Dim Node(5)
Define.f KeyX,KeyY,MouseX,MouseY
InitEngine3D()
Add3DArchive("Data\", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
hWnd = OpenWindow(0,0,0,800,600,"Nodes",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
OpenWindowedScreen(hWnd,220,10,500,400,0,0,0)
EnableWorldPhysics(#True)
EnableWorldCollisions(#True)
CreateMaterial(0, LoadTexture(0, "gruen.jpg"))
CreateMaterial(1, LoadTexture(1, "hintergr.jpg"))
CreateMaterial(2, LoadTexture(2, "gelb.jpg"))
Restore NumericalData
Read.l Vert
Read.l Tria
Read.l Max
CreateMesh(0, vert)
SetMeshData(0, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
SetMeshData(0, #PB_Mesh_Face, ?Triangle, Tria); 1)
CreateMesh(1, vert)
SetMeshData(1, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
SetMeshData(1, #PB_Mesh_Face, ?Triangle, Tria); 1)
CreateMesh(2, vert)
SetMeshData(2, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate, ?Vertice, Vert);3)
SetMeshData(2, #PB_Mesh_Face, ?Triangle, Tria); 1)
CreateCamera(#Camera,0,0,100,100)
CameraLocate(#Camera,0,200,300)
CameraLookAt(#Camera,0,0,0)
CreateLight(0,RGB(255,255,255),0,500,0)
AmbientColor(RGB(200,200,200))
Floor=CreateEntity(#PB_Any,MeshID(0),MaterialID(1),0,-45,0)
ScaleEntity(Floor,300,10,300)
EntityPhysicBody(Floor,#PB_Entity_StaticBody)
For x=-2 To 2 Step 2
For z=-2 To 2 Step 2
Block=CreateEntity(#PB_Any,MeshID(0),MaterialID(0),x*80,0,z*80)
ScaleEntity(block,30,30,30)
EntityPhysicBody(Block,#PB_Entity_StaticBody)
Next
Next
Node(0) = CreateNode(#PB_Any,0,0,0)
Entity(0, 0) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2))
Entity(0, 1) = CreateEntity(#PB_Any,MeshID(2),MaterialID(2)) ; Bounding Box
HideEntity(Entity(0, 1), 1)
ScaleEntity(Entity(0, 0),10,5,10)
EntityLocate(Entity(0, 1), 50,0,0)
EntityPhysicBody(Entity(0, 1),#PB_Entity_BoxBody, #PB_Entity_AbsoluteBodyMove)
SetEntityMass(Entity(0, 1),10)
ScaleEntity(Entity(0, 1),0.5, 0.25, 0.5)
AttachNodeObject(Node(0),EntityID(Entity(0, 0)),#PB_Node_Entity)
WorldDebug(#PB_World_DebugBody)
Repeat
ExamineKeyboard()
Active=0
If KeyboardPushed(#PB_Key_PageUp)
Speed=-#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_PageDown)
Speed=#CameraSpeed
Else
Speed=0
EndIf
If KeyboardPushed(#PB_Key_Left)
Turn_X+1
RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
ElseIf KeyboardPushed(#PB_Key_Right)
Turn_X-1
RotateNode(Node(0),0,Turn_x,0,#PB_Absolute)
EndIf
If KeyboardPushed(#PB_Key_X)
Move_X=-#EntitySpeed
Active=1
ElseIf KeyboardPushed(#PB_Key_C)
Move_X=#EntitySpeed
Active=1
EndIf
If KeyboardPushed(#PB_Key_A)
Move_Y=#EntitySpeed
Active=2
ElseIf KeyboardPushed(#PB_Key_Z)
Move_Y=-#EntitySpeed
Active=2
EndIf
If KeyboardPushed(#PB_Key_Up)
Move_Z=#EntitySpeed
Active=3
ElseIf KeyboardPushed(#PB_Key_Down)
Move_Z=-#EntitySpeed
Active=3
EndIf
If Turn_X>360
Turn_X-360
ElseIf Turn_X<0
Turn_X+360
EndIf
Deg_X=Turn_X+90
If Deg_X>360
Deg_X-360
ElseIf Deg_X<0
Deg_X+360
EndIf
Select Active
Case 1
deg.f=(#PI/180)*Turn_X
MoveEntity(Entity(0,1),Sin(deg)*Move_X * 10.0,0,Cos(deg)*Move_X * 10.0)
Case 2
MoveEntity(Entity(0,1),0,Move_Y,0)
Case 3
deg.f=(#PI/180)*Deg_X
MoveEntity(Entity(0,1),Sin(deg)*Move_Z * 10.0,0,Cos(deg)*Move_Z * 10.0)
Default
MoveEntity(Entity(0,1),0,0,0)
EndSelect
If ExamineMouse()
MouseX=-(MouseDeltaX()/30)*#CameraSpeed/2
MouseY=-(MouseDeltaY()/30)*#CameraSpeed/2
EndIf
RotateCamera(0,MouseY/2,MouseX/2,RollZ,#PB_Relative)
MoveCamera(0,0,0,Speed)
NodeLocate(Node(0), EntityX(Entity(0, 1)), EntityY(Entity(0, 1)), EntityZ(Entity(0, 1)))
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit=1
End
DataSection
StringSect:
Data.s ""
NumericalData:
Data.l 24,12,2
Vertice: ;x,y,z,nx,ny,nz,col,u,v = Vertex + Normal + Col + UV Koordinaten
Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
Data.f 1,-1,1,0.57735,-0.57735,0.57735,0,0,0
Data.f 1,-1,-1,0.57735,-0.57735,-0.57735,0,0,0
Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
Data.f -1,-1,1,-0.57735,-0.57735,0.57735,0,0,0
Data.f -1,-1,-1,-0.57735,-0.57735,-0.57735,0,0,0
Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
Data.f 1,1,-1,0.57735,0.57735,-0.57735,0,0,0
Data.f 1,1,1,0.57735,0.57735,0.57735,0,0,0
Data.f -1,1,1,-0.57735,0.57735,0.57735,0,0,0
Data.f -1,1,-1,-0.57735,0.57735,-0.57735,0,0,0
Triangle: ; Vertice x,y,z verbinden/Create Triangle
Data.w 2,0,3
Data.w 1,0,2
Data.w 6,4,7
Data.w 5,4,6
Data.w 10,8,11
Data.w 9,8,10
Data.w 14,12,15
Data.w 13,12,14
Data.w 18,16,19
Data.w 17,16,18
Data.w 22,20,23
Data.w 21,20,22
EndDataSection
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.