방금 도움이 될만한 것을 만들었습니다. 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
여기에서 선을 따라 스프라이트를 그리는 최종 쿼드 / 폴리곤을 계산합니다.
최종 결과는 다음과 같습니다.
그리고 다각형의 와이어 프레임이 켜진 상태에서 :