protected virtual void _CollectMesh(Matrix4 transMat, int w, int h, RenderType rt, List <IPosLight> lights, AddPixelHandler handler) { Camera camera = Camera.Default; if (null == camera) { return; } Vertex vertex1, vertex2; Vertex2D point1, point2; int pointCount = _pointList.Count - 1; for (int i = 0; i < pointCount; ++i) { vertex1 = _pointList[i]; vertex2 = _pointList[i + 1]; // 将3d坐标投影到2d空间; point1 = GraphPragma.BuildVertex2D(vertex1, transMat, camera.Pos, lights, w, h); point2 = GraphPragma.BuildVertex2D(vertex2, transMat, camera.Pos, lights, w, h); // 计算线段; Line.DrawLine(point1, point2, handler, DrawLineType.Bresenham, SoftDevice.Default.ZTest); } vertex1 = _pointList[_pointList.Count - 1]; vertex2 = _pointList[0]; point1 = GraphPragma.BuildVertex2D(vertex1, transMat, camera.Pos, lights, w, h); point2 = GraphPragma.BuildVertex2D(vertex2, transMat, camera.Pos, lights, w, h); Line.DrawLine(point1, point2, handler, DrawLineType.Bresenham, SoftDevice.Default.ZTest); }
protected override void _CollectMesh(Matrix4 transMat, int w, int h, RenderType rt, List <IPosLight> lights, AddPixelHandler handler) { if (_pointList.Count != VertexNumber) { return; } GraphPragma.DrawTriangle(transMat, _pointList[0], _pointList[1], _pointList[2], MaterialName, w, h, rt, lights, handler); }
protected override void _CollectMesh(Matrix4 transMat, int w, int h, RenderType rt, List <IPosLight> lights, AddPixelHandler handler) { if (_pointList.Count % 2 != 0) { return; } Camera camera = Camera.Default; if (null == camera) { return; } int pointCount = _pointList.Count - 1; for (int i = 0; i < pointCount; i += 2) { Vertex v0 = _pointList[i]; Vertex v1 = _pointList[i + 1]; Vertex2D p0 = GraphPragma.BuildVertex2D(v0, transMat, camera.Pos, lights, w, h); Vertex2D p1 = GraphPragma.BuildVertex2D(v1, transMat, camera.Pos, lights, w, h); Line.DrawLine(p0, p1, handler, DrawLineType.Bresenham, SoftDevice.Default.ZTest); } }
protected bool _HandleOnePoint(Matrix4 transformMat, int w, int h, AddPixelHandler handler) { int pointCount = _pointList.Count; if (pointCount < 2) { // 只有一个点就画一个点; for (int i = 0; i < pointCount; ++i) { Vertex vertex = _pointList[i]; // 将3d坐标投影到2d空间; Vertex2D point = GraphPragma.ProjectToScreen(vertex.Position, transformMat, (float)w, (float)h); point.color = vertex.Color; // 添加像素点; if (null != handler) { handler(point.x, point.y, 0, vertex.Color); } } return(true); } return(false); }