특정 개체를 그리는 화면에 많은 입자가 있습니다. 차가운 그라디언트 효과를 만들기 위해 다음 줄을 사용합니다.값 범위에 인덱스 할당
float factor = (i - 0.0f)/(positions.Count - 0.0f);
이 값을 1과 0 사이의 값으로 조정하여 색상의 강도를 변경합니다. 이제는 입자가 서로 겹쳐져 전체 색상처럼 보일 것이므로이 기능은 쓸모 없게됩니다. 나는 수행하여 세부적으로 조정하려고 :
for (int i = 0; i < 1000; i++)
{
Color color = Color.Red * 0.9f; /* factor going down in increments of 0.1f/
}
를 그렇게 보이는 그런 : 이제
(color * incrementalFactor) * factor
가 복사이 계속해서 또 다시, 나는 보이는 함수를 만들려면 붙여 반복 얻을 수 있기 때문에 이 같은 :
Color[] colorTable = new Color[] {
Color.Red, Color.Blue, Color.Green
};
Color getColor(int i, int max)
{
int maxIndices = max/colorTable.Length; // the upper bound for each color
/* Somehow get a color here */
}
내 문제는 내가 동적으로 지정된 인덱스의 난을 기반으로 COLORTABLE에 인덱스로 값을 축소하는 방법을 모른다, 그리고 주어진 최대 (즉, positions.Count)
즉, maxIndices보다 작 으면 0, maxIndices보다 크면 maxIndices * 2보다 작아야하며 최대 값까지 올라야합니다. 어떻게해야합니까?
EDIT
명확성을 위해 다른 표현을 식 : A I가 주어지며, 소정의 최대 : I는 두 개의 입력을 취하는 기능을 갖는다
. 나는 항상 최대보다 작다.
함수 내에서 max를 상수로 나눔으로써 단계를 얻습니다 (3). 함수는 단계와 관련된 i의 값에 따라 0에서이 상수로 값을 반환해야합니다. 예를 들어
다음 최대 말하면 1,000
f(200, 1000) = 0
f(400, 1000) = 1
f(600, 1000) = 2
f(800, 1000) = 3
,
step = 1000/3
if (i < step) return 0
if (i >= step && i < step * 2) return 1
아이디어는 임의의 입력에 따라이를 수행 할 수있는 함수를 작성하도록되어 있었다면.
모든 알파 값을 30 % -50 % 정도로 설정하면 어떻게됩니까? –
'Color color = Color.Red * 0.9f; '에서 루프 변수가 사용되지 않습니다. – basarat
아니요, 1000 회마다 0.1f 씩 감소해야합니다. –