Как сделать резинку в OpenGl - PullRequest
5 голосов
/ 27 июля 2011

Я пытаюсь найти путь к резинке в OpenGL и Visual Studio C ++.Проблема, с которой я сталкиваюсь, заключается в том, что некоторые компьютеры с Win 7 (т.е. мой босс) не позволяют мне читать или рисовать в передний буфер, таким образом убивая рисование прямо на него.

glDrawBuffer( GL_FRONT );
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp( GL_XOR );
glPolygonMode(GL_FRONT, GL_LINE);
glRecti(X0, Y0, X1, Y1);
X1 = X;
Y1 = Y;
glRecti(X0, Y0, X1, Y1);
*//Doesn't draw lines*

или копированиепередний буфер к заднему буферу (перерисовка к нему заняла бы много времени), вызывая чертеж swapbuffers и затем заменяя agian

glReadBuffer( GL_FRONT );
glDrawBuffer( GL_BACK );
glCopyPixels(0, 0, Width, Height, GL_COLOR);

glEnable(GL_COLOR_LOGIC_OP);
glLogicOp( GL_XOR );
glPolygonMode(GL_BACK, GL_LINE);
SwapBuffers(hdc);
glRecti(X0, Y0, X1, Y1);
X1 = X;
Y1 = Y;
glRecti(X0, Y0, X1, Y1);
SwapBuffers(hdc);   
*//Doesn't display original drawing*

есть идеи?

1 Ответ

1 голос
/ 05 августа 2011

Я бы сделал это так:

  • отрисовать сцену во внеэкранный буфер (задний буфер или другой)
  • используйте glReadPixels для считывания изображения в основную память
  • сделать текстуру из изображения в основной памяти

После этого, чтобы нарисовать изображение на экране, вы можете просто нарисовать один квад, покрывающий всю область рендеринга, текстурированный с созданной текстурой. Таким образом, нет необходимости повторно визуализировать фактическую сцену при выводе изображения на экран.

Современные реализации OpenGL также могут рендериться в текстуру без необходимости перемещать изображение в основную память и обратно. Опять же, если рендеринг сцены уже медленный, разница в производительности здесь не будет заметна.

...