In Ogre Kugel "Werfen"

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
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"

Beitrag von kob »

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 .
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:

Beitrag von xperience2003 »

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
Benutzeravatar
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

Beitrag von kob »

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 "
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

Beitrag von Kaeru Gaman »

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.
Benutzeravatar
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

Beitrag von kob »

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

Beitrag von Kaeru Gaman »

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.
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Beitrag von Kevin »

vieleicht kann dir das helfen
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
Benutzeravatar
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

Beitrag von kob »

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 .
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

Beitrag von Kaeru Gaman »

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.
Benutzeravatar
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

Beitrag von kob »

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
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
Antworten