在XNA Primitives画线 1(2D和微量反射)的Demo中有很多的问题,比如,画的点不够精确、要画的线太多的话也就需要更多的点,这样的话对机子的性能可能要求就有点过了。

    其实做现在这个Demo的主要目标也就是为了提高精度,在3D环境中我们可以用一个像素表示一个点,因此精确度应该就高的多。在XNA中 PrimitiveType.LineList可以直接画线,也可以由画出的线组成我们要的圆等图形。

    另外,我想要实现全3D效果的话,我要用这种方式才行。

    因为GraphicsDevice可以绘制点、线和三角形,我们的需要就主要是画线。如,根据四个点的坐标就可以绘制一个坐标轴,下面就是绘制坐标轴的方法:

 

1XNA Primitives画线  2(3D空间)        private void DrawCoordinate()
2        }

 

     现在让我们来绘制圆,XNA Primitives画线 1中的圆是由一个个的点组成的所以看起来就比较粗糙。这里的圆是由一个一个的线段,所以我就写了一个画线的方法:

 

 1XNA Primitives画线  2(3D空间)        private void DrawLine(Vector3 point1, Vector3 point2)
 2        }

 

     在开始画圆之前,我们还要为我们要画的圆创建好它的顶点:

 

 1XNA Primitives画线  2(3D空间)        private Vector3[]  CirlcePoint()
 2        }

 

    现在就开始画我们的圆了:

 

        }

 

看下效果

XNA Primitives画线  2(3D空间)

这个是比之前那个好的多吧。

剩下和就是主题部分了,其实原理我之前那个还是一样的。

 

 

 1XNA Primitives画线  2(3D空间)        private void DrawMyEffect()
 2        }

 

效果如下:

XNA Primitives画线  2(3D空间)
 

 

XNA Primitives画线  2(3D空间)
 

 

XNA Primitives画线  2(3D空间)

 

 

    顺便贴出其它用到的方法:
    随机的起点和方向

 

 1XNA Primitives画线  2(3D空间)        private Vector3 GetRandomVector3()
 2        }

 

初始化

 

 1XNA Primitives画线  2(3D空间)        protected override void Initialize()
 2        }

 

键盘控制

 

 1XNA Primitives画线  2(3D空间)        private void HandelInput()
 2        }

 

    这里主要是在3D环境中画出的2D效果,本来想再将这个Demo做成3D效果的,可惜顶点没添加到好多的时候速度就已经很慢了,所以做成3D效果的话还不成形机子就死了,所以就免了。

现在更希望有高手能指教这里面的不足。

相关文章:

  • 2021-11-26
  • 2021-11-07
  • 2021-09-13
  • 2021-06-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-17
猜你喜欢
  • 2021-06-06
  • 2022-01-02
  • 2021-11-01
  • 2021-04-05
  • 2021-12-03
  • 2022-02-04
相关资源
相似解决方案