*NEU* Problem mit Transformationen



  • *verzweifel*
    heul... also, ich habe ein riesiges problem:
    ich habe eine vertex-struct mit den members x, y, z, u, v. (Position und Textur Coodrinates) diese "fülle" ich ganz normal in einen vertex buffer. während meines init codes setze ich die projection matrix:

    D3DXPerspectiveFovLH(&matProj, D3DXPI / 4, 1024 / 768, 1, 10000); 
    D3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);
    

    außerdem setze ich die "camera", für doese habe ich ein paar funktionen. die view matrix wird in folgender weise gebildet:

    D3DXMatrixTranslation(&matTrans, -xPos, -yPos, -zPos); 
    D3DXMatrixRotationYawPitchRoll(&matRot, -yRot, -xRot, -zRot); 
    D3DXMatrixMultiply(&matView, &matTrans, &matRot); 
    D3DDevice->SetTransform(D3DTS_VIEW, &matView);
    

    der oben genannte vertex buffer befindet sich ebenfalls in einer klasse, eine sprite klasse, um gleich die frage zu beantwortenm, warum ich keine vertices mit rhw (transformed) benutze: ich möchte eine art 3D-Sprites machen, wie in Blitz Basic, ich möchte es um alle axen drehen können, etc. also, in dieser sprite klasse habe ich natürlich auch eine funktion, die die world transformation "auf das sprite ausführt"

    D3DXMatrixTranslation(&matTrans, xPos, yPos, zPos); 
    D3DXMatrixRotationYawPitchRoll(&matRot, yRot, xRot, zRot); 
    D3DXMatrixScaling(&matScale, xScale, yScale, zScale); 
    matWorld = matScale * matRot * matTrans; 
    D3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
    

    Dann rendere ich die vertices ganz normal.
    ach ja, die vertices ( 4 stück, angeordnet als rechteck), definiere ich so:

    Verts[4] = { 
    {-100, -100, 1, 0, 0}, 
    {100, -100, 1, 1, 0}, 
    {-100, 100, 1, 1, 0}, 
    {100, 100, 1, 1, 1}, 
    };
    

    so, und was sehe ich am ende??????? nichts...........................
    also, die ganzen "operationen" mit den vertex buffern sind korrekt, den habe ich bereits verwendet n(auch ne klasse). ich vermute deshalb, dass es an den transformationen liegt, bitte helft mir.... danke

    an die mods: den alten thread bitte mal löschen...
    ich hab jetzt die code tags benutzt, ich hoffe, es lesen jetzt aucxh menschen dieses thema und können mir helfen... 😞



  • Hmmm, hast du die Textur gesetzt? Nimm mal zB weißen Hintergrund bei Clear

    Und ich weiß nciht, ob man das mit Der Camera so machen kann mit MatrixTranslation und so, weiß ich jetzt nicht genau.



  • also in meinem buch steht das so. (das mit der camera) ich habe diesen code auch fast so übernommen (wie gesagt, nur fast, ich habe die variablen umbenannt...)
    die textur setze ich auch, in der render methode dieses sprites. jedes sprite objekt "trrägt" einen zeiger auf ein objekt meiuner textur klasse. an dieser liegt es ar auch nicht, ich habe diese bereits mit hilfe des d3dxsprites getestet und sie lief einwandfrei.
    ich hatte jedoch auch eine idee:
    in den konstruktoren der kamera und der sprite klasse habe ich anstatt ZeroMemory D3DXMatrixIdentity füpr die "leerung" der struktur genommen, ich sehe aber immer noch nichts.
    ich habe beim rendern aauch schon sämtliche primitive types gewählt, nichtmal als pointlist hats gefunzt... ich denke wirklich, dass es an der Projection-, View-, oder Worldtransformation liegt.



  • erstens: Ausgaben der Debug runtimes untersuchen

    Bye, TGGC



  • und des weiteren (erstens...)?
    P.S. ich weiß doch aber garnet, was für werte in den matrizen und so stehen müssen



  • Hast du VC?
    Dann geh mal in Systemsteuereung->DirectX und stell DirectX Debug-Level auf Maximal und use Debug Version ein.
    Dann debuggen, bei VC unten im Ausgabefenster auf Register Debug klciken. Eventuelle Fehler kannste ja mal sagen.
    Was meinst du, mit man sieht nichts? Was passiert,w enn du clear mit Weiss aufrusfst?



  • Auch, wenn ich das Display weiß cöeare, sehe ich nichts.
    mit nichts meine ich: den bildschirm in der an clear übergebenen farbe.
    das mit den fehlern prüfe ich mal, vielleicht schaffe ich das heute noch (muss gleich weg), ansoinsten morgen früh/mittag



  • ach ja, ja, ich habe VC (6.0(
    sorry wegen doppelpost



  • Der Verzweifler schrieb:

    und des weiteren (erstens...)?

    Nicht den erstens Schritt vorm zweiten machen, erstmal sehen, ob das schon was bringt!

    Bye, TGGC



  • Ersetz mal:

    D3DXMatrixTranslation(&matTrans, -xPos, -yPos, -zPos);  
    D3DXMatrixRotationYawPitchRoll(&matRot, -yRot, -xRot, -zRot);  
    D3DXMatrixMultiply(&matView, &matTrans, &matRot);  
    D3DDevice->SetTransform(D3DTS_VIEW, &matView);
    

    durch:

    D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3( 0.0f, 0.0f,-20.0f ),
                                &D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),
                                &D3DXVECTOR3( 0.0f, 1.0f, 0.0f ));
    
    g_pd3dDevice->SetTransform(D3DTS_VIEW,&matView);
    

    Außerdem sollte man immer den erstens Schritt vorm zweiten machen, sonst fällt man auf die Fresse 😃



  • "vorm" kurz für "vor dem", genau wie "beim". Steht doch im Duden. *pfeif*

    Bye, TGGC



  • also, auch, wenn ich die zeilen wie vorgeschlagen ersetze, sehe ch nichts...
    ach ja, wenn ich in systemsteuerung auf directx klicke, kommt folgende fehlermeldung:
    This control panel is older than the directx install. the control panel will now exit.
    heeeeeeuuuuuuuuul.
    ach ja, noch was, wenn ich die werte in den matrizen und so "untersuche", scheint alles richtig zu sein.
    ich versteeeh das einfach niicht..... *heul*



  • also, ich glaube, das prob liegt woanders...
    ich habe nun mal versucht, mit meinem vertex buffer ein viereck mit transformed vertices zu rendern, aber irgendwie klappt nicht einmal mehr das...
    als ich die VB klasse fertig hatte, habe ich sie getestet, und sie lief... ich verstehe das einfach nicht........



  • hm, also, der vertex buffer funzt jetzt wieder, wenn ich das gleiuche mit transformed vertices mache, sehe ich das korrekte resultat. der fehler liegt also doch irgendwo in diesen transformations...
    was soll ich tun???



  • Korrekte Transformationsmatrizen setzen?

    Bye, TGGC



  • höh? das tue ich doch.
    naja, aber ist jetzt auch egal, es KLAPPT!!!! *freu*
    die vertices wwaren anscheinen falsch angeordnet.
    es tut sich jedoch nun ein neues prob auf...
    das sprote ist schwarz. und zwar immer. ich setze vor dem rendern natüröich die korrekte textur.
    was aber komisch ist, auch, wenn ich die vertices z.b. rot "einfärbe", sind sie schwarz. weiß jemand vielleicht, warum??



  • TGGC schrieb:

    "vorm" kurz für "vor dem", genau wie "beim". Steht doch im Duden. *pfeif*

    😕
    Darum ging's doch gar nicht...!? 😕

    Der Verzweifler schrieb:

    ach ja, wenn ich in systemsteuerung auf directx klicke, kommt folgende fehlermeldung:
    This control panel is older than the directx install. the control panel will now exit.

    Dann hast Du wahrscheinlich, nachdem Du das DX SDK installiert hast, nochmal eine neuere DX Runtime (von irgend'nem Spiel z.B.) installiert, also statt DX 9.0 - 9.0a oder b oder so.
    Nochmal die zusätzlichen Update Dateien vom SDK saugen und drüber installieren!



  • Wenn ich mal vermuten darf, dann vermute ich mal, daß du die Dinger noch beleuchtest, ohne eine Beleuchtung zu definieren. Also: Beleuchtung einfach mal abschalten.

    Sgt. Nukem schrieb:

    TGGC schrieb:

    "vorm" kurz für "vor dem", genau wie "beim". Steht doch im Duden. *pfeif*

    😕
    Darum ging's doch gar nicht...!? 😕

    genau 😃



  • Dann markier es doch _nicht_ fett.

    Nachts sind alle Katzen grau.

    Bye, TGGC



  • ok, es lag tatsächlich am licht, dane.
    ich nerve wahrscheinlich schon, aber ich erlaube mir zwei weitere frage (man, bin ich dreist... :-))

    1. nach ein bisschen probieren mit meinen sprites stellte ich fest, dass es ein weiteres problem gibt: wenn ich die farben der vertices ändere, läuft noch alles korrekt, aber wenn ich an den alpha channel gehe´nict. soll heißen, wenn ich z.b. D3DCOLOR_ARGB(128, 255, 255, 255) die farbe eines oder auch mehrwerer vertices einstelle, bleiben sie komplett sichtbar. auch nachdem ich die renderstates für alpha blending gesetzt habe, blieb die ausgabe unverändert... *sichdarüberaufregdassniewasklapptwasichcode*
    2. schön und gut, ich sehe meinen sprite, wenn das licht disabled ist. ich habe das teilö aber wie zu beginn gesagt als "3d-sprite" konzipiert, und will deshalb natürlich auch, dass es von lichtern beleuchtet werden kann. jetzt habe ich die frage, wie generiere ich die normalen für meinen vector (die zur beleuchtung doch notwendig sind, oder?). müssen diese nicht einfach vom mittelpunkt "wegzeigen"?
      danke "nochmal schonmal"... 😉

Log in to reply