Tag: directx

Entries for tag "directx", ordered from most recent. Entry count: 82.

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

Pages: > 1 ... 7 8 9 10 11 >

# Kolejność pól FVF

Tue
22
Apr 2008

O tym jeszcze chyba nie pisałem, a sprawa jest ciężka, bo DirectX SDK, o ile wiem, jasno tego nie precyzuje. Chodzi o kolejność, w jakiej powinny pojawiać się pola w strukturze wierzchołka opisywanej przez FVF. Dlatego postanowiłem sobie to raz a porządnie spisać:

Comments | #directx Share

# Przekształcenie wektora przez macierz

Thu
20
Mar 2008

Transformację w 3D opisuje macierz 4x4. Pełne przekształcenie punktu (x,y,z) przez taką macierz polega na pomnożeniu (x,y,z,1) przez tą macierz, a potem podzieleniu trzech pierwszych składowych przez składową czwartą w. Używamy tu tzw. współrzędnych jednorodnych (ang. Homogeneous Coordinates). W D3DX dokonuje tego funkcja D3DXVec3TransformCoord.

Przekształcenie wektora wskazującego kierunek (w przeciwieństwie do punktu opisującego położenie) musi nie brać pod uwagę translacji, czyli czwartego wiersza macierzy. Dlatego przekształcenie wektora polega zwykle na pomnożeniu (x,y,z) przez podmacierz 3x3 tej macierzy. W D3DX dokonuje tego funkcja D3DXVec3TransformNormal.

Jeśli ten wektor jest wektorem normalnym wierzchołka siatki, teoretycznie należy go przekształcić przez odwrotność transpozycji (lub transpozycję odwrotności - to bez różnicy) tej macierzy, której używamy do przekształcania pozycji wierzchołków. W praktyce jednak, jeśli podmacierz 3x3 tej macierzy zawiera tylko rotację (i ewentualnie skalowanie proporcjonalne), a nie zawiera skalowania nieproporcjonalnego ani ścinania, wektory bazowe w tej macierzy są ortogonalne, więc jej odwrotność jest równa jej transpozycji i te przekształcenia się znoszą. Dlatego wystarczy przekształcić wektor wprost przez daną macierz, bez odwracania i transponowania (a wynik ewentualnie znormalizować, jeśli było skalowanie).

W swojej bibliotece matematycznej mam jeszcze jedną funkcję, nazwaną po prostu Transform. Przekształca ona punkt (x,y,z,1) przez podmacierz 4x3 podanej macierzy, nie wyliczając współczynnika w i nie dzieląc przez niego. To znacznie przyspiesza obliczenia względem funkcji TransformCoord i wystarcza wszędzie tam, gdzie macierz nie zawiera przekształcenia perspektywicznego, bo jej czwarta kolumna jest wtedy zawsze równa (0,0,0,1).

Za wszelkie uproszczenia przepraszam. Możnaby o tym dużo pisać. Chciałem tu tylko pokazać, że teoretyczne "pomnożyć wektor przez macierz" przybiera w praktyce różne formy i trzeba umieć prawidłowo je stosować.

Comments | #math #directx Share

# D3DFVFCAPS_PSIZE

Wed
12
Mar 2008

Wiem, że mechanizm Point Sprites jest przestarzały i ma wielu przeciwników, ale czasem jest dobrym rozwiązaniem. Ta notka będzie dla tych, którzy go stosują. Mogą się oni nieprzyjemnie zdziwić (tak jak ja ostatnio), że na niektórych kartach graficznych cząsteczki mają złą wielkość (np. są ogromne zamiast takich jakie mają być albo nie widać ich w ogóle).

Winny jest D3DFVFCAPS_PSIZE. Ten Caps mówi, czy rozmiar cząsteczki może być brany ze struktury wierzchołka o semantyce D3DFVF_PSIZE. Co ciekawe, legitymują się nim wszystkie, nawet stare karty firmy ATI, ale z kart firmy NVIDIA tylko te należące do generacji GeForce 6 i nowszych.

Co wobec tego zrobić? Kiedy rozmiar punktu nie może być brany z wierzchołka, jest odczytywany z ustawienia D3DRS_POINTSIZE. Na szczęście nawet wtedy wierzchołek może zawierać element D3DFVF_PSIZE, tylko on po prostu nie działa. Tak więc prawidłowym rozwiązaniem jest używać D3DFVF_PSIZE jeśli jest taka potrzeba, ale na wszelki wypadek wyliczyć też jakiś średni rozmiar cząsteczki i wpisać go do D3DRS_POINTSIZE.

