Delen via


Patrooncoördinaten (Direct3D 9)

De meeste patronen, zoals bitmaps, zijn een tweedimensionale matrix met kleurwaarden. Patronen van kubieke omgevingstoewijzingen zijn een uitzondering. Zie Kubieke omgevingstoewijzing (Direct3D 9)voor meer informatie. De afzonderlijke kleurwaarden worden een patroonelement of texel genoemd. Elke texel heeft een uniek adres in de textuur. Het adres kan worden beschouwd als een kolom- en rijnummer, die respectievelijk u en v zijn gelabeld in de volgende afbeelding.

illustratie van een Texels adres als kolom- en rijnummers

Patrooncoördinaten bevinden zich in de textuurruimte. Dat wil gezegd, ze zijn relatief ten opzichte van de locatie (0,0) in het patroon. Wanneer een textuur wordt toegepast op een primitieve in 3D-ruimte, moeten de texelse adressen worden toegewezen aan objectcoördinaten. Ze moeten vervolgens worden omgezet in schermcoördinaten of pixellocaties.

Texels toewijzen aan schermruimte

Direct3D wijst texels in textuurruimte rechtstreeks toe aan pixels in schermruimte, waarbij de tussenliggende stap wordt overgeslagen voor een grotere efficiëntie. Dit toewijzingsproces is eigenlijk een inverse toewijzing. Dat wil gezegd dat voor elke pixel in schermruimte de corresponderende texelspositie in de textuurruimte wordt berekend. De textuurkleur op of rond dat punt wordt gesampleerd. Het samplingproces wordt patroonfiltering genoemd. Zie Texture Filtering (Direct3D 9)voor meer informatie.

Elk texel in een textuur kan worden gespecificeerd door de texelcoördinaat. Om texels echter toe te wijzen aan primitieven, vereist Direct3D een uniform adresbereik voor alle texels in alle texturen. Daarom wordt een algemeen adresseringsschema gebruikt waarin alle texelse adressen zich in het bereik van 0,0 tot 1,0 bevinden. Direct3D-toepassingen geven patrooncoördinaten op in termen van u, v-waarden, net zoals 2D Cartesische coördinaten, worden opgegeven in termen van x,y-coördinaten. Technisch gezien kan het systeem patronencoördinaten verwerken buiten het bereik van 0,0 en 1.0, en dit doen met behulp van de parameters die u hebt ingesteld voor patroonadressering. Zie Texture Addressing Modes (Direct3D 9)voor meer informatie.

Een resultaat hiervan is dat identieke patroonadressen kunnen worden toegewezen aan verschillende texelcoördinaten in verschillende patronen. In de volgende afbeelding is het patroonadres (0,5,1.0). Omdat de patronen echter verschillende grootten hebben, wordt het patroonadres toegewezen aan verschillende texels. Patroon 1, aan de linkerkant, is 5x5. Het patroonadres (0,5,1.0) wordt toegewezen aan Texel (2,4). Textuur 2, rechts, is 7x7. Het patroonadres (0,5,1.0) komt overeen met Texel (3,6).

illustratie van dezelfde patroonadrestoewijzing aan verschillende texels op verschillende patronen

In de volgende afbeelding ziet u een vereenvoudigde versie van het texelstoewijzingsproces. Dit voorbeeld is weliswaar zeer eenvoudig. Zie Direct3D 9-direct toewijzen aan Pixels (Direct3D 9) voor meer gedetailleerde informatie.

afbeelding van pixel (een vierkantje kleur) dat is toegewezen aan objectruimte

In dit voorbeeld wordt een pixel, links van de afbeelding, geïde idealiseerd in een vierkant van kleur. De adressen van de vier hoeken van de pixel worden toegewezen aan de 3D-primitieve in objectruimte. De vorm van de pixel wordt vaak vervormd vanwege de vorm van de primitieve in 3D-ruimte en vanwege de kijkhoek. De hoeken van het oppervlakgebied op de primitieve die overeenkomen met de hoeken van de pixel worden vervolgens toegewezen in de textuurruimte. Het toewijzingsproces vervormt de vorm van de pixel opnieuw, wat gebruikelijk is. De uiteindelijke kleurwaarde van de pixel wordt berekend van de texels in het gebied waar de pixelkaarten worden geplaatst. U bepaalt de methode die Direct3D gebruikt om de pixelkleur aan te komen wanneer u de filtermethode voor patronen instelt. Zie Texture Filtering (Direct3D 9)voor meer informatie.

Uw toepassing kan patrooncoördinaten rechtstreeks toewijzen aan hoekpunten. Deze mogelijkheid geeft u controle over welk gedeelte van een textuur is toegewezen aan een primitieve. Stel dat u een rechthoekige primitieve maakt die precies dezelfde grootte heeft als het patroon in de volgende afbeelding. In dit voorbeeld wilt u dat uw toepassing het hele patroon op de hele muur toe wijst. De patrooncoördinaten die uw toepassing toewijst aan de hoekpunten van de primitieve zijn (0.0.0,0), (1.0.0), (1.0,1.0) en (0,0,1.0).

illustratie van een patroonwand

Als u besluit om de hoogte van de muur met een halve te verlagen, kunt u het patroon vervormen om op de kleinere wand te passen, of u kunt patrooncoördinaten toewijzen die ervoor zorgen dat Direct3D de onderste helft van het patroon gebruikt.

Als u besluit om het patroon te vervormen of te schalen op de kleinere wand, is de filtermethode voor patronen van invloed op de kwaliteit van de afbeelding. Zie Texture Filtering (Direct3D 9)voor meer informatie.

Als u in plaats daarvan patrooncoördinaten toewijst om Direct3D de onderste helft van het patroon voor de kleinere wand te gebruiken, worden de patrooncoördinaten die uw toepassing toewijst aan de hoekpunten van de primitieve in dit voorbeeld (0,0,0,5), (1.0.0,5), (1.0,1.0) en (0,0,1.0). Direct3D past de onderste helft van het patroon toe op de muur.

Het is mogelijk dat patrooncoördinaten van een hoekpunt groter zijn dan 1,0. Wanneer u patrooncoördinaten toewijst aan een hoekpunt dat zich niet in het bereik van 0,0 tot en met 1,0 bevindt, moet u ook de patroonadresseringsmodus instellen. Zie Texture Addressing Modes (Direct3D 9)voor meer informatie.

Patrooncoördinaten en patroonfasen

Patrooncoördinaten zijn gekoppeld aan patronen via patroonfasen. Patronen worden toegewezen aan patroonfasen met SetTexture(stageIndex, pTexture). Zie IDirect3DDevice9::SetTexture.

Een FVF-code (Flexible Vertex Format) kan maximaal acht sets patrooncoördinaten definiëren. De patrooncoördinaatgegevens worden door de gebruiker in de hoekpuntgegevens geleverd. De gegevens worden aangeduid met een op nul gebaseerde index: 0 - 7. Er zijn maximaal acht patroonmixfasen. Een patroon is gekoppeld aan een bepaalde fase met behulp van SetTexture( stageIndex, pTexture).

Zodra dit is gebeurd, kan elke set patrooncoördinaten door elke fase worden gebruikt. Elke set coördinaten is gekoppeld aan een fase met behulp van SetTextureStageState( stageIndex, D3DTSS_TEXCOORDINDEX, textureCoordinateIndex ). Zie IDirect3DDevice9::SetTextureStageState. Op deze manier kunnen de mengfasen worden ingesteld voor het gebruik van patronen en eventuele patrooncoördinaten. Meerdere fasen kunnen dezelfde patronen of patrooncoördinaten gebruiken.

Aanvullende informatie vindt u in de volgende onderwerpen.

Direct3D-patronen