WPF 3D закрытые элементы кажутся "шаткими" - PullRequest
2 голосов
/ 30 августа 2011

Я пишу трехмерный глобус в WPF.

Большинство из них работает хорошо, но когда я смотрю на гору слишком близко (скажем, 10 метров или меньше), она становится «шаткой» (то есть - каждое крошечное движение камеры меняет вершины модели горы, так выглядит как желе.)

Я пытался играть с ближней и дальней плоскостями, задавая диапазоны от 0,001 до 5 на ближней плоскости и от 100 до 1000000 и даже положительную бесконечность на дальней плоскости, но это не помогло.

Я также пытался масштабировать модель от 1/10 ее размера и до 10-кратного ее размера, и даже округлять результат широты / долготы / альт до ECEF до сантиметров, метров и 10-метровых единиц.

Ничего не помогает, оно все равно выглядит шатким (хотя округление до 10-метровых блоков помогает, и в этом случае колебание очень редкое, но оно деформирует модели настолько, что его невозможно использовать).

Я думаю, это в основном проблема точности. Любая идея, как я могу повысить точность или любая другая идея, как это исправить?

Итай.

UPDATE: Я добавил видео , демонстрирующее артефакт.

решаемые Я обнаружил ту же проблему со сборкой моделей в World Wing, спросил и ответил здесь .

Обычно проблема была, как я и подозревал, проблемой точности. Чтобы решить эту проблему, нужно было сохранить фактическую камеру в начале координат (0,0,0), одновременно позволяя ей вращаться, и переместить все плитки в противоположном направлении.

При создании каждой плитки я вычитаю центр XYZ плитки из каждой из вершин плитки, так что конечная плитка выстраивается вокруг (0,0,0).

В плитке GeometryModel3D Я установил трансформацию трансляции, чтобы она располагалась в правильном положении.

1 Ответ

1 голос
/ 01 сентября 2011

Я обнаружил, что была та же проблема со сборкой моделей в World Wing, спросил и ответил здесь .

Как правило, проблема, как я и подозревал, была проблема точности.Чтобы решить эту проблему, нужно было сохранить фактическую камеру в исходной точке (0,0,0), одновременно позволяя ей вращаться, и переместить все плитки в противоположном направлении.

При создании каждой плитки я вычитаюXYZ центр плитки от каждой из вершин плитки, поэтому конечная плитка построена вокруг (0,0,0).

В плитке GeometryModel3D я установил трансформацию трансляции, чтобы она располагалась в правильном положении.

...