Istnieją przykłady takich efektów, o których mówisz w wielu grach. Po pierwsze, istnieje głębia ostrości , która sprawia, że obiekt z odległości wygląda rozmazany, tak jakby aparat ustawiał ostrość tylko na obiektach znajdujących się blisko niego, jak w tym przykładzie. Możesz zbadać więcej związanych z tym przykładów w pakiecie DirectX SDK - one również mają tam przykładowy kod. W przypadku OpenGL znajdziesz je w sieci, jeśli będziesz szukać.
Drugą rzeczą, którą możesz chcieć zobaczyć, może być tak zwana Geometry MipMaping lub Progressive Meshes, która, jak sama nazwa wskazuje, jest podobna do mapowania mipów tekstur, ale w przypadku geometrii. Liczba wielokątów w siatce zmniejsza się w miarę oddalania się obiektu od aparatu. Pomaga to w zwiększeniu wydajności. W D3D istnieje funkcja, która pomoże automatycznie wygenerować siatki progresywne. Oto on:
HRESULT WINAPI D3DXGeneratePMesh(
LPD3DXMESH pMesh,
const DWORD *pAdjacency,
const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,
const FLOAT *pVertexWeights,
DWORD MinValue,
DWORD Options,
LPD3DXPMESH *ppPMesh
);
Oto przykład:
EDYCJA:
Rozważ następujący obraz-
To jest wybrzuszony fragment aparatu. Linia przechodząca przez środek jest wektorem LookAt. Teraz, zakładając, że gracz zawsze będzie chciał skupić się na środku ekranu, definiujesz kąt x. Każdy obiekt, który zostanie ustawiony pod kątem większym niż określony x, będzie renderowany w niskiej rozdzielczości, a te, które znajdują się w tym kącie, będą renderowane ze szczegółami. W ten sposób obiekty na środku ekranu będą bardziej szczegółowe niż te po bokach. Bo jeśli gracz nie patrzy na środek, po prostu dostosuj tę linię środkową do kierunku, w którym gracz patrzy. (lub może obróć całą kamerę w tym kierunku).