Является ли Canvas.drawVertices режимом TRIANGLES, принимать только первые 3 координаты и игнорировать другие? - PullRequest
0 голосов
/ 04 апреля 2019

В canvas.drawVertices(...) есть 3 режима.Т.е. Canvas.VertexMode.TRIANGLES, Canvas.VertexMode.TRIANGLES_FAN и Canvas.VertexMode.TRIANGLES_STRIP

Я мог понять Canvas.VertexMode.TRIANGLES_FAN и Canvas.VertexMode.TRIANGLES_STRIP.Но не Canvas.VertexMode.TRIANGLES

Правда ли, что Canvas.VertexMode.TRIANGLES также будет рисовать треугольник из первых 3 координат из verts ниже и игнорировать другие?то есть он игнорирует последние 2 координаты verts, то есть {width/3f, height.toFloat(), 0f, height.toFloat()}

override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    if (width == 0 || height == 0) return
    setLayerType(View.LAYER_TYPE_SOFTWARE, null);

    val verts = floatArrayOf(
        0f, 0f,
        width.toFloat(), 0f,
        width/2f, height.toFloat(),
        width/3f, height.toFloat(),
        0f, height.toFloat()
    )

    canvas.drawVertices(Canvas.VertexMode.TRIANGLES, verts.size, verts, 0,
        null, 0, null, 0, null, 0, 0, paint)

}

1 Ответ

0 голосов
/ 04 апреля 2019

Очевидно, что для TRIANGLES требуется координата 3x, например, 3, 6, 9, 12 ... Так что каждый набор из 3 координат будет нарисован в виде треугольника.

например. использование ниже verts нарисует 2 треугольника.

    val verts = floatArrayOf(
        0f, 0f,
        width.toFloat(), 0f,
        width/2f, height.toFloat(),
        width/3f, height.toFloat(),
        10f, height.toFloat() - 10f,
        10f, 10f
    )
...