ogre Engine3d - Tuch erstellen
- Purebasium
- Beiträge: 74
- Registriert: 05.02.2014 22:08
- Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte - Wohnort: Mars, Kraterstr. 57b, Apartment 7
ogre Engine3d - Tuch erstellen
Hallo,
weiß hier irgendjemand wie man ein Tuch mit Purebasic in der engine3d erstellen kann?
ich habe es bereits mit einzelnen, miteinander über Gelenke verbundenen, Boxen Versucht, allerdings kam nur ein seltsamer Konten raus.
Vielen Dank für Antworten.
weiß hier irgendjemand wie man ein Tuch mit Purebasic in der engine3d erstellen kann?
ich habe es bereits mit einzelnen, miteinander über Gelenke verbundenen, Boxen Versucht, allerdings kam nur ein seltsamer Konten raus.
Vielen Dank für Antworten.
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Albert Einstein
- Chimorin
- Beiträge: 451
- Registriert: 30.01.2013 16:11
- Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit
Re: ogre Engine3d - Tuch erstellen
Man kann es irgendwie hinmurksen, für richtiges Clothing benötigt man PhysX (Nicht in PB implementiert, da Bullet Physik).
Man kann es auch über SoftBodies lösenhttp://www.ogre3d.org/addonforums/viewt ... =12&t=7476, was wiederum nicht in PB implementiert ist.
Es gibt doch das Beispiel "Bridge" im PBordner. Du könntest das rauskramen und kleine (10x10cm; Kommt auf deine Skalierung an) Plättchen über diese Methode miteinander verbinden.
Man kann es auch über SoftBodies lösenhttp://www.ogre3d.org/addonforums/viewt ... =12&t=7476, was wiederum nicht in PB implementiert ist.
Es gibt doch das Beispiel "Bridge" im PBordner. Du könntest das rauskramen und kleine (10x10cm; Kommt auf deine Skalierung an) Plättchen über diese Methode miteinander verbinden.
- Purebasium
- Beiträge: 74
- Registriert: 05.02.2014 22:08
- Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte - Wohnort: Mars, Kraterstr. 57b, Apartment 7
Re: ogre Engine3d - Tuch erstellen
Ich habe es hier mal probiert:
Kann mir jemand sagen warum dort nur ein seltsamer Bommel entsteht?
Code: Alles auswählen
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1
If InitEngine3D(3)
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Models" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
CreateMaterial(1, LoadTexture(1, "doscarte.png"))
CreateCube(0, 1)
CreateEntity(0, MeshID(0), MaterialID(0), 0, 0, 0)
ScaleEntity(0, 1, 0.5, 1)
;entity erstellen
mid=1
For ye = 1 To 10
For ye2 = 0 To 10
If ye =10
mid=0
EndIf
CreateEntity(ye3, MeshID(0), MaterialID(mid), 0, ye*3.5-ye*7, ye2*3.5-ye2*7)
ScaleEntity(ye3, 1, 2, 2)
ye3+1
Next ye2
Next ye
; physicbodies erstellen
EntityPhysicBody(0, #PB_Entity_StaticBody,1)
ye3=0
For ye = 1 To 10
For ye2 = 0 To 10
EntityPhysicBody(ye3, #PB_Entity_BoxBody, 1)
ye3+1
Next ye2
Next ye
ConeTwistJoint(0, EntityID(0), 0, -1, 0, EntityID(1), 0, 1, 0)
SetJointAttribute(0, #PB_ConeTwistJoint_SwingSpan, 0)
SetJointAttribute(0, #PB_ConeTwistJoint_SwingSpan2, 0)
SetJointAttribute(0, #PB_ConeTwistJoint_TwistSpan, 1)
; #-----------------------------------------------------------------#
; # yea3: gelenk nummer #
; # #
; # yea & yea2: zwei for:next schleifen um höhe * Breite anzugeben #
; #-----------------------------------------------------------------#
;verbindungen senktrecht
yea3=0
For yea = 1 To 10
For yea2 = 1 To 11
yea3+1
If yea2<> 11
ConeTwistJoint(yea3, EntityID(yea3-1), 0, -2, 0, EntityID(yea3), 0, 1.5, 0)
SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan, 1)
SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan2, 1)
SetJointAttribute(yea3, #PB_ConeTwistJoint_TwistSpan, 0)
EndIf
Next yea2
Next yea
;verbindungen waagerecht
yea=0
yea2=0
For yea = 1 To 10
Debug "yea: "+Str(yea)
For yea2 = 1 To 10
yea3+1
Debug "yea3: "+Str(yea3)
If yea<> 10
ConeTwistJoint(yea3, EntityID(yea3-100-1), 0, -2, 0, EntityID(yea3-100+9), 0, 1.5, 0)
SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan, 1)
SetJointAttribute(yea3, #PB_ConeTwistJoint_SwingSpan2, 1)
SetJointAttribute(yea3, #PB_ConeTwistJoint_TwistSpan, 0)
EndIf
Next yea2
Next yea
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 4, 22,1)
CameraLookAt(0, 0, 0, 0)
SkyBox("desert07fthh.jpg")
WorldGravity(0)
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = -MouseDeltaX() * 1* 0.05
MouseY = -MouseDeltaY() * 1 * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Albert Einstein
Re: ogre Engine3d - Tuch erstellen
vermutlich passen die conejoints nicht.
Nimm mal lieber pointjoints . die passen besser zu einem
"Tuch".
Allerdings sollte am Ende sowas
entstehen.
die - und | sind die pointjoints
die E die Entities.
Wenn Du als Entities Kugeln (sphere) nimmst, hast Du erstmal keine Probleme
mit der Orientierung.
Nimm mal lieber pointjoints . die passen besser zu einem
"Tuch".
Allerdings sollte am Ende sowas
Code: Alles auswählen
E - E - E - E
| | | |
E - E - E - E
| | | |
E - E - E - E
| | | |
E - E - E - E
| | | |
E - E - E - E
| | | |
E - E - E - E
die - und | sind die pointjoints
die E die Entities.
Wenn Du als Entities Kugeln (sphere) nimmst, hast Du erstmal keine Probleme
mit der Orientierung.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: ogre Engine3d - Tuch erstellen
Also .. ich hab's nochmal angeguckt. Dein Code hat ein grosses Manko, denn bei dem 3D-dings
muss man drauf achten, dass jedes 3D-Entity auch eine eigene ID hat, zumindest insofern
man das später nochmal irgendwie weiter anfassen möchte.
Ich hab da mal was vorbereitet.
Hier kann man die Gravitation ändern mit den Tasten Add / Substract ( Plus und Minus auf dem Nummernblock)
und dem erzeugten Gebilde mit der Leertaste in den "Bauch pieken", damit das Ganze etwas in Schwung kommt.
R setzt die Tuchteile auf die Anfangsposition zurück
Von etwas weiter weg hat es sogar eine Tuchanmutung.
Bei mir bleibt das Spass ab und zu stehen (wenn man R und ADD oder Substract gleichzeitig hält), warum auch immer.
Bastel mal selber weiter dran rum.
weiteres 3d-animationszeug finzte hier
muss man drauf achten, dass jedes 3D-Entity auch eine eigene ID hat, zumindest insofern
man das später nochmal irgendwie weiter anfassen möchte.
Ich hab da mal was vorbereitet.
Hier kann man die Gravitation ändern mit den Tasten Add / Substract ( Plus und Minus auf dem Nummernblock)
und dem erzeugten Gebilde mit der Leertaste in den "Bauch pieken", damit das Ganze etwas in Schwung kommt.
R setzt die Tuchteile auf die Anfangsposition zurück
Von etwas weiter weg hat es sogar eine Tuchanmutung.
Bei mir bleibt das Spass ab und zu stehen (wenn man R und ADD oder Substract gleichzeitig hält), warum auch immer.
Bastel mal selber weiter dran rum.
Code: Alles auswählen
;
;PB 5.21
;sowas wie ein Tuch
;
;
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1
If InitEngine3D(3)
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Models" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
Structure Entities
id.l
x.f
y.f
z.f
meshid.l
matid.l
scalex.l
scaley.l
scalez.l
phys.l
lineid1.l
lineid2.l
EndStructure
Dim Netz.Entities(9,9) ;Netz 10*10
NewList ent.Entities()
If Screen3DRequester()
CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
CreateMaterial(1, LoadTexture(1, "doscarte.png"))
CreateSphere(0, 0.2)
For x=0 To 9
For y=0 To 9
Netz(x,y)\id=id
Netz(x,y)\lineid1=id
Netz(x,y)\lineid2=id+500
id+1
Netz(x,y)\x=x
Netz(x,y)\y=y
Netz(x,y)\z=0
Netz(x,y)\meshid=MeshID(0)
If y<9
Netz(x,y)\phys=#PB_Entity_BoxBody
Netz(x,y)\matid=MaterialID(1)
Else
If x=9
Netz(x,y)\phys=#PB_Entity_StaticBody
Else
Netz(x,y)\phys=#PB_Entity_BoxBody
EndIf
Netz(x,y)\matid=MaterialID(0)
EndIf
CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
Next y
Next x
For x=0 To 8
For y=0 To 9
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
For x=0 To 9
For y=0 To 8
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 4, 22,1)
CameraLookAt(0, 0, 0, 0)
SkyBox("desert07.jpg")
wg.f=-0.981
WorldGravity(wg)
Debug wg.f
Repeat
Screen3DEvents()
For x=0 To 8
For y=0 To 9
CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
Next y
Next x
For x=0 To 9
For y=0 To 8
CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
Next y
Next x
If ExamineMouse()
MouseX = -MouseDeltaX() * 1* 0.05
MouseY = -MouseDeltaY() * 1 * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Space)
ApplyEntityImpulse(Netz(5,5)\id,0,0,-10)
EndIf
If KeyboardPushed(#PB_Key_Subtract)
wg.f=wg.f-0.1
WorldGravity(wg)
Debug wg
EndIf
If KeyboardPushed(#PB_Key_Add)
wg.f=wg.f+0.1
WorldGravity(wg)
Debug wg
EndIf
If KeyboardPushed(#PB_Key_R)
For x= 0 To 9
For y=0 To 9
MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
;ScaleEntity(ye3, 1, 2, 2)
Next y
Next x
EndIf
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
- Purebasium
- Beiträge: 74
- Registriert: 05.02.2014 22:08
- Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte - Wohnort: Mars, Kraterstr. 57b, Apartment 7
Re: ogre Engine3d - Tuch erstellen
Danke
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Albert Einstein
Re: ogre Engine3d - Tuch erstellen
kleine Anpassung
die Netzgröße ist nun per Variable anpassbar. (ab 30 mal 30 wird es hier auf meinem Krüppelrechner extrem unflüssig,
was auch an der in der Schleife immer wieder neu erzeugten Linien liegt, ohne die geht es flüssiger)
Außerdem habe ich das Tuch an die "Leine" gehängt.
(der Abstand sowie die Größe der Entities hängen von der Gitterweite (hier 1 in x und y-Richtung)
ab und ist hier eher fix)
die Netzgröße ist nun per Variable anpassbar. (ab 30 mal 30 wird es hier auf meinem Krüppelrechner extrem unflüssig,
was auch an der in der Schleife immer wieder neu erzeugten Linien liegt, ohne die geht es flüssiger)
Außerdem habe ich das Tuch an die "Leine" gehängt.
(der Abstand sowie die Größe der Entities hängen von der Gitterweite (hier 1 in x und y-Richtung)
ab und ist hier eher fix)
Code: Alles auswählen
;
;PB 5.21
;sowas wie ein Tuch
;
;
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1
If InitEngine3D(3)
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Models" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
maxx=20
maxy=20
Structure Entities
id.l
x.f
y.f
z.f
meshid.l
matid.l
scalex.l
scaley.l
scalez.l
phys.l
lineid1.l
lineid2.l
EndStructure
Dim Netz.Entities(maxx,maxy) ;Netz 10*10
NewList ent.Entities()
If Screen3DRequester()
CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
CreateMaterial(1, LoadTexture(1, "doscarte.png"))
;CreateSphere(0, 0.2,3,3)
CreateCube(0, 0.2)
For x=0 To maxx
For y=0 To maxy
Netz(x,y)\id=id
Netz(x,y)\lineid1=id
Netz(x,y)\lineid2=id+(maxx*maxy*2) ; hier Addition eines Wertes, damit es eindeutig wird (bei größeren Netzen anpassen)
id+1
Netz(x,y)\x=x
Netz(x,y)\y=y
Netz(x,y)\z=0
Netz(x,y)\meshid=MeshID(0)
If y<maxy
Netz(x,y)\phys=#PB_Entity_BoxBody
Netz(x,y)\matid=MaterialID(1)
Else
If x=maxx-2 Or x=2
Netz(x,y)\phys=#PB_Entity_StaticBody
Else
Netz(x,y)\phys=#PB_Entity_BoxBody
EndIf
Netz(x,y)\matid=MaterialID(0)
EndIf
CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
Next y
Next x
For x=0 To maxx-1
For y=0 To maxy
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
SetJointAttribute(pj,#PB_PointJoint_Damping,1)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
For x=0 To maxx
For y=0 To maxy-1
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
SetJointAttribute(pj,#PB_PointJoint_Damping,1)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 4, 22,1)
CameraLookAt(0, 0, 0, 0)
SkyBox("desert07.jpg")
wg.f=-0.981
WorldGravity(wg)
Debug wg.f
Repeat
Screen3DEvents()
WorldGravity(wg)
For x=0 To maxx-1
For y=0 To maxy
CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
Next y
Next x
For x=0 To maxx
For y=0 To maxy-1
CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
Next y
Next x
If ExamineMouse()
MouseX = -MouseDeltaX() * 1* 0.05
MouseY = -MouseDeltaY() * 1 * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Space)
ApplyEntityImpulse(Netz(maxx/2,maxy/2)\id,0,0,-10)
EndIf
If KeyboardPushed(#PB_Key_Subtract)
wg.f=wg.f-0.1
Debug wg
EndIf
If KeyboardPushed(#PB_Key_Add)
wg.f=wg.f+0.1
;WorldGravity(wg)
Debug wg
EndIf
If KeyboardPushed(#PB_Key_R)
For x= 0 To maxx
For y=0 To maxy
MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
;ScaleEntity(ye3, 1, 2, 2)
Next y
Next x
EndIf
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
- Purebasium
- Beiträge: 74
- Registriert: 05.02.2014 22:08
- Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte - Wohnort: Mars, Kraterstr. 57b, Apartment 7
Re: ogre Engine3d - Tuch erstellen
Hier noch ein paar verbesserungen:
Nun können die Linien per Variable abgeschaltet werden und wenn Man B drückt wird ein Ball geschossen. ( damit kann man seine Tuch Eigenschaften besser erkennen)
Außerdem habe ich die Würfel etwas größer gemacht
Code: Alles auswählen
;
;PB 5.21
;sowas wie ein Tuch
;
;Orginal Code von bobobo
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1
If InitEngine3D(3)
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Models" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
maxx=30
maxy=30
linienan=0
Structure Entities
id.l
x.f
y.f
z.f
meshid.l
matid.l
scalex.l
scaley.l
scalez.l
phys.l
lineid1.l
lineid2.l
EndStructure
Dim Netz.Entities(maxx,maxy) ;Netz 10*10
NewList ent.Entities()
If Screen3DRequester()
CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
CreateMaterial(1, LoadTexture(1, "doscarte.png"))
;CreateSphere(0, 0.2,3,3)
CreateCube(0,0.8)
CreateSphere(1,1)
For x=0 To maxx
For y=0 To maxy
Netz(x,y)\id=id
Netz(x,y)\lineid1=id
Netz(x,y)\lineid2=id+(maxx*maxy*2) ; hier Addition eines Wertes, damit es eindeutig wird (bei größeren Netzen anpassen)
id+1
Netz(x,y)\x=x
Netz(x,y)\y=y
Netz(x,y)\z=0
Netz(x,y)\meshid=MeshID(0)
If y<maxy
Netz(x,y)\phys=#PB_Entity_BoxBody
Netz(x,y)\matid=MaterialID(1)
Else
If x=maxx-2 Or x=2
Netz(x,y)\phys=#PB_Entity_StaticBody
Else
Netz(x,y)\phys=#PB_Entity_BoxBody
EndIf
Netz(x,y)\matid=MaterialID(0)
EndIf
CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
Next y
Next x
For x=0 To maxx-1
For y=0 To maxy
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
SetJointAttribute(pj,#PB_PointJoint_Damping,1)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
For x=0 To maxx
For y=0 To maxy-1
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
SetJointAttribute(pj,#PB_PointJoint_Damping,1)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 4, 22,1)
CameraLookAt(0, 0, 0, 0)
SkyBox("desert07.jpg")
wg.f=-0.981
WorldGravity(wg)
Debug wg.f
Repeat
Screen3DEvents()
WorldGravity(wg)
If linienan=1
For x=0 To maxx-1
For y=0 To maxy
CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
Next y
Next x
For x=0 To maxx
For y=0 To maxy-1
CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
Next y
Next x
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX() * 1* 0.05
MouseY = -MouseDeltaY() * 1 * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Space)
ApplyEntityImpulse(Netz(maxx/2,maxy/2)\id,0,0,-20)
EndIf
If KeyboardReleased(#PB_Key_B)
CreateEntity(maxy*maxx+1,MeshID(1),0,CameraX(0),CameraY(0),CameraZ(0))
EntityPhysicBody(maxy*maxx+1, #PB_Entity_SphereBody )
ApplyEntityImpulse(maxy*maxx+1,CameraDirectionX(0)*100,CameraDirectionY(0)*100,CameraDirectionZ(0)*100)
EndIf
If KeyboardPushed(#PB_Key_Subtract)
wg.f=wg.f-0.1
Debug wg
EndIf
If KeyboardPushed(#PB_Key_Add)
wg.f=wg.f+0.1
;WorldGravity(wg)
Debug wg
EndIf
If KeyboardPushed(#PB_Key_R)
For x= 0 To maxx
For y=0 To maxy
MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
;ScaleEntity(ye3, 1, 2, 2)
Next y
Next x
EndIf
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Nun können die Linien per Variable abgeschaltet werden und wenn Man B drückt wird ein Ball geschossen. ( damit kann man seine Tuch Eigenschaften besser erkennen)
Außerdem habe ich die Würfel etwas größer gemacht
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Albert Einstein
- Purebasium
- Beiträge: 74
- Registriert: 05.02.2014 22:08
- Computerausstattung: Ein Computer halt.
Mit Windows 7
und mit AMD Phenom(tm) II X4 B50 Prozessor
und einer ATI Radeon HD 5450 Grafikkarte - Wohnort: Mars, Kraterstr. 57b, Apartment 7
Re: ogre Engine3d - Tuch erstellen
Kleiner Bugfix noch
Code: Alles auswählen
;
;PB 5.21
;sowas wie ein Tuch
;
;Orginal Code von bobobo
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1
If InitEngine3D(3)
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Models" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
maxx=30
maxy=30
linienan=0
Structure Entities
id.l
x.f
y.f
z.f
meshid.l
matid.l
scalex.l
scaley.l
scalez.l
phys.l
lineid1.l
lineid2.l
EndStructure
Dim Netz.Entities(maxx,maxy) ;Netz 10*10
NewList ent.Entities()
If Screen3DRequester()
CreateMaterial(0, LoadTexture(0, "Dirt.jpg"))
CreateMaterial(1, LoadTexture(1, "doscarte.png"))
;CreateSphere(0, 0.2,3,3)
CreateCube(0,0.8)
CreateSphere(1,4)
For x=0 To maxx
For y=0 To maxy
Netz(x,y)\id=id
Netz(x,y)\lineid1=id
Netz(x,y)\lineid2=id+(maxx*maxy*2) ; hier Addition eines Wertes, damit es eindeutig wird (bei größeren Netzen anpassen)
id+1
Netz(x,y)\x=x
Netz(x,y)\y=y
Netz(x,y)\z=0
Netz(x,y)\meshid=MeshID(0)
If y<maxy
Netz(x,y)\phys=#PB_Entity_BoxBody
Netz(x,y)\matid=MaterialID(1)
Else
If x=maxx-2 Or x=2
Netz(x,y)\phys=#PB_Entity_StaticBody
Else
Netz(x,y)\phys=#PB_Entity_BoxBody
EndIf
Netz(x,y)\matid=MaterialID(0)
EndIf
CreateEntity(Netz(x,y)\id,Netz(x,y)\meshid,Netz(x,y)\matid,Netz(x,y)\x,Netz(x,y)\y,Netz(x,y)\z)
EntityPhysicBody(Netz(x,y)\id,Netz(x,y)\phys)
Next y
Next x
For x=0 To maxx-1
For y=0 To maxy
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x+1,y)\id),-1,0,0)
SetJointAttribute(pj,#PB_PointJoint_Damping,1)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
For x=0 To maxx
For y=0 To maxy-1
pj=PointJoint(#PB_Any,EntityID(Netz(x,y)\id),0,0,0,EntityID(Netz(x,y+1)\id),0,-1,0)
SetJointAttribute(pj,#PB_PointJoint_Damping,1)
SetJointAttribute(pj,#PB_PointJoint_Tau,0)
Next y
Next x
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 4, 22,1)
CameraLookAt(0, 0, 0, 0)
SkyBox("desert07.jpg")
wg.f=-0.981
WorldGravity(wg)
Debug wg.f
Repeat
Screen3DEvents()
WorldGravity(wg)
If linienan=1
For x=0 To maxx-1
For y=0 To maxy
CreateLine3D(netz(x,y)\lineid1,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Red,EntityX(Netz(x+1,y)\id),
EntityY(Netz(x+1,y)\id),EntityZ(Netz(x+1,y)\id),#Green)
Next y
Next x
For x=0 To maxx
For y=0 To maxy-1
CreateLine3D(netz(x,y)\lineid2,EntityX(Netz(x,y)\id),EntityY(Netz(x,y)\id),
EntityZ(Netz(x,y)\id),#Blue,EntityX(Netz(x,y+1)\id),
EntityY(Netz(x,y+1)\id),EntityZ(Netz(x,y+1)\id),#Yellow)
Next y
Next x
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX() * 1* 0.05
MouseY = -MouseDeltaY() * 1 * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Space)
ApplyEntityImpulse(Netz(maxx/2,maxy/2)\id,0,0,-20)
EndIf
If KeyboardReleased(#PB_Key_B)
CreateEntity((maxy+1)*(maxx+1)+1,MeshID(1),0,CameraX(0),CameraY(0),CameraZ(0))
EntityPhysicBody((maxy+1)*(maxx+1)+1, #PB_Entity_SphereBody,10 )
ApplyEntityImpulse((maxy+1)*(maxx+1)+1,CameraDirectionX(0)*2000,CameraDirectionY(0)*2000,CameraDirectionZ(0)*2000)
EndIf
If KeyboardPushed(#PB_Key_Subtract)
wg.f=wg.f-0.1
Debug wg
EndIf
If KeyboardPushed(#PB_Key_Add)
wg.f=wg.f+0.1
;WorldGravity(wg)
Debug wg
EndIf
If KeyboardPushed(#PB_Key_R)
For x= 0 To maxx
For y=0 To maxy
MoveEntity(Netz(x,y)\id,x,y,z,#PB_Absolute)
;ScaleEntity(ye3, 1, 2, 2)
Next y
Next x
EndIf
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
"Ordnung braucht nur der Dumme, das Genie beherrscht das Chaos. "
Albert Einstein
Albert Einstein
- Chimorin
- Beiträge: 451
- Registriert: 30.01.2013 16:11
- Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit
Re: ogre Engine3d - Tuch erstellen
Das sieht ja Hammer aus (Ich habe das Gefühl, dass die Framerate sehr stark sinkt bei Bewegung des Tuches).
Poste das doch auch noch bitte im englischen Forum, die anderssprachigen PB-Mitglieder sehen solche Sachen auch gerne (Fred schaut sich zudem solche Sachen auch gerne an).

Poste das doch auch noch bitte im englischen Forum, die anderssprachigen PB-Mitglieder sehen solche Sachen auch gerne (Fred schaut sich zudem solche Sachen auch gerne an).
