Mehrere Grafiklayer in 3D Studio MAX



  • Hallo,

    ich denke Du brauchst Dich für Deine Frage nicht zu rechtfertigen, weil welcher Grafiker könnte Dein Problem schon lösen?

    Du kannst im 3d studio im Materialeditor für jeden Layer den "Map Channel" einstellen. Den gleichen Wert kann man auch beim erstellen der Texturkoordinaten angeben, so dass man jeder Textur eigene Koordinaten zuweisen kann.

    Das Problem wird aber sein, dass .X nur ein Koordinatenset unterstützt (zumindest wird nur eins exportiert, habe ich grade ausprobiert)

    Was möchtest Du denn mit den 2. Texturkoordinaten machen? Vielleicht lässt es sich ja durch eine Matrixtransformation bewerkstelligen.

    Wenn ich die *.max Dateien in *.3DS Dateien exportieren und anschliessend ins *.x format konvertiere

    Wieso machst Du das?
    Versuch mal das hier:
    http://www.andytather.co.uk/Panda/directxmax.aspx


  • Mod

    0x00000001 schrieb:

    Hallo,

    ich denke Du brauchst Dich für Deine Frage nicht zu rechtfertigen, weil welcher Grafiker könnte Dein Problem schon lösen?

    jeder halbwegs gute max modeller kann das sicherlich lösen, ich hab auch versucht welche hier reinzutriezen, aber die wollen sich nicht nur wegen der frage bzw antwort gleich regestrieren und meinten "soll er halt nen graphikerboard besuchen".

    rapso->greets();



  • Ishildur schrieb:

    Naja, aber es ist doch zumindest naheliegend, das Leute, welche 3D - Spiele programmieren, auch mit einem 3DStudio MAX umgehen können

    Nö, das ist überhaupt nicht naheliegend. Eher produzieren solche Leute da nur Schrott, siehe ich.

    Bye, TGGC



  • @ 0x00000001

    Ich muss auf gewisse Oberflächen 2 Texturen mappen, um diese anschliessend mit Texturetranslationen in entgegengesetzte Richtungen zu transformieren. Ich möchte auf diese Weise einen Schutzschild animieren. Da kommt auch das Problem mit der Sphere, welche auf der Innen sowie auf der Aussenseite sichtbar sein sollte. Denn das Raumschiff befindet sich ja innerhalb der Sphere...



  • Das ist dann ja alles eigentlich kein Problem.
    Jeder Vertex der Kugel hat eine Texturkoordinate. Durch zwei verschiedene Matrizen werden die jeweils transformiert, so dass Du dann 2 unterschiedliche Texturkoordinaten erhältst.
    An diesen zwei Koordinaten liest du dann die Farbe des Schildes aus einer (oder zwei) Textur(en), und multiplizierst die beiden Werte.

    Wenn der Schild von beiden Seiten sichtbar sein soll, musst Du das Backface Culling deaktivieren.



  • Ich glaube, du hast das nicht ganz richtig verstanden:
    Ich möchte ein Model mit 2 Texturen bespannen und die eine horizontal und die andere vertikal verschieben. Dazu möchte ich Multitexturing verwenden. Für diese Technologie muss allerdings jeder Vertex über 2 Texturkoordinaten verfügen. Die währe kein Problem, wenn ich das FVF bestimmen würde, doch leider macht dies die *.x Datei.

    Das Backface - Culling zu deaktivieren war auch mein erster Gedanke, doch leider entstehen dabei unter DirectX ganz hässliche grafische Artefakte. Ausserdem müssen ja die normelen auch nach innen und nach aussen zeigen, wegen der Lichtberechnungen.

    Mit freundlichen Grüssen Ishildur



  • Daraus lese ich dass Du noch die "Fixed function pipeline" verwendest (also keine shader). Mit shadern könntest Du Dein Problem viel einfacher lösen denke ich, aber es müsste natürlich auch so gehen.

    Ich würde mal
    pDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
    versuchen.
    Damit wird für die zweite Textur auch die erste (d.h. die null-te) Koordinate verwendet.

    hässliche grafische Artefakte

    liegt es am z-buffer?



  • Liegt es am Z-Buffer?

    Ich benutze folgende Renderstates und TextureStageStates...

    this->ppDev.AutoDepthStencilFormat = D3DFMT_D24S8;
    
    // prepare the device for rendering the world
    this->pD3DDev->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
    this->pD3DDev->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
    this->pD3DDev->SetRenderState(D3DRS_LIGHTING,true);
    this->pD3DDev->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
    this->pD3DDev->SetRenderState(D3DRS_ZWRITEENABLE,true);
    this->pD3DDev->SetRenderState(D3DRS_SPECULARENABLE,true);
    
    // configurate the texture - blending options
    for(i=0;i<3;i++){
     this->pD3DDev->SetTextureStageState(i,D3DTSS_TEXCOORDINDEX,0);
     this->pD3DDev->SetTextureStageState(i,D3DTSS_COLORARG2,D3DTA_CURRENT);
     this->pD3DDev->SetTextureStageState(i,D3DTSS_ALPHAARG2,D3DTA_CURRENT);
    }
    

    Habe ich da was falsch gemacht, was die grafischen Artefakte verursachen könnte?

    Wie kann ich sonst eine Kugel modelieren, welche von innen sowie von aussen sichtbar ist?



  • D3DRS_ZWRITEENABLE würde ich mal ausmachen, der Schild soll ja nichts verdecken. (Ich geh davon aus, dass dieser Schild so aussehen soll wie man es aus StarTrek kennt)

    Ansonsten weiß ich nicht was das für Artefakte sein könnten, vielleicht kannst Du mal ein Bild davon herzeigen.



  • Hallo,

    als Nichtprogrammierer fällt mir nur ein:
    Nimm 2 Modelle deines Schutzschildes, wobei du beim Inneren die Normalen umdrehst, damit sie nach Innen zeigen. Bei Texturen mit Alphatransparenz sieht man dann von Innen und Aussen beide Texturen.
    Hilfreich?

    Peer


Anmelden zum Antworten