In Ogre Kugel "Werfen"
- kob
- Beiträge: 116
- Registriert: 01.01.2008 02:02
- Computerausstattung: 2x 2.4 GHz Amd Cpu | Geforce N9600GT OC |2.5GB Ram |Windows 7 Ultimate
- Wohnort: Fulda
In Ogre Kugel "Werfen"
Hallo ich möchte ein spiel schreiben , das wie ein ego-shoter ist .
wollte ich schonmal hat aber nicht so wirklich geklapt . Daraus habe
ich gelernt erst einmal die purebasic 3ddemos zu verunstalten . jetzt möchte ich das wenn ich den linken mouse button drücke , ein entity
von der kameraposition zu der position fliegt wo sie hin schaut .
PS: Sorry für die vormulirung .
wollte ich schonmal hat aber nicht so wirklich geklapt . Daraus habe
ich gelernt erst einmal die purebasic 3ddemos zu verunstalten . jetzt möchte ich das wenn ich den linken mouse button drücke , ein entity
von der kameraposition zu der position fliegt wo sie hin schaut .
PS: Sorry für die vormulirung .
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
-
xperience2003
- Beiträge: 972
- Registriert: 04.10.2004 18:42
- Computerausstattung: Amiga, LinuxMint, Windows7
- Wohnort: gotha
- Kontaktdaten:
neja, das entity an der camera erstellen, in den gleichen winkel wie die blickrichtung der camera drehen und dann vorwaerz bewegen
amiga rulez...
Rebirth Software
Rebirth Software
- kob
- Beiträge: 116
- Registriert: 01.01.2008 02:02
- Computerausstattung: 2x 2.4 GHz Amd Cpu | Geforce N9600GT OC |2.5GB Ram |Windows 7 Ultimate
- Wohnort: Fulda
Meine ich anders
die kugel soll j aunendlich weiterfliegen . soll so sein wie bei
einem shoter . damit möchte ich kuken auf welches enety der player greade schaut und dan " schaden verursachen "
einem shoter . damit möchte ich kuken auf welches enety der player greade schaut und dan " schaden verursachen "
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
dann mach lieber eine strahlenberechnung.
dafür eine entity zu bewegen ist overkill, braucht viel zu viel rechenkapazitäten.
also mal abstrakt:
du hast den richtungsvektor deines players und seine ortskoordinaten.
den richtungsvektor kannst du beliebig verlängern,
und wenn der eine andere entity berührt dann wird diese getroffen.
eigentlich solltest du das uach nicht händisch machen brauchen,
eine Engine sollte eine Funktion für sowas mitliefern.
dafür eine entity zu bewegen ist overkill, braucht viel zu viel rechenkapazitäten.
also mal abstrakt:
du hast den richtungsvektor deines players und seine ortskoordinaten.
den richtungsvektor kannst du beliebig verlängern,
und wenn der eine andere entity berührt dann wird diese getroffen.
eigentlich solltest du das uach nicht händisch machen brauchen,
eine Engine sollte eine Funktion für sowas mitliefern.
- kob
- Beiträge: 116
- Registriert: 01.01.2008 02:02
- Computerausstattung: 2x 2.4 GHz Amd Cpu | Geforce N9600GT OC |2.5GB Ram |Windows 7 Ultimate
- Wohnort: Fulda
So ähnlich
Ich habe aber leider nur die Kamerarotationen wie berechne ich nun die bewegungs vektoren ? bin in sowas nicht sehr helle , aber wen ich es verstanden habe (was nicht lange dauert) das leuft es !
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
wie gesagt, eigentlich sollte die Engine funktionen dafür mitbringen.
hab mich noch nicht eingehend mit der OGRE in PB 4.3 auseinandergesetzt,
vielleicht weiß ja jemand anderes mehr.
erklären kann ichs dir mal schnell als 2D beispiel:
nehmen wir mal an, nach oben ist 0° drehung.
du drehst dein objekt 30° nach rechts.
dann musst du Sin(30°) = 0.5 nach rechts und Cos(30°) = 0.866 nach oben gehen,
wenn du das objekt in dieser richtung bewegen willst.
das ist sein bewegungsvektor oder richtungsvektor. (0.5, 0.866)
wenn es sich jetzt am Ort x=500 y=300 befindet, ist sein Ortsvektor (500,300)
also rechnest du, wenn du das objekt bewegst,
in jedem Schritt x + 0.5 * Speed : y + 0.866 * Speed um den neuen ort zu erhalten.
also (500,300) + (0.5, 0.866) = (500.5, 300.866)
(achtung: das ist jetzt mathematisch, bei nem Screen ist die y-achse umgedreht.)
anstatt jetzt das objekt zu bewegen, kannst du auch immer wieder den richtungsvektur dazuaddieren,
um zu testen, ob in der bewegungs- oder schussrichtung vom objekt aus ein anderes objekt liegt.
weitergehend kannst du auch aus der Bewegungsrichtung eine Gerade berechnen,
und dann ausrechnen, ob diese Gerade eine Schnittmenge mit der BoundingBox des Zieles hat.
das ist letztendlich auch die Funktion, die bei der Engine mit drin sein sollte.
hab mich noch nicht eingehend mit der OGRE in PB 4.3 auseinandergesetzt,
vielleicht weiß ja jemand anderes mehr.
erklären kann ichs dir mal schnell als 2D beispiel:
nehmen wir mal an, nach oben ist 0° drehung.
du drehst dein objekt 30° nach rechts.
dann musst du Sin(30°) = 0.5 nach rechts und Cos(30°) = 0.866 nach oben gehen,
wenn du das objekt in dieser richtung bewegen willst.
das ist sein bewegungsvektor oder richtungsvektor. (0.5, 0.866)
wenn es sich jetzt am Ort x=500 y=300 befindet, ist sein Ortsvektor (500,300)
also rechnest du, wenn du das objekt bewegst,
in jedem Schritt x + 0.5 * Speed : y + 0.866 * Speed um den neuen ort zu erhalten.
also (500,300) + (0.5, 0.866) = (500.5, 300.866)
(achtung: das ist jetzt mathematisch, bei nem Screen ist die y-achse umgedreht.)
anstatt jetzt das objekt zu bewegen, kannst du auch immer wieder den richtungsvektur dazuaddieren,
um zu testen, ob in der bewegungs- oder schussrichtung vom objekt aus ein anderes objekt liegt.
weitergehend kannst du auch aus der Bewegungsrichtung eine Gerade berechnen,
und dann ausrechnen, ob diese Gerade eine Schnittmenge mit der BoundingBox des Zieles hat.
das ist letztendlich auch die Funktion, die bei der Engine mit drin sein sollte.
vieleicht kann dir das helfen
kopiere denn code in das verzeichnis der PB beispiele
du brauchst für den code PB4.3
kopiere denn code in das verzeichnis der PB beispiele
du brauchst für den code PB4.3
Code: Alles auswählen
#CameraSpeed = 5
Define.f KeyX, KeyY, MouseX, MouseY
InitEngine3D()
Add3DArchive("DATA", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
glob_screen_w=1024
glob_screen_h=768
OpenScreen(glob_screen_w,glob_screen_h,16,"test")
Global GlobalID.l
GlobalID=1000
Structure Shot
x.f
y.f
z.f
xx.f
yy.f
zz.f
c.w
id.w
cc.w
EndStructure
Global NewList Shot.Shot()
Procedure AddShot(x.f,y.f,z.f,xx.f,yy.f,zz.f)
AddElement(Shot())
Shot()\x=x
Shot()\y=y
Shot()\z=z
Shot()\xx=xx*2
Shot()\yy=yy*2
Shot()\zz=zz*2
EndProcedure
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), #PB_Material_Add)
CreateTerrain("terrain.png", MaterialID(0), 16, 1, 16, 1)
LoadTexture(5, "Flare.png")
CreateMesh(9,100)
SetMeshData(9,#PB_Mesh_Vertex|#PB_Mesh_Normal|#PB_Mesh_UVCoordinate,?CubePoints,16)
SetMeshData(9,#PB_Mesh_Face,?CubeTriangles,12)
LoadMesh (55 , "robot.mesh")
LoadTexture(55, "r2skin.jpg")
CreateMaterial(55, TextureID(55))
CreateEntity(55, MeshID(55), MaterialID(55),256,256,256)
EntityMaterial(55, MaterialID(55))
AnimateEntity(55, "Walk")
CreateMaterial(5, TextureID(5))
;DisableMaterialLighting(5, 1)
;MaterialBlendingMode(5, #PB_Material_Add)
CreateParticleEmitter(0, 10, 1, 1, 0,256,25,256)
ParticleMaterial(0, MaterialID(5))
ParticleTimeToLive(0, 0.1, 1)
ParticleEmissionRate(0,5)
ParticleSize(0,5,5)
ParticleColorRange(0, RGB(255,0,0), RGB(64,0,0))
AmbientColor(RGB(255,255,255))
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 512, 256, 512)
SkyDome("clouds.jpg",10)
Repeat
FlipBuffers()
ExamineKeyboard()
ExamineMouse()
RenderWorld()
If MouseButton(1)
mb1=4
Else
If mb1>0
mb1-1
EndIf
EndIf
If MouseButton(2)
mb2=4
Else
If mb2>0
mb2-1
EndIf
EndIf
ForEach Shot()
If Shot()\c=0
Shot()\c=1
GlobalID+1
Shot()\id=GlobalID
CreateEntity(100+Shot()\id,MeshID(9),MaterialID(5),Shot()\x,Shot()\y,Shot()\z)
buf=100+Shot()\id
bufx=EntityX(buf);+Shot()\xx
bufy=EntityY(buf);+Shot()\yy
bufz=EntityZ(buf);+Shot()\zz
bufy+TerrainHeight(bufx,bufz)+10
EntityLocate(buf,bufx,bufy,bufz)
EndIf
MoveEntity(100+Shot()\id,Shot()\xx,Shot()\yy,Shot()\zz)
Shot()\cc+1
If Shot()\cc>500
FreeEntity(100+Shot()\id)
DeleteElement(Shot())
EndIf
Next
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
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
Height.f = TerrainHeight(CameraX(0), CameraZ(0))
RotateCamera(0, MouseY, MouseX, RollZ, #PB_Relative)
MoveCamera (0, KeyX, -CameraY(0)+Height+50, KeyY)
If mb1=1
If PointPick(0,glob_screen_w/2,glob_screen_h/2);PointPick(0,MouseX(),MouseY())
AddShot(CameraX(0),-CameraY(0)+Height+80,CameraZ(0),PickX(),PickY(),PickZ())
EndIf
EndIf
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
End
#SQRT13 = 0.57735026
DataSection
CubePoints:
Data.f -0.5,-0.5,-0.5
Data.f -0.5,0,-0.5
Data.f 0,1
Data.f -0.5,-0.5,0.5
Data.f -0.5,0,0.5
Data.f 1,1
Data.f 0.5,-0.5,0.5
Data.f 0.5,0,0.5
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 0.5,0,-0.5
Data.f 1,1
Data.f -0.5,0.5,-0.5
Data.f -0.5,0,-0.5
Data.f 0,0
Data.f -0.5,0.5,0.5
Data.f -0.5,0,0.5
Data.f 1,0
Data.f 0.5,0.5,0.5
Data.f 0.5,0,0.5
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 0.5,0,-0.5
Data.f 1,0
Data.f -0.5,-0.5,-0.5
Data.f 0,1,0
Data.f 0,0
Data.f -0.5,-0.5,0.5
Data.f 0,1,0
Data.f 1,0
Data.f 0.5,-0.5,0.5
Data.f 0,1,0
Data.f 1,1
Data.f 0.5,-0.5,-0.5
Data.f 0,1,0
Data.f 0,1
Data.f -0.5,0.5,-0.5
Data.f 0,-1,0
Data.f 0,0
Data.f -0.5,0.5,0.5
Data.f 0,-1,0
Data.f 1,0
Data.f 0.5,0.5,0.5
Data.f 0,-1,0
Data.f 1,1
Data.f 0.5,0.5,-0.5
Data.f 0,-1,0
Data.f 0,1
CubeTriangles:
Data.w 0,4,7
Data.w 0,7,3
Data.w 1,5,4
Data.w 1,4,0
Data.w 2,6,5
Data.w 2,5,1
Data.w 3,7,6
Data.w 3,6,2
Data.w 9,8,11
Data.w 9,11,10
Data.w 12,13,14
Data.w 12,14,15
EndDataSection
- kob
- Beiträge: 116
- Registriert: 01.01.2008 02:02
- Computerausstattung: 2x 2.4 GHz Amd Cpu | Geforce N9600GT OC |2.5GB Ram |Windows 7 Ultimate
- Wohnort: Fulda
THX
Dankeder code hat mir geholfen , habe mir gleich mal die dem von
pb4.3 geladen , fand ich gut das die die engine geupdatet haben .
was ich aber doof finde ist das die hin und wieder befele rausnehmen .
da darfst du dein ganzen code umschreiben , die solten das lieber abwertzkomaktibel machen .
pb4.3 geladen , fand ich gut das die die engine geupdatet haben .
was ich aber doof finde ist das die hin und wieder befele rausnehmen .
da darfst du dein ganzen code umschreiben , die solten das lieber abwertzkomaktibel machen .
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Abwärtskompatibilität wird fürchterlich überschätzt.
das ist nur ne Kugel an 'ner Kette, wirklich brauchen tuts keiner.
... würde mich mal interessieren, was dir denn jetzt gefehlt hat in der neuen Version...
kann mich nicht entsinnen, dass so viel rausgenommen wurde...
im Endeffekt musst du dich einfach entscheiden
brauchst du die Befehle, die neu sind, dann musst du ein paar Sachen anders machen als vorher.
hast du bestehenden Code, bei dem es zu viel Aufwand ist, den Anzupassen, dann bleib bei der alten Version.
du kannst so viele PB-Versionen wie du lustig bist parallel installieren.
das ist nur ne Kugel an 'ner Kette, wirklich brauchen tuts keiner.
... würde mich mal interessieren, was dir denn jetzt gefehlt hat in der neuen Version...
kann mich nicht entsinnen, dass so viel rausgenommen wurde...
im Endeffekt musst du dich einfach entscheiden
brauchst du die Befehle, die neu sind, dann musst du ein paar Sachen anders machen als vorher.
hast du bestehenden Code, bei dem es zu viel Aufwand ist, den Anzupassen, dann bleib bei der alten Version.
du kannst so viele PB-Versionen wie du lustig bist parallel installieren.
- kob
- Beiträge: 116
- Registriert: 01.01.2008 02:02
- Computerausstattung: 2x 2.4 GHz Amd Cpu | Geforce N9600GT OC |2.5GB Ram |Windows 7 Ultimate
- Wohnort: Fulda
ja schon
Ich weis das ich mehrere versionen gleihzeitig laufen lassen kan .
ich fende es aber doof das es z.b. den befehl CountList() nicht mehr gibt .
Abwärtzkompaktibilität benutzt sogar DirectX . Und doof von Fantasysoftware finde ich auch das ich mit den update beschissen wurde . da
kauft man sich mal was , freut sich das man 10Jahre updates hat und dan kan man die einfach nicht laden . Toll
ich fende es aber doof das es z.b. den befehl CountList() nicht mehr gibt .
Abwärtzkompaktibilität benutzt sogar DirectX . Und doof von Fantasysoftware finde ich auch das ich mit den update beschissen wurde . da
kauft man sich mal was , freut sich das man 10Jahre updates hat und dan kan man die einfach nicht laden . Toll
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.