Closed seibe closed 4 years ago
大目標として、TX乗り換え路線図を描けるくらいの表現力が欲しい。
となると……
ちなみに Processing の描画APIはこんな感じ。
Shape
createShape()
loadShape()
PShape
2D Primitives
arc()
circle()
ellipse()
line()
point()
quad()
rect()
square()
triangle()
Curves
bezier()
bezierDetail()
bezierPoint()
bezierTangent()
curve()
curveDetail()
curvePoint()
curveTangent()
curveTightness()
3D Primitives
box()
sphere()
sphereDetail()
Attributes
ellipseMode()
rectMode()
strokeCap()
strokeJoin()
strokeWeight()
Vertex
beginContour()
beginShape()
bezierVertex()
curveVertex()
endContour()
endShape()
quadraticVertex()
vertex()
Loading & Displaying
shape()
shapeMode()
Processing とほぼ同じ手法で実装する。具体的には java.awt.geom.GeneralPath
に相当するものを用意し、各描画命令内部でそれを使う。
問題は、描画命令の発行回数が多くなりがちという点。動的バッチングを実装すれば緩和できるが、仕組みは複雑になる。
プリミティブそれぞれに専用の仕組みを用意して描画する。線分/ベジエ/多角形のみ GeneralPath
相当の仕組みで描画する。
これであれば Instancing により発行回数を比較的抑えられる。ただし仕組みは複雑になる。
ComputeShader が使えれば良かったんだけど、昨年10月時点で GL ES 3.1 以降のシェアは 40%台 だったので、このタイミングで採用するのは随分アグレッシブ。
まずは汎用パス描画の仕組みを作る。で
GameCanvas v4.0 で追加する機能を列挙する