Obsługa rysunku liniowego w D3DX (Direct3D 9)
D3DX to biblioteka narzędzi, która zapewnia usługi pomocnicze. Jest to warstwa powyżej składnika Direct3D.
D3DX obsługuje linie antyaliasowane o szerokości jednego piksela. Wzorce linii nie są już obsługiwane.
Biblioteka rysunków liniowych emuluje linie przy użyciu trójkątów tekstury i przyjmuje następujące założenia:
- Sprzęt jest dostępny za pośrednictwem interfejsów Direct3D 9.
- Dostępny jest co najmniej jeden etap tekstury.
- Używane są tekstury 64x64.
- Dostępne są następujące tryby:
- Filtrowanie dwuliniowe
- Tryb adresowy ograniczenia
- Tryb owijania adresu
- Modulat operacji alfa
- Mieszanie alfa (SRCBLEND = SRC_ALPHA, DESTBLEND = INV_SRC_ALPHA)
- Test alfa, jeśli mieszanie alfa jest niedostępne; wynik niższej jakości
W przypadku renderowania linii antyaliasowanych w obiektach docelowych renderowania wielopróbkowego użyj ID3DXLine, tworzącego teksturowane wielokąty. Wartości pokrycia pikseli generowane przez rasteryzację linii antyaliasowej, modulują wartość alfa pikseli obliczoną przez cieniowanie pikseli. Aby narysować linię antyaliasowaną, aplikacja musi włączyć mieszanie alfa, a następnie musi ustawić stan renderowania D3DRS_ANTIALIASEDLINEENABLE na TRUE.
Opis funkcjonalności
Biblioteka obsługuje rysowanie kolorowych pasów linii z następującymi funkcjami linii, z których każda jest niezależna od innych:
- Szerokość linii
- Wzorzec linii z powtórzeniem (licznik wzorca linii resetuje się przy każdym wywołaniu ID3DXLine::Draw lub ID3DXLine::DrawTransform. Nie resetuje się przy każdym segmencie wielolinowego paska).
- Antialiasing
- Linie typu OpenGL
Notatka
Żadne mitering nie jest obsługiwane.
Biblioteka używa natywnej obsługi rysunku linii sprzętowej (jeśli jest dostępna na urządzeniu) tylko wtedy, gdy:
- Szerokość linii wynosi 1.
- Nie włączono wzorca linii.
Linie antyaliasowane o szerokości jednego piksela są obsługiwane przez niektóre sprzęty, więc biblioteka korzysta z tego, jeśli jest to dostępne. Element członkowski LineCaps struktury D3DCAPS9 wylicza funkcje sprzętowe dla prymitywów rysowania linii.
Gdy jest używany rysunek linii oprogramowania, każdy wiersz jest rozszerzany na prostokąt, a cztery wierzchołki są wysyłane do sterownika.
Każdy segment linii jest rysowany z dwoma trójkątami. Szerokość elementu pierwotnego to określona szerokość plus 1,0, co może spowodować dodatkowy wiersz lub kolumnę pikseli. Gdy linia staje się szersza, gradient antyalii w teksturze staje się bardziej grubszy, a bardziej nieprzezroczyste texelsy są replikowane wokół środka. Gradient jest zakodowany w kierunkowi v tekstury i zwykle replikowany wzdłuż kierunku u. Sposób adresowania tekstury dla v to clamp.
Każdy segment wiersza na liście może być traktowany jako oddzielny wiersz, który rozpoczyna się od poprzedniego punktu końcowego.
Jakość antyaliasingowa wzdłuż krawędzi równoległych do długości oryginalnej linii cierpi, gdy linia staje się szersza. Oczekuje się, że szerokość linii większa niż 32,0 zacznie wykazywać artefakty wzdłuż tych krawędzi.
Tematy pokrewne