Как нарисовать линию шириной в один пиксель в Stage3D

Я работаю над трехмерной игрой в космосе. В настоящее время я добавляю орбитальные линии планет.
В идеале я хотел бы нарисовать линии орбиты с шириной в 1 пиксель, независимо от расстояния линии от камеры. Кто-нибудь знает, как это сделать?
В настоящее время я использую плоскую сетку, масштабированную и повернутую в соответствии с орбитой планеты. В фрагментном шейдере я использую координаты U и V, чтобы выяснить, должен ли пиксель быть нарисован в данном пикселе:

// subtract 0.5 from UV coordintes of this pixel
"sub ft0, v1, fc4 \n" + // fc4 is a vector of 0.5 values
// double it, so values range from -1...1
"mul ft0, ft0, fc2 \n" + // fc2 is a vector of 2 values
// square x component
"mul ft1.x, ft0.x, ft0,x \n" +
// square y component
"mul ft1.y, ft0.y, ft0.y \n" +
// set others to 0
"mov ft1.w, fc0.w \n" + // fc0 is a vector of 0s
"mov ft1.z, fc0.w \n" +
// add and square root to get distance from centre...
"add ft1.xyzw, ft1.xxxx, ft1.yyyy \n" +
"sqt ft1, ft1 \n" +

Таким образом, ft1 заканчивается расстоянием текущего фрагмента от центра плоской сетки. Я могу использовать коды операций sge и slt, чтобы сравнить это значение с "1", но КАК у меня получающаяся линия всегда рисуется только шириной в 1 пиксель? Результат, который я получаю, искажается из-за перспективы, а также, если камера находится близко к плоскости.
Я пытался масштабировать ширину по расстоянию текущего фрагмента от камеры, но это кажется уродливым обходным путем - и на него все еще влияет "выравнивание", если камера оказывается на одном уровне с плоскостью орбиты.
Какое решение? Конечно, можно нарисовать неперспективную линию шириной в 1 пиксель...

0 ответов

Другие вопросы по тегам