如何在Stage3D中绘制单像素宽度线

时间:2014-11-30 11:15:47

标签: actionscript-3 3d stage3d agal

我正在制作太空中的3D游戏。我现在正在添加行星的轨道线 理想情况下,我想绘制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 个答案:

没有答案