2012-05-26 4 views
0

Я хотел бы сделать базовый трассировщик лучей реального времени в C++ (в основном для обучения). This tutorial отлично подходит для создания основного лучевого индикатора. Но что было бы лучшим решением сделать это на экране в режиме реального времени? Я не спрашиваю, как оптимизировать часть трассировки лучей, только часть картины, чтобы она рисовала на экране, а не в файле.Трассировщик лучей реального времени

Я разрабатываю окна/для окон.

ответ

2

Вы можете проверить this Code Project article на основной механизм краски с использованием WIN32API

Update: OP хочет быстрый рисунок, которым Win32API не дает. OP нуждается в этом, чтобы они могли измерять ускорение алгоритма трассировки лучей во время процесса оптимизации. Другие возможности для рисования: DirectX, XNA, Allegro, OpenGL.

+0

Является ли win32 api с paintpixel и двойным буфером действительно лучшим решением? – Knarf

+0

-1 полностью неадекватный, по скорости. –

+0

Так что, думая о скорости, какое лучшее решение? – Knarf

0

Я профессионально работаю в реальном времени CPU raytracer, и из того, что я видел с 2 годами работы там, часть графического процессора для отображения изображения не будет узким местом, узким местом, если вы достигнете его, будет скорость вашей оперативной памяти, я не думаю, что технология рисования будет иметь какое-то существенное различие.

В качестве примера мы используем кластеризацию (одного процессора недостаточно: p), мы смогли отображать 100-200 кадров в секунду при 1920x1080 при взгляде на небо, но узким местом не была часть дисплея, это была сеть. .. EDIT: Мы используем OpenGL для отображения.

Когда вы делаете CPU raytracer, вы не собираетесь делать printPixelToGPU(), но вы будете записывать в свою RAM и затем отправлять его на GPU после завершения изображения. Выполнение printPixelToGPU(), вероятно, вызовет большие накладные расходы, и это (на мой взгляд) очень плохой выбор дизайна.

Похоже, преждевременная оптимизация. Но если вы все еще обеспокоены этим, просто скажите, сколько RAM-текстур для переноса GPU вы можете делать с OpenGL, directX ... и печатать среднюю частоту кадров. Вероятно, вы увидите, что частота кадров будет действительно очень высокой, поэтому вы, конечно же, никогда не достигнете этого «узкого места», если вы не используете SDRAM или действительно плохой графический процессор.

Смежные вопросы