Transformatie weergeven (Direct3D 9)
In deze sectie worden de basisconcepten van de weergavetransformatie geïntroduceerd en vindt u meer informatie over het instellen van een weergavetransformatiematrix in een Direct3D-toepassing.
De weergavetransformatie zoekt de kijker in de wereldruimte en transformeert hoekpunten in de cameraruimte. In de cameraruimte, de camera of kijker, bevindt zich in de oorsprong, die in de positieve z-richting kijkt. Zoals u weet, gebruikt Direct3D een linkshandig coördinaatsysteem, dus z is positief in een scène. De weergavematrix verplaatst de objecten in de wereld rond de positie van een camera - de oorsprong van de cameraruimte - en stand.
Er zijn veel manieren om een weergavematrix te maken. In alle gevallen heeft de camera een logische positie en oriëntatie in de wereldruimte die wordt gebruikt als uitgangspunt om een weergavematrix te maken die wordt toegepast op de modellen in een scène. De weergavematrix vertaalt en draait objecten om ze in de cameraruimte te plaatsen, waar de camera zich bevindt. Een manier om een weergavematrix te maken, is door een vertaalmatrix te combineren met rotatiematrices voor elke as. In deze benadering is de volgende algemene matrixvergelijking van toepassing.
In deze formule is V de weergavematrix die wordt gemaakt, T is een vertaalmatrix die objecten in de wereld verplaatst en Rₓ via Rz rotatiematrices zijn die objecten langs de x-, y-en z-as draaien. De vertaal- en draaimatrices zijn gebaseerd op de logische positie en oriëntatie van de camera in de wereldruimte. Dus als de logische positie van de camera in de wereld <10.20.100>is, is het doel van de vertaalmatrix om objecten -10 eenheden langs de x-as te verplaatsen, -20 eenheden langs de y-as en -100 eenheden langs de z-as. De draaimatrices in de formule zijn gebaseerd op de stand van de camera, in termen van hoeveel de assen van de cameraruimte buiten de uitlijning met de wereldruimte worden gedraaid. Als de eerder genoemde camera bijvoorbeeld recht naar beneden wijst, is de z-as 90 graden (pi/2 radialen) die niet zijn uitgelijnd met de z-as van de wereldruimte, zoals wordt weergegeven in de volgende afbeelding.
De draaimatrices passen rotaties van gelijke, maar tegenovergestelde grootte toe op de modellen in de scène. De weergavematrix voor deze camera bevat een draaiing van -90 graden rond de x-as. De draaimatrix wordt gecombineerd met de vertaalmatrix om een weergavematrix te maken waarmee de positie en stand van de objecten in de scène wordt aangepast, zodat de bovenkant van de camera naar boven gericht is, waardoor de camera boven het model staat.
Een weergavematrix instellen
De D3DXMatrixLookAtLH- en D3DXMatrixLookAtRH helperfuncties maken een weergavematrix op basis van de cameralocatie en een kijkpunt.
In het volgende voorbeeld wordt een weergavematrix gemaakt voor linkshandige coördinaten.
D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);
Direct3D maakt gebruik van de wereld en bekijk matrices om verschillende interne gegevensstructuren te configureren. Telkens wanneer u een nieuwe wereld of weergavematrix instelt, berekent het systeem de bijbehorende interne structuren opnieuw. Het instellen van deze matrices is vaak tijdrovend voor berekeningen. U kunt het aantal vereiste berekeningen minimaliseren door uw wereld samen te voegen en matrices te bekijken in een wereldweergavematrix die u als wereldmatrix hebt ingesteld en vervolgens de weergavematrix in te stellen op de identiteit. Bewaar kopieën van afzonderlijke wereld en bekijk matrices in de cache die u indien nodig kunt wijzigen, samenvoegen en de wereldmatrix opnieuw kunt instellen. Ter duidelijkheid maken de voorbeelden zelden gebruik van deze optimalisatie.
Verwante onderwerpen