ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4442021
Jetzt (Chat):
29 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
DirectX API
(gelöst) Reflection map
Normal
AutorThema
FredK Offline
ZFX'ler


Registriert seit:
06.05.2004

Schleswig-Holstein
(gelöst) Reflection mapNach oben.
Problem (warscheinlich) gelöst
Ich versuche grad ne nette Wasserspiegelung einzubauen. Hab mich dabei an http://keepcoding.bplaced.net/kcdev/tutorials/DXTutWater.pdf gehalten.

Mein Problem liegt dabei beim Zusammenstöpseln der ReflectionMatrix für die Reflection map.

Code:
float h=-3.9f;
                //Wasserspiegelung
                D3DXMATRIX mRefl(    1.0f, 0.0f,        0.0f, 0.0f,
                                    0.0f, -1.0f,    0.0f, 0.0f,
                                    0.0f, 0.0f,        1.0f, 0.0f,
                                    0.0f, 2.0f * h, 0.0f, 1.0f );
                // Kameraposition spiegeln
                D3DXVECTOR3 vCamera;
                D3DXVec3TransformCoord(&vCamera, &position,&mRefl );
                D3DXMatrixMultiply( &mRefl, &mRefl, &matView );

                // Projektionsmatrix modifizieren
                D3DXPLANE Plane = D3DXPLANE( 0.0f, -1.0f, 0.0f, h );
                D3DXMATRIX mProjModified = ClipProjectionMatrix( mRefl, matProj, Plane );

                matWorldViewProjection=this->TransMat*mProjModified;


Code:
D3DXMATRIX ClipProjectionMatrix( D3DXMATRIX &mView,D3DXMATRIX &mProj,D3DXPLANE &ClipPlane )
{
    D3DXPLANE vProjClipPlane;
    D3DXPLANE vClipPlane;
    D3DXMATRIX mClipProj;

    D3DXMATRIX mViewProj = mView * mProj;
    D3DXPlaneNormalize( &ClipPlane, &ClipPlane );
    D3DXMatrixInverse( &mViewProj, NULL, &(mView*mProj) );
    D3DXMatrixTranspose( &mViewProj, &mViewProj );

    // die Clipping-Ebene in den Clip-Space transformieren
    D3DXPlaneTransform( &vProjClipPlane, &vClipPlane, &mViewProj );

    if (vProjClipPlane.d == 0)
    {
        // die Ebene ist senkrecht zur Near-Clipping-Plane
        return mProj;
    } else if (vProjClipPlane.d > 0)
    {
        // Ebene umkehren
        vClipPlane = D3DXPLANE( -ClipPlane.a, -ClipPlane.b,
        -ClipPlane.c, -ClipPlane.d );
        // Clipping-Ebene in den Clip-Space transformieren
        D3DXPlaneTransform( &vProjClipPlane, &vClipPlane, &mViewProj );
    }

    D3DXMatrixIdentity( &mClipProj );

    // Daten in die z-Spalte schreiben
    mClipProj._13 = vProjClipPlane.a;
    mClipProj._23 = vProjClipPlane.b;
    mClipProj._33 = vProjClipPlane.c;
    mClipProj._43 = vProjClipPlane.d;
    return mProj * mClipProj;
}


Im Moment verdächtige ich die Zeile matWorldViewProjection=this->TransMat*mProjModified;
this->TransMat enthält die verschiebung und Skalierung meiner Objekte. Ich hab den Verdacht, dass ich sie falsch eingebaut habe.

Edit:
mProjModified ist, wie der Name schon sagt nur die Projektionsmatrix. Es muss daher heißen: matWorldViewProjection=this->TransMat*mRefl*mProjModified;

Das liefert dann auch bessere Ergebnisse. Ich hoffe, dass mein Problem damit gelöst ist.

2 Mal gendert, zuletzt am 27.02.2009, 21:16:15 Uhr von FredK.
27.02.2009, 15:13:24 Uhr
www.funex.tk
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel