2009-03-22 5 views
0

Brain-Computer Interfacing에 대한 인턴십을 위해 CRT 모니터에서 매우 빠르게 깜박이는 사각형을 생성해야합니다 (깜박임 = 두 가지 색상이 교대로 나타남). 모니터의 새로 고침 빈도는 85Hz이며 병목 현상이 발생하여 모든 사각형을 다시 칠하는 데 최대 1000/85 = 11ms가 걸릴 수 있습니다.간단한 2D 그래픽을 실시간으로 생성하는 방법은 무엇입니까?

GUI/그래픽 프로그래밍에 대한 선호 언어는 자바이므로 동기식 (Swing과 달리)이므로 AWT로 프로토 타입을 만들려고했습니다. 이제는 두 가지 문제가있는 것 같습니다. 첫 번째는 시간 측정에 따르면 9 개의 정사각형을 다시 칠하는 데 너무 오래 걸리는 것으로 나타났습니다. 내 알고리즘은 원하는 빈도를 취하고 시스템이 미리 다시 칠해야하는 시간을 계산 한 후 다음 번 '시간'에 도달 할 때마다 점검하는 루프 (절전/대기 지연 없음)를 사용합니다. 그렇다면 모든 루프를 반복합니다 그 (것)들을 다시 칠하기 위하여 사각형. 지금 구현 한 방법은 사각형이 배경색 A의 패널이고 배경색 B가있는 다른 패널에 포함되어 있고 패널의 가시성이 변경 되었기 때문에 깜박임이 발생한다는 것입니다. 나는 이것이 직사각형을 항상 그려야하는 한 패널보다 빠르다는 것을 알아 냈습니다. 괜찮은 프로파일 링 도구가 없다 (Eclipse TPTP 또는 NetBeans 프로파일 러가 작동하지 않음) 확신 할 수 없지만 병목 현상이 실제로는 다시 그리는 것이 아니라 루핑에 있다고 느끼고있다. (조건부 검사 등). 내가해야 할 일에 대해 무엇이든지 권할 수 있니?

두 번째 문제는 정사각형이 위에서 아래로 렌더링 된 것처럼 보입니다. 정말 빨리 달리는 것처럼 보이지만 여전히 눈에 띄게 있습니다. 이것은 받아 들일 수 없다. 내가 궁금해하는 것은이 원인이 무엇인가하는 것입니다. Java/AWT 또는 Windows입니까, 아니면 느린 알고리즘을 쓰고 있습니까?

나에게 몇 가지 시도해 볼 것을 권할 수 있습니까? Java를 사용하는 것을 선호하지만 꼭 사용해야한다면 C (또는 무언가)를 사용할 것입니다.

답변

3

필자는 JPanel과 같은 높은 수준의 "구성 요소"를 피할 것입니다. 윈도우의 내용을 나타내는 Graphics2D를 얻고, fillRect() 메서드를 사용하십시오.

실패하면 C 및 OpenGL에서이 작업을 충분히 쉽게 수행 할 수 있습니다. rasonly.c은 "래스터 라이저", 즉 2D 모드로 작동하도록 OpenGL을 설정하는 표준 템플릿 프로그램입니다. 이것을 출발점으로 사용하면 너무 많은 문제없이 원하는 "사각형"을 그리는 무언가를 얻을 수 있습니다.

원하는 장면을 잘 묘사하지 않으면, 각각 다른 색을 가진 100 개의 사각형을 그리는 것처럼 그 방정식에서 소리가납니다. OpenGL에서 최대 성능을 얻으려면 드로잉 호출간에 "상태 변경"을 최소화하기 위해 동일한 색상의 모든 사각형을 함께 그려야합니다. 85Hz에서 100 제곱의 2D 사각형을 그리는 것은 실제로 OpenGL에 세금을 부과해서는 안되기 때문에 이것은 순수한 이론적 인 지점 일 것입니다.

업데이트 : : 오 년이 지났으니 요즘에는 소금물로 위의 내용을 취해서 최신 튜토리얼을 읽어야 할 것입니다. 여러가지가 바뀌었다. Vulkan API을 찾으십시오.

2

내가 jogl로 전환하고 디스플레이리스트를 사용하는 거라고 (난 그 50fps보다는 85 것 비록 그것이 같은이, 영국의 국내 TV를 BBC 마이크로와 팔레트 스위칭을 사용하는 데모를 기억) . 그들은 Java에서 매우 높은 fps 속도를 얻습니다.

관련 문제