Skip to content

Instantly share code, notes, and snippets.

@niratama
Created June 25, 2019 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niratama/e4286a3836d8afa941e7427803d21d89 to your computer and use it in GitHub Desktop.
Save niratama/e4286a3836d8afa941e7427803d21d89 to your computer and use it in GitHub Desktop.
プチコンのLFILTER(水平・垂直ラスター変形)の挙動

プチコンのLFILTER(水平・垂直ラスター変形)の挙動

レイヤー https://sup4.smilebasic.com/doku.php?id=reference:%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC

  • 原点は左下(通常の座標系とY座標が反転している)
  • 「変形情報配列のオフセットは画面幅または高さを1.0として指定する」
    • 水平の場合、配列の(Y * 変形情報数 / 画面高さ)番目の変形情報を利用する
    • 垂直の場合、配列の(X * 変形情報数 / 画面幅)番目の変形情報を利用する
  • 1ピクセルごとに変形させたいなら、変形情報数 >= 画面高さ(水平)または幅(垂直) にする必要がある
  • 「スケール値」とあるが実際には次のピクセルを参照しにいくための移動量なので、1より小さくなると拡大、1より大きくなると縮小に見える
  • 変形情報配列が2要素の場合は指定されない側のオフセットは0、スケールは1とみなす

水平ラスター変形

FOR Y=0 TO #SCR_H-1
 XO=FILTER[Y*LEN(FILTER)/#SCR_H,0] 'Xオフセット
 XS=FILTER[Y*LEN(FILTER)/#SCR_H,1] 'Xスケール
 YO=FILTER[Y*LEN(FILTER)/#SCR_H,2] 'Yオフセット
 YS=FILTER[Y*LEN(FILTER)/#SCR_H,3] 'Yスケール
 FOR X=0 TO #SCR_W-1
  VIEW[X,Y]=BUF[(X+XO)*XS][(Y+YO)*YS] 'バッファからピクセルを取得して描画
 NEXT
NEXT

垂直ラスター変形

FOR X=0 TO #SCR_W-1
 XO=FILTER[X*LEN(FILTER)/#SCR_W,0] 'Xオフセット
 XS=FILTER[X*LEN(FILTER)/#SCR_W,1] 'Xスケール
 YO=FILTER[X*LEN(FILTER)/#SCR_W,2] 'Yオフセット
 YS=FILTER[X*LEN(FILTER)/#SCR_W,3] 'Yスケール
 FOR Y=0 TO #SCR_H-1
  VIEW[X,Y]=BUF[(X+XO)*XS][(Y+YO)*YS] 'バッファからピクセルを取得して描画
 NEXT
NEXT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment