Есть примеры таких эффектов, о которых вы говорите во многих играх. Во-первых, есть глубина резкости , при которой объект на расстоянии выглядит размытым, точно так же, как если бы камера фокусировалась на вещах, расположенных только близко к ней, как в этом примере. Вы можете изучить другие примеры, связанные с этим, в пакете DirectX SDK - там тоже есть примеры кода. Для OpenGL вы получите их в сети, если будете искать.
Второе, что вы можете захотеть увидеть, это то, что может быть известно как Geometry MipMaping или Progressive Meshes, что, как следует из названия, похоже на mip-mapping текстуры, но для геометрии. Количество полигонов в сетке уменьшается по мере удаления объекта от камеры. Это помогает в повышении производительности. В D3D существует функция, которая поможет автоматически генерировать прогрессивные сетки. Вот:
HRESULT WINAPI D3DXGeneratePMesh(
LPD3DXMESH pMesh,
const DWORD *pAdjacency,
const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,
const FLOAT *pVertexWeights,
DWORD MinValue,
DWORD Options,
LPD3DXPMESH *ppPMesh
);
Вот пример этого:
РЕДАКТИРОВАТЬ:
рассмотреть следующее изображение
Это усечение камеры. Линия, проходящая прямо через середину, является вектором LookAt. Теперь, предполагая, что игрок всегда захочет сфокусироваться в центре экрана, вы определяете угол x. Любой объект, который будет расположен под углом больше, чем определенный х, будет иметь рендеринг с низким разрешением, а те, которые находятся в пределах угла, будут отображаться с деталями. Таким образом, объекты в центре экрана будут более детальными, чем объекты по бокам. Если игрок не смотрит в центр, просто отрегулируйте эту центральную линию в направлении, в котором смотрит игрок. (или, возможно, повернуть всю камеру в этом направлении).