私はあなたを助けるかもしれない何かを作成しました。これは、GLBasicフォーラムの誰かを支援するためのものでした。
ここに私の提案があるフォーラムへのリンクがあります:
Random Textured Rolling Hills
これはGLBasicで書かれていますが、読みやすくするために、あらゆる言語に簡単に変換できるようにしました。
ニーズに合わせて使用するには、スプラインデータ/ポイントを生成する必要があります。この例の「丘」ポイントをスプラインポイントに置き換えます。何らかの方法でアニメーション/ちらつき効果を追加するだけです。たぶんランダムなテクスチャーシフト。
本当の「魔法」は私の「AddPoint」関数で起こります:
FUNCTION AddPoint: h AS THillPoint
DIMPUSH self.points[], h
// Is this the very first data point?
IF LEN(self.points[]) = 1
self.points[0].pu.Set(0, self.points[0].pm.y - self.texture_ht_up)
self.points[0].pd.Set(0, self.points[0].pm.y + self.texture_ht_dn)
RETURN
ENDIF
ALIAS h0 AS self.points[-2] // Reference to the 2nd last point
ALIAS h1 AS self.points[-1] // Reference to the last point
LOCAL angle#
LOCAL v1 AS TVector
LOCAL v0 AS TVector
// Calculate 'p2' of HillPoint - form rectangle with previous point
angle = ATAN(h1.pm.y - h0.pm.y, h1.pm.x - h0.pm.x) -90// Angle of the two points
v1.x = COS(angle) * self.texture_ht_up + h1.pm.x
v1.y = SIN(angle) * self.texture_ht_up + h1.pm.y
v0.x = COS(angle) * self.texture_ht_up + h0.pm.x
v0.y = SIN(angle) * self.texture_ht_up + h0.pm.y
h0.pu = h0.pu.AverageWith(v0)
h1.pu.Copy(v1)
v1.x = COS(angle) * -self.texture_ht_dn + h1.pm.x
v1.y = SIN(angle) * -self.texture_ht_dn + h1.pm.y
v0.x = COS(angle) * -self.texture_ht_dn + h0.pm.x
v0.y = SIN(angle) * -self.texture_ht_dn + h0.pm.y
h0.pd = h0.pd.AverageWith(v0)
h1.pd.Copy(v1)
ENDFUNCTION
ここで、線に沿ってスプライトをプロットする最終的な四角形/多角形を計算します。
最終結果は次のとおりです。
そして、ポリゴンのワイヤフレームをオンにして: