Kollisionsabfrage Frage...



  • Hi,

    also, ich habe eine bild klasse. diese enthält x und y koordinaten, breite und höhe des bildes, rotationswinkel, vertex buffer (in diesem fall aber meiner meinung nach unwichtig) und eine textur (LPDIRECT3DTEXTURE8 / IDirect3DTexture8). mit hilfe der D3DX library lade ich per CreateTextureFromFileEx ein bild (mit color key) "in" die textur.
    frage: gibt es eine funktion für eine pixel genaue kollisionsabfrage mit einer anderen textur?? (ich weiß, zu allgemeine frage oder so... ;-)). wenn nicht, wie kann ich mir soiwas selbst schreiben?
    PS die durch den color key ausgeblendeten pixel soleln bei der abfrage natürlich ignoriert werden.
    PPS ich möchte NICHT bounding rectangles, circles, etc. benutzen, die abfrage soll pixel genau sein.

    hoffe, ohr könnt mir helfen, danke schonmal im voraus,
    cya



  • Das wird viel zu langsam, also lass es bleiben. Ansonsten müsstest du einen zweiten Framebuffer anlegen, beide Objekte mit der selben Projektion wie das "Original" Anzeigen und testen ob ein Pixel des ersten durch das zweite überschrieben wurde.



  • Na gut, trotzdem danke.
    cya



  • du könnest aber von beiden Sprites, die auf Kollision geprüft werden sollen ein Kollisionsbitmuster erstellen:

    1. Sprite:
    0 1 1 1 0
    0 1 0 1 0
    0 1 1 1 0
    0 1 0 1 0

    1 sind die Pixel des Sprites die auf Kollision geprüft werden sollen - die Nullen werden ignoriert

    2. Sprite:
    0 1 1 0 0
    0 1 0 1 0
    0 1 1 1 0
    0 1 0 1 0
    0 1 1 0 0

    mit der x und y Position kannst du nun einen vergleich auf "Pixelebene" anstellen

    Optimierungen für die Geschwindigkeit wären z. b. einteilen des Bitmaps in Sektoren - wenn sich die Hauptsektoren beider Bitmaps schneiden, dann schneiden sich auch die Untersektoren - usw. könnte man z. B. einen Octree einbauen oder so - das gleiche Problem hat man eigentlich auch bei der 3D Programmierung, wenn es daran geht zwei 3D Model auf "Dreieck-Ebene" auf Kollision zu prüfen - ist so zwar auch sehr langsam, aber mit Optimierungen möglich

    wenn du willst können wir ja mal zusammen an dem Problem arbeiten und sehen, ob wir eine sinnvolle Lösung finden - meine email: vertexwahn@gmx.de



  • hi wie erstelle ich solche bitmuster?

    das würde ja einer pixelgenauen kollision entsprechen.. und wie realisiere ich das in dx7(dd)?



  • hehe schrieb:

    hi wie erstelle ich solche bitmuster?

    Höh??
    Na, Du mußt doch wissen, welche Pixel kollidieren sollen und welche nicht?! Mit diesem Wissen baust Du Dir die dann. Bei größeren Mengen halt automatisiert.



  • Für obengenannten Fall entspricht dies aber nur einer Texelgenauen Kollision, bei DDraw sieht es hingegen wieder anders aus.



  • danke für die promme antwort.

    wie könnte ich das den in ddraw realisieren?
    eine pixelgenaue kollision kenne ich von der theorie schon aber die realisierung, da haperts.. wie sollte ich vorgehen?



  • Na steht doch nun schon da.



  • ja bei einfachen bitmaps bzw. bildern ist es ja leicht ein bitmuster zu erstellen aber bei kompleen bildern 😕



  • bitmap bild=ladeBildchen(bla);
    bool *bitmuster=new bool[bild.h*bild.w];
    
    for(int x=0;x<bild.w;++x)
     for(int y=0;y<bild.h;++y)
      bitmuster[x+y*bild.w]=pixel(bild, x, y)?1:0;
    
    //...
    //tu was mit bitmuster
    //...
    
    delete[] bitmuster;
    

    Meinste sowas?
    (pixel ist eine funktion die testet ob sich an der stelle x y des bildes bild ein pixel!=colorkey befindet und liefert true oder false zurueck)


Anmelden zum Antworten