C++의 For 루프 설명
For 루프는 특정 조건에 따라 작업을 여러 번 반복할 수 있도록 도와주는 C++의 기본 문법입니다. 이 문법을 사용하면 반복되는 코드를 일일이 작성하지 않아도 되고, 반복 횟수를 유연하게 제어할 수 있습니다.
For 루프의 기본 구조
for (int i = 0; i < value; i++) {
// 반복할 코드
구성 요소:
- 초기화 (int i = 0): 루프가 시작될 때 실행되는 부분으로, 카운터 역할을 하는 변수를 설정합니다. 일반적으로 0부터 시작합니다.
- 조건 (i < value): 루프가 계속 실행될지 멈출지를 결정하는 조건입니다. 조건이 true인 동안 루프가 실행됩니다.
- 증가 (i++): 각 반복이 끝날 때 카운터 값을 업데이트합니다. 일반적으로 1씩 증가시킵니다.
이 세 가지가 결합되어 루프가 정해진 횟수만큼 실행됩니다.
예제: For 루프를 사용한 커널
아래는 for 루프를 활용한 기본 커널입니다:
kernel For_Loop : ImageComputationKernel <ePixelWise>
{
Image<eRead,eAccessRandom,eEdgeClamped> src; // 입력 이미지
Image<eWrite> dst; // 출력 이미지
param:
int increments; // 반복 횟수
int amount; // 픽셀 이동 값
void define(){
defineParam(increments, "increments", 1); // 반복 횟수 기본값
defineParam(amount, "amount", 50); // 이동 값 기본값
}
void process(int2 pos) {
int total = 0; // 초기 합계 값
for (int i = 0; i < increments; i++) { // For 루프 시작
total += amount; // 각 반복에서 이동 값을 추가
}
dst() = src((pos.x + total), pos.y); // x축 위치를 이동시켜 출력
}
};
이 커널의 동작 원리
- 매개변수(increments, amount):
- increments는 루프가 몇 번 반복될지를 설정합니다.
- amount는 각 반복마다 추가될 픽셀 값을 의미합니다.
- 로컬 변수(total):
- 루프 내에서 합계 값을 저장하는 변수로, 처음에는 0으로 초기화됩니다.
- 루프가 실행될 때마다 amount 값을 더합니다.
예제 실행
- increments = 1, amount = 50일 경우:
- 루프가 한 번 실행되며, total은 50이 됩니다.
- 결과적으로 이미지의 x 위치는 50픽셀 이동됩니다.
- increments = 2, amount = 25일 경우:
- 루프가 두 번 실행되며, total은 25 + 25 = 50이 됩니다.
- 결과적으로 이미지의 x 위치는 50픽셀 이동됩니다.
For 루프의 변형 예제
아래는 루프 시작 조건(trigger)을 매개변수화한 커널입니다:
kernel For_Loop2 : ImageComputationKernel <ePixelWise>
{
Image<eRead,eAccessRandom,eEdgeClamped> src; // 입력 이미지
Image<eWrite> dst; // 출력 이미지
param:
int trigger; // 루프 시작 조건
int increments; // 반복 횟수
int amount; // 이동 값
void define(){
defineParam(trigger, "trigger", 10); // 루프 시작 조건 기본값
defineParam(increments, "increments", 2); // 반복 횟수 기본값
defineParam(amount, "amount", 100); // 이동 값 기본값
}
void process(int2 pos) {
int total = 0; // 초기 합계 값
for (int i = trigger; i <= increments; i++) { // trigger로 시작하는 루프
total += amount; // 각 반복에서 이동 값을 추가
}
dst() = src((pos.x + total), pos.y); // x축 위치를 이동시켜 출력
}
};
주요 변경 사항
- trigger 매개변수: 루프 시작 값을 설정합니다.
- 예를 들어, trigger = 10이고 increments = 2이면, 조건이 충족되지 않아 루프가 실행되지 않습니다.
- 반대로 increments >= trigger일 경우 루프가 실행됩니다.
결과
- trigger = 10, increments = 2일 때:
- 루프가 실행되지 않으며, 이미지가 이동하지 않습니다.
- trigger = 2, increments = 10일 때:
- 루프가 실행되며, 각 반복에서 amount(예: 100)를 합산하여 총 이동 값이 계산됩니다.
요약
- For 루프는 조건을 설정해 반복 작업을 수행하는 강력한 도구입니다.
- 루프 매개변수를 통해 실행 조건과 반복 횟수를 유연하게 제어할 수 있습니다.
- 코드에서 반복 작업을 줄이고 효율적으로 작성할 수 있도록 도와줍니다.
'Nuke > Blink Script' 카테고리의 다른 글
Blink Scripting 101 - 2D Radial Ramp 구현 (0) | 2024.12.11 |
---|---|
Blink Scripting 101 - 이미지 변환 적용 (0) | 2024.12.11 |
Blink Scripting 101 - UV 맵 생성 예제 (0) | 2024.12.11 |
Blink Scripting 101 - Combining Input Image and Custom Color (0) | 2024.12.11 |
Blink Scripting 101 - Custom_Color (0) | 2024.12.11 |