2010-08-20 10 views
2

저는 2D, 오목 면재, 때로는 다림질면, ​​때로는 OpenGL과 교차하는 다각형을 그립니다. alt text더 좋은 방법이 있나요?

는 바로 지금, 내가하면 다각형의 윤곽 초래 연결된 점을 : 다음은 샘플입니다. 그런 다음 이것을 삼각형이 나오는 GLUTesselator에 넣습니다. 그런 다음 텍스처 좌표를 만들고 다각형을 텍스처 처리합니다.

가장 느린 구성 요소는 테셀레이션/삼각 측량입니다. 당신이 본 것처럼 이것들을 그려야한다는 것을 감안할 때, 삼각 측량에 대한 더 빠른 대안은 무엇입니까? 픽셀을 적절하게 설정하는 페인팅 알고리즘을 찾을 수 있습니까?

감사합니다.

+1

이것은 C++과 어떤 관련이 있습니까? – Chubsdad

+0

내 응용 프로그램은 C++로 작성되었으며 알고리즘이 너무 많아서 결과가 제한적일 수 있습니다. – jmasterx

답변

1

처음에는 더 간단한 문제입니다. 한 가지 색상 만 사용하고 싶다고 가정 해 보겠습니다. 윤곽선 목록으로 시작한 다음 행과 열로 전체 창을 스캔 할 수 있습니다. 경계를 넘을 때마다 건너 뛴 느낌에 따라 카운터가 증가하거나 감소합니다 (how_many_outlines_am_I_inside). 0 일 때 픽셀을 흰색으로 칠합니다. 그렇지 않으면 초록색으로 칠합니다 (경계 자체는 검은 색입니다). 이것은 자기 교차 곡선을 올바르게 처리 할 것입니다.

이제 그늘에. 예제에 따르면, 음영은 수직적으로 일정하지만 윤곽선의 전체 너비에 맞게 수평으로 변경됩니다. 따라서 간단한 카운터 대신 스택의 스택이 필요합니다 (stl :: list 권장). 따라서 내부에있는 개요 중 가장 위쪽에있는 개요를 추적 할 수 있으므로 계산할 수 있습니다 당신이 덮은 거리의 몇 분의 일이 x min to x 최대입니다. 마지막으로 반투명 (사각형을 통해 부분적으로 볼 수있는 별처럼) : 규칙을 직접 결정해야합니다. 안구를 통해 규칙을 추측 할 수는 없지만 스택을 구현하는 것이 쉬워야합니다.

C++ 코드에 대한 도움이 필요하십니까?

+0

글쎄, 좀 더 검색을 해본 결과 스텐실 버퍼를 사용하는 기술이 있다는 것을 발견했습니다. 나는 이것을 시도 할 것이고 만약 내가 원하는 것을 찾지 못한다면 나는 당신에게 돌아갈 것이다. – jmasterx

+0

그는 한 번에 한 폴리곤을 그리는 것 같아. 나는 스택이 필요 없다고 생각한다. –

+0

@Tom Sirgedas : 제 방법은 한 번에 한 픽셀 씩 색칠하기 때문에 스택이 필요합니다. 그것을 생각 해보니, 재미있는 최적화 트릭을 시도해 볼 수 있습니다. – Beta

관련 문제