Comments | #rendering #directx Share

# Prezentacja do wykładu o Direct3D

Thu
28
Feb 2008

Zrobiłem w ramach pewnych zajęć na studiach prezentację do wykładu na temat Direct3D 9. Obejmuje przegląd biblioteki od inicjalizacji poprzez renderowanie trójkątów, bufory wierzchołków i indeksów, teksturowanie, oświetlenie aż do shaderów. Ma 96 slajdów. Nie wiem, czy z samej prezentacji - nie słysząc wykładu - można się dużo nauczyć, ale zapraszam do przeglądania:

Comments | #productions #directx Share

# Wydajność wczytywania tekstur w Direct3D 9

Mon
04
Feb 2008

Wydajność wczytywania tekstur w Direct3D 9 - Eksperyment - to mój nowy artykuł. Zapraszam do przeglądania. Powstał w wyniku prostego eksperymentu, jaki przeprowadziłem, żeby zbadać wydajność wczytywania tekstur przez Direct3D 9 z różnych formatów graficznych.

To część większego tematu, którym ostatnio się zainteresowałem - problemu wydajności wczytywania gry. Temat ten jest powiązany także ze stosowaniem kompresji w VFS, odpowiednią metodą realizowania wejścia-wyjścia (zobacz np. [To]), przygotowaniem wszelkich danych od razu w formacie docelowym (aby nie trzeba było niczego konwertować ani parsować podczas ładowania), czy nawet bezpośrednią serializacją danych binarnych do pamięci, łącznie z siecią obiektów powiązanych wskaźnkami (zobacz np. [To] i [To] albo cokolwiek na temat serializacji).

Zadałem też pytanie na forum.gamedev.pl, a cennych odpowiedzi udzielili mi m.in. ludzie z firmy CD Projekt :D

Comments | #productions #directx #rendering Share

# Koszmar DrawIndexedPrimitive

Sat
02
Feb 2008

Dzisiaj postanowiłem zwrócić waszą uwagę na pewną sprawę w interfejsie DirectX, która dla zaawansowanych jest oczywista, a początkującym może sprawić nie lada problem. Mnie długo zajęło zrozumienie, co dokładnie oznaczają parametry liczbowe funkcji:

HRESULT SetStreamSource(
  UINT StreamNumber,
  IDirect3DVertexBuffer9 * pStreamData,
  UINT OffsetInBytes,
  UINT Stride
);
HRESULT DrawIndexedPrimitive(
  D3DPRIMITIVETYPE Type,
  INT BaseVertexIndex,
  UINT MinIndex,
  UINT NumVertices,
  UINT StartIndex,
  UINT PrimitiveCount
);

Warto zgłębić ten temat, by uniknąć potem wrednych błędów (na czele z klasycznym "Nic nie widać" :) Pisząc w największym skrócie:

Comments | #directx #rendering Share

# DirectX 10 jest fajny

Wed
09
Jan 2008

Zająłem się ostatnio Direct3D 10 i bardzo mi się podoba. API jest piękne, a karta GeForce 8800 GT ma ogromną moc obliczeniową. Zrzucenie balastu wstecznej kompatybilności zawsze wychodzi na dobre. Szkoda tylko, że wymaga tak nowoczesnego sprzętu i co gorsza, Windowsa Vista. Moje pierwsze eksperymenty:

A to jest 750000 wierzchołków na klatkę generowane w pełni na GPU (bez żadnego bufora, tekstury czy innych danych podawanych do shadera), z użyciem instancingu i obliczeń na liczbach całkowitych:

Comments | #rendering #directx Share

# Szarpanie gry

Fri
07
Dec 2007

Szarpanie gry to wredny błąd. Długo nie wierzyłem w ogóle w jego istnienie - dopóki sam go nie doświadczyłem w swoim kodzie, najpierw na laptopie, a potem również na blaszaku. Chodzi o sytuację, kiedy FPS-ów jest dużo, ale mimo tego animacja "szarpie". Powiązany z tym może być jest błąd opóźniania się obrazu za wejściem z myszki, doświadczany przy pisaniu GUI. Rozwiązania są różnorodne:

Comments | #directx #rendering #algorithms Share

Pages: > 1 ... 7 8 9 10 11 >

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2020