2010-07-28 6 views
2

Я делаю приложение, которое рисует фигуры, и я использую камеру для рисования в других местах. В принципе, допустим, у меня есть прямоугольник 4x3 и вы хотите использовать glgetpixels, чтобы получить все пиксели для чего-то 1024x768, но мой монитор может не поддерживать это разрешение. Как я могу сделать что-то большее, чем монитор. Я делаю это, поэтому я могу позволить пользователю сохранить изображение фигур при произвольном разрешении. Будет ли использование glviewport выходить за рамки, тогда я могу просто сделать glgetpixels?может OpenGL сделать это?

Благодаря

+0

Я сделал это под Windows. IIRC, вы в основном настраиваете контекст рендеринга (RC) на растровое изображение вне экрана (произвольных размеров). –

ответ

3

Вы можете использовать RTT (визуализацию для текстуры), определяя FBO (объект Buffer Frame) и прикрепляя к нему текстуру. Проверьте glBindFramebufferEXT().

И после рисования сцены вы можете выполнить glGetTexImage() и получить пиксели для него.

RTT - очень хорошо зарекомендовавшая себя и документированная техника.

2

Я не OpenGL разработчик, но вы определенно можете выполнять рендеринг в текстуру, которая может иметь большие размеры, чем на экране.

поискаШлюпка Google дал мне это, может быть, это полезно: http://developer.nvidia.com/attach/6725

2

Это не доскональное ответ, но это должно быть полезно. Вы делаете RTT, Render to Texture. Вы собираетесь создать новый renderbuffer, установите его как свою цель рендеринга, а затем используйте glGetPixels, чтобы получить его значение. Когда вы делаете рендерингбуфер с:

void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); 

Вы можете установить его размер, который не соответствует вашему экрану. Надеюсь, это поможет!

0

Собственно, это зависит. Я думаю, что FBOs не решит ваши проблемы (это поможет хотя).

Я подозреваю, что вы пытаетесь создать версию с высоким разрешением 3D-сцены, например, для ее печати на 300 точек на дюйм. Вам, вероятно, понадобится больше, чем ваше максимальное разрешение FBO (4096 * 4096 на достойной графической карте), поэтому вам придется использовать рендеринг с черепицей.

Идея заключается в том, чтобы сделать ваше окончательное изображение в виде набора суб-изображений (плитка)

Автор Mesa3d написал хорошую библиотеку, которая делает это, TR. Использование довольно простое.

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