2013-07-31 3 views
0

Я пытаюсь создать накладку сетки для своего «ландшафта».XNA - Слишком большое наложение сетки

В настоящее время я использую linelist для создания линий сетки, которые у меня есть.

Однако, чтобы остановить от г-глубина боевых действий, я должен был установить depthBais к 1.

Как вы можете увидеть в первой картине линия сетки получить менее видное дальнейшее расстояние они от камеры. Однако из того, что я пытался сделать, мои строки очень заметны.

Как можно было бы уменьшить выносливость линий сетки, чем они дальше?

Желаемый результат: Desired Result

Фактический результат Actual Result

+0

Просто заметил, что вторая картина имеет гораздо больше сглаживания. * Может * немного помочь ситуации. 'graphics.PreferMultiSampling = true;' и 'graphics.ApplyChanges() ' – Cyral

+0

Это помогло сделать картинку более четкой, однако она сделала расстояние полностью красным, поэтому помогла другая проблема, спасибо :) –

+0

Ну, я нехорошо отношусь к этим 3D-вещам, рад, что смогу немного помочь :) :) – Cyral

ответ

0

Просто мысли. Что-то, что вы, возможно, захотите попробовать, - это просто изменить альфа-значение линий сетки, чтобы уменьшить дальнейшее их отвлечение от камеры. Поступая таким образом, вы должны увидеть цвет квадрата вместо линии. Я не уверен, будет ли это выглядеть так, как вы хотите, но вы должны хотя бы видеть серый и белый вместо красного.

Если вы не знаете, вы можете легко изменить цвет XNA с прозрачной альфа-прозрачностью с помощью следующего кода.

Color gridColor = Color.White * AlphaValue; 

или вы можете использовать поплавок на основе color constructor.

public Color(float r, float g, float b, float a) 
+0

Есть ли какое-то уравнение, которое приходит на ум, которое подходит для этого изменения в альфе в зависимости от разницы в расстоянии? Или я должен просто поиграть с ним. –

+0

Nvm просто использовал pythagorean, чтобы найти разницу и сделал 1/разницу, хорошо работал. Благодаря! –

+0

Отлично и ваш прием. Я рад, что это сработало хорошо для вас. Счастливое кодирование. –

0

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

Если у вас есть список строк, каждая строка имеет две вершины в 3D.

Я бы проецировал каждую вершину линии на экранное пространство (двумерные коорды), тогда у меня была двумерная линия.

Теперь пришло время обрезать линию, чтобы начинать и заканчивать края экрана или внутри его границ.

Затем вычислите альфа-высоту.

  1. 1: высота == Высота экрана
  2. 0: высота < высота Skyline

Возможно, будет необходимо разделить строку на две части, первая часть видна и вторая часть полностью скрыт.

Затем вы рисуете линию с настройкой 2D-камеры или непроектируете вершины в 3D.

enter image description here

Смежные вопросы