우리는 컵 바닥에 찻잎을 만들 수있는 iPhone 및 Windows Phone 7 용 프로젝트를 진행하고 있습니다. 사실적으로 보일 필요는 없으며 실제로 cartoony도 괜찮습니다.
이를 달성하기 위해 어떤 종류의 기술을 연구해야합니까? 도움이 될만한 라이브러리가 있습니까?
다음은 Google 이미지 검색에서 가져온 샘플입니다.
우리는 컵 바닥에 찻잎을 만들 수있는 iPhone 및 Windows Phone 7 용 프로젝트를 진행하고 있습니다. 사실적으로 보일 필요는 없으며 실제로 cartoony도 괜찮습니다.
이를 달성하기 위해 어떤 종류의 기술을 연구해야합니까? 도움이 될만한 라이브러리가 있습니까?
다음은 Google 이미지 검색에서 가져온 샘플입니다.
답변:
내가 어떻게 예술을 통제 할 수 있고 절차 적 방법을 조정하려고 노력하는 데 오랜 시간을 소비하지 않을 것입니다.
먼저, 찻잎 덩어리의 전체 스프라이트가 아니라 작은 그룹화와 같이 예술적으로 "수영장"으로 여러 찻잎 덩어리 스프라이트를 수동으로 만듭니다. 그들 중 20 명 정도?
그런 다음 "컵"베이스에 임의의 숫자를 임의의 좌표에 놓습니다. 각각 임의의 회전 및 스케일과 임의의 수평 및 / 또는 수직 미러링을 제공하십시오. 이것은 좋은 결과를 가져와야합니다.
이 방법을 사용하면 원하는 모양을 갖도록 개별 덩어리를 만들면서 예술적으로 자유로울 수있을뿐만 아니라 다양한 스프라이트를 선택할 수 있습니다.
또한이 방법 (및 Perlin 노이즈 기반을 포함한 임의의 방법)을 사용하면 프로세스 시작시 알려진 시드로 난수 생성기를 실제로 시드하여 재현 가능한 결과를 얻을 수 있습니다. 시드를 저장하면 시퀀스가 시작되기 직전에 다시 시드하여 동일한 패턴을 다시 정확하게 다시 생성 할 수 있습니다. 누군가 이름을 입력하고 문자를 숫자 (총 ASCII 등)로 바꾸는 등의 재미있는 일을 할 수도 있습니다. 그런 다음이 씨앗을 일종의 "이 차 잎 패턴이 당신에게 맞춤화되었습니다!" 의회.
여기에 도움이된다면 의사 코드가 있습니다.
var sprites = [...]; // Array of tea leaf sprites
var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
var sprite_index = rand(sprites.length); // Random sprite index
var r = rand(CUP_DIAMETER); // Random radius for point on disk calc
var theta = rand(2*PI); // Random theta (rotation) for point on disk
var sprite_x = sqrt(r) * cos(theta); // Sprite X
var sprite_y = sqrt(r) * sin(theta); // Sprite Y
var sprite_rotation = rand(2*PI); // Sprite rotation
var sprite_scale = rand(1) + 0.5; // Sprite scale from 0.5 to 1.5
var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
var sprite_v_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror vertically
draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}
디스크에서 임의의 점을 선택하는 방법과 전체 sqrt / sin / cos를 사용하는 이유에 대한 훌륭한 토론은 http://mathworld.wolfram.com/DiskPointPicking.html 을 확인하십시오 .
이진 컷오프 값이 0.8 정도 인 펄린 노이즈를 사용해보십시오.
예제 이미지를 http://imgur.com/a/Ydc4y에 업로드했습니다 . 첫 번째는 임계 값이 적용된 두 번째 이미지입니다. 두 번째는 기본 펄린 노이즈로, http://en.wikipedia.org/wiki/Perlin_noise 및 http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html 과 같은 여러 좋은 참조를 찾을 수 있습니다 .
펄린 노이즈에서 옥타브 수와 스케일로 비트를 연주하여 출력이 얼마나 매끄러 워 지는지를 변화시킬 수 있으며, 차가 얼마나 남을 것인지 (평균적으로 노이즈만큼) 결정하는 임계 값을 결정할 수 있습니다.