2011-02-05 7 views
0

저는 최적화하려고하는 문제가 있습니다. 나는 OpenGL 함수를 재현하고 있는데, 현재의 문제는 n-pointed 모양을 래스터 화하고 점을 기반으로 색상을 혼합하는 것입니다.수동으로 색상을 혼합합니다.

래스터는 * 3

내 구현은 매우 느린 길이 Screen.Width * Screen.Height의 바이트의 1 개 희미한 배열에 저장되고 좀 (잘, 많이)를 최적화 할 수 있습니다. 나는 모양의 각 픽셀을 방문하고 (Sqrt (x^2 + y^2)를 사용하여, 어떤 것이 느린 것처럼 보임) 거리와 vert의 색을 사용하여 그 점의 색상을 결정합니다 특정 픽셀.

이 작업을 수행하는 더 빠른 방법이 있습니다. 어떤 도움이 우수 할 것입니다! 아, 전 C# btw에서 일하고 있습니다.

+0

나는 당신의 문제를 발견했다고 생각합니다. 당신은 "OpenGL 기능을 재현하고 있습니다". 그래픽 조작은 어렵고 느리고, 당신보다 더 똑똑한 누군가 (그리고 나는) 이미 루틴을 최적화하는 최선의 방법을 찾아 냈습니다. 왜 당신은 정확히 그것을 재발 명하도록 주장합니까? C#에서 OpenGL 라이브러리를 호출하십시오. 단순한. –

+0

의견을 보내 주셔서 감사합니다. 나는 그것이 전에 풀 렸던 것을 안다. 그러나 그것에 대해 배우는 것은 아직도 재미있다! 나는 그것을 작동 시켰고 (당신이 5-10 FPS 작업을한다면), Barycentric 좌표에 대해 배웠습니다! 나는 그것이 모두 Computer Graphics에 대한 성공적인 벤처라고 생각합니다. –

답변

3

OpenGL, Directx 또는 GDI +를 사용하지 않는 것이 좋은 이유가 있다고 가정 해 보겠습니다.

래스터 화하려는 그래픽 원시를 정말로 이해하고 있는지 잘 모르겠습니다. n 포인트를 가진 다각형이라고 가정합니다. 그런 모양 안에 색을 보간하는 것은 다른 방법을 사용하기 때문에 완전히 사소하지는 않습니다. 그래서 질문은, 당신은 무엇을 원합니까?

볼록 및 오목 (또는 자체 교차) 폴리곤의 차이점을 생각해보십시오. "결과"가 어떻게 보이는지 분명하지 않습니다. 이것이 그래픽 하드웨어가 삼각형 이외의 다른 것에 대해 걱정하는 것을 막는 이유입니다. 나는 네가 (거의) 같은 것을 해줄 것을 제안한다.

삼각형 내부의 색상을 보간하는 것은 매우 쉽고 모호하지 않습니다. google을위한 전문 용어는 baryzentric coordinates입니다.

그래서 나머지 질문은 다각형을 삼각형 화하는 방법입니다.

  • 은 볼록 다각형을 위해 당신은 간단한 한 번 당신이 현재 모든 지점에 사용하는 가정 유사한 보간을 사용하여 중간 지점의 색상을 보간 할 수 있습니다. 그 중간 점에서부터 여러분의 모양 점으로 삼각형을 스팬하고 이들 안에 삽입하십시오. 올바른 색상을 얻으려면 중간 지점이 필요합니다. 쿼드를 생각해보십시오 : 오른쪽 위 및 왼쪽 아래 모서리가 빨간색으로 표시되고 다른 두 모서리는 파란색으로 표시됩니다. 이제 쿼드를 두 개의 삼각형으로 분할 할 수있는 두 가지 가능성이 있으며 사용하는 방법에 따라 일정한 색의 대각선 (빨간색 또는 파란색)이 있습니다. 그러나 보간 된 색 (어두운 마젠타 색과 같은)으로 중간 점을 삽입하면 모든 것이 잘 보입니다 (쌍 선형 보간을 사용하는 것처럼).

  • 자기 교차 폴리곤의 경우 상황이 다른 사람보다 좋지 않습니다. 먼저 수동으로 교차점을 결정하고 비 교차 폴리곤에서 폴리곤을 분리 한 다음 각 폴리곤을 처리합니다. 이제는 자기 인터셉션에서 도입 한 새로운 점에 대한 혼합 색상을 계산합니다.

  • 오목한 다각형의 경우 다각형을 볼록한 조각으로 분할 한 다음 위에서 설명한대로 처리해야합니다. 그러나 이것은 색 보간 결과를 변경합니다! 따라서 다각형 안쪽의 색 (절단 된 모서리의 가장자리)이 올바른지 확인해야합니다. 따라서 볼록 다각형의 중간 점 개념과 유사하게 보간 된 색상을 유지하는 다각형 내부에 새로운 점을 도입해야합니다. 이렇게하는 가장 좋은 방법은 보로 노이 셀을 계산하여 다각형을 구성하는 점을 계산하는 것입니다. 이 셀들의 꼭짓점은 좋은 보간 점이어야합니다.

나는 당신의 문제를 어떻게 처리 할 것인가에 대해 분명히 할 수 있었으면 좋겠습니다. 이 모든 작업을 수행 할 수는 있지만 실제로 노력할 가치가 있습니까? "코디 그레이 (Cody Grey)"와 같은 말 : 왜 재발견하는 것이 복잡한가?

+0

답장을 보내 주셔서 감사합니다! 나는 내가 지금하고있는 주요한 모양은 삼각형과 직사각형이지만, 일반화 된 n-polygon solution을 원했을 것이라고 말했다. 이제 "왜", 내가하고있는 두 가지 작업 : OpenGL, Windows Mobile 및 .netCF에 대한 연구가 모바일에서 실제로 구현하는 것보다 실제로 더 생산적입니다. 저는 그래픽에 관심이 많습니다.이 연구는 매우 힘들었습니다. 방금 Xiaolin Wu의 라인 알고리즘으로 작업을 마쳤습니다. 배우기에 꽤 재미있었습니다! 다시 감사합니다! –

관련 문제