Objektauswahl im Leveleditor, Problem



  • Manmanman, was kann man denn hier groß falsch machen? Wieso zeigt der Strahl den ich zeichne so eigentlich genau hinter mich? Auch irgendwie komisch 🙂 Ich versteh nicht, wieso das nicht funktioniert, das ist so ein kleines Stück Code, hier kann man doch nichts falsch machen!

    D3DVIEWPORT9 viewport;
    	MainObjects.dd_obj.lpD3DDevice->GetViewport(&viewport);
    
    	POINT p;
    	GetCursorPos(&p);
    	ScreenToClient(MainObjects.dd_obj.hwnd, &p);
    
    	D3DXVECTOR3 point, vec;
    	point.x = (float)p.x;
    	point.y = (float)p.y;
    	point.z = 0.0f;
    
        D3DXMATRIX matWorld, matView, matProjection; 
    	MainObjects.dd_obj.lpD3DDevice->GetTransform( D3DTS_WORLD, &matWorld ); 
    	MainObjects.dd_obj.lpD3DDevice->GetTransform( D3DTS_VIEW, &matView ); 
    	MainObjects.dd_obj.lpD3DDevice->GetTransform( D3DTS_PROJECTION, &matProjection ); 
    
    	D3DXVec3Unproject(&vec, &point, &viewport, &matProjection,
    		&matView, &matWorld);
    
    		MainObjects.m_jet.Init(&MainObjects.dd_obj, MainObjects.m_camera.m_vPosition, vec*100);
    

    Menno 😞
    So wird man motiviert 🙄
    Kevin


  • Mod

    vielleicht wäre für dich die einfachste lösung, wenn du jedes objekt mit einer frabe (unter 32bit) zeichnest und dann aus dem frabebuffer den pixel ausließt auf dem die maus ist. über die ID kommst du dann sicherlich zum objekt.

    dann brauchst du keinen mathekram 😉

    rapso->greets();



  • ich hasse nichts mehr als ein ungelöstes Problem in seinem Zustand zu belassen 🙂 Ich hoff mal auf eure Hilfe 🙂 Google gibt mir auf den Befehl nur Forenthreads, in denen dann steht "Oh yeah, thanks, it works fine!"...nice, bei mir nicht 🙂



  • Die sagen das warscheinlich weils sie die Antworten gelesen, verstanden und umgesetzt haben. Und wenn der Strahl genau hinter dich zeigt, dann dreh ihn doch mal um.

    dann brauchst du keinen mathekram

    So langsam glaub ich auch, das ist hier die einzige Lösung. 😎

    Bye, TGGC \-/



  • hab ihn ja schon längst umgedreht...zeigt aber trotzdem in die falsche Richtung



  • dann dreh ihn nochmal rum?!



  • dann zeigt er wieder nach hinten....lol supa Idee



  • hat keiner ne idee woran das noch liegen könnte? Ist der Code, den ich gepostet habe, falsch? Ein Ja würde mir schon reichen, wenn ihr mir nicht alles sagen wollt *TGGC anguck*
    Gruß,
    Kevin



  • Ich weiss nun nicht, wie genau dein Koordinatensystem ist. Aber z= 0 find ich irgendwie komisch. Beim "Standard" Koordinatensystem würde das bedeuten man blickt paralell (?) zum Bildschirm.

    Bye, TGGC (Just think about it)



  • parallel 🙂
    Mh...was würdest du angeben? Soll ich vielleicht doch die erste genannte Methode anwenden? Mich wundert, dass weder die UnProject, noch die Funktion, die Stefan Zerbst gepostet hat, funktioniert....manmanman
    Gruß,
    Kevin



  • Hi,

    mich wundert vielmehr, dass ein Vektor immer in die verkehrte Richtung zeigt auch wenn man ihn umdreht 😃

    Was den Code und die 0 angeht so schau einfach mal auf den Code den ich gepostet habe. Dort steht eine 1 statt der 0 für z und da die Berechnung (die D3DXUnproject wohl auch so durchführen wird) diese Koordinate auch tatsächlich verwenden ist es nicht verwunderliuch, dass das Ergebnis ein anderes ist 😉

    regards,
    Stefan





  • Nein das mein ich nicht 🙂 Er zeigt zuerst hinter mich. OK, also dreh ich ihn um (per mal -1, bitte nicht lachen, wenn es falsch ist....hatte mit Vektoren noch nie was in der Schule zutun (vlt. mal 2dimensionale ganz kurz :))). Dann zeigt er aber nicht genau dahin, wo ich hinklicke 🙂
    Ich werde das mit dem z = 1 und der Funktion auf der Seite mal ausprobieren! DANKE!



  • Also mit dem Z = 1 und der Unproject Funktion sieht es schonmal ganz gut aus. Zu mindest wenn ich nicht weit "fliege". Lade ich zum Beispiel das ziemlich kleine Objekt heli.x und fliege nur ein wenig zurück und gehe mit der Maus über den Propeller, kommt der Strahl genau da an! Lade ich jetzt aber das Dinofile tiny.x und fliege ziemlich weit, um nach außerhalb des Models zu gelangen, und schieße dann zB auf die Hand (die sich in der Perspektive links unten in der Bildschirmecke befindet), schießt der Strahl zwar halbwegs in die Richtung, aber er trifft nicht die Hand, also geht schon sichtlich daneben, und das nicht, weil ich daneben klicke *g*....komisch 😕

    /EDIT
    Es KÖNNTE (!) ja sein, dass CJet nicht 100%ig funktioniert...deswegen teste ich das jetzt auf eine andere Methode. Ich möchte einfach die angeklickten Polygone farbig erscheinen lassen :). Da ich ja nicht so einfach beim alten Model sagen kann, dass er das Polygon nicht mehr zeichnen soll, oder anders zeichnen soll, dachte ich mir, ich mach einen neuen Vertex/Indexbuffer, indem alle Daten zu den angeklickten Polygonen stehen. Diese render ich dann einfach nach dem Model...ich denke, dass das aber Flimmern wird, oder? Gibt es eine Möglichkeit, das zu vermeiden?

    Danke euch allen,
    Gruß,
    Kevin



  • Surkevin schrieb:

    parallel 🙂
    Mh...was würdest du angeben? Soll ich vielleicht doch die erste genannte Methode anwenden?

    Ich würde den richtigen Strahl angeben. Welche Methode du benutzen willst, musst du schon selbst wissen.

    Bye, TGGC (Just think about it)



  • mh, also Feststellung (:) :
    Wenn ich mich direkt vom Start wegen GAR nicht wegbewege, sondern nur mit der Maus die Perspektive ändere, kommt der Strahl perfekt(est 🙂 da an, wo er soll, sobald ich mich aber wegbewege nicht mehr. Den Endpunkt berechne ich doch dann so:
    cameraposition + RayDir*500 oder ist da was falsch? Peinlich wärs 🙂
    Gruß,
    Kevin



  • Strahlen haben keinen Endpunkt.

    Bye, TGGC (Just think about it)



  • ja, da ich aber keine andere Möglichkeit fand, ihn visuell darzustellen, habe ich mir eine Klasse gebastelt, die einen Strahl mit Anfangs-und Endpunkt darstellen kann 🙂 Mich wundert, dass der Punkt nur, wenn sich die Kameraposition verändert, daneben geht 😕 Kannst du dir vorstellen wieso? Die Viewmatrix wird ja in die Berechnung einbezogen 😕 Bei Stefans Lösung stimmt die Richtung eigentlich, nur ist der Strahl dann immer ca. einen Meter 🙂 (schön, hier Maße anzugeben) über dem tatsächlich angeklickten Polygon 🙂

    Gruß,
    Kevin (Das Geburtstagskind 😉

    /EDIT
    Wollte jetzt mal die Methode von der Seite, die Stefan Zerbst gepostet hat ausprobieren, nur finde ich in der kompletten d3dx9math.h keine neue gleiche Funktion für D3DMath_VectorMatrixMultiply ... manman, wie heißt die denn hier? 🙂



  • Herzlichen Glückwunsch! 🤡 👍



  • *g* Danke, ein schönes Geschenk wäre ja, wenn das endlich mal klappen würde *fg*


Anmelden zum Antworten