2012-06-10 5 views
0

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

Я использую метод здесь:

http://nehe.gamedev.net/tutorial/radial_blur__rendering_to_a_texture/18004/

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

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

Это основная часть я считаю, что необходимо откорректировать:

glColor4f(1.0f, 1.0f, 1.0f, alpha);     // Set The Alpha Value (Starts At 0.2) 
      glTexCoord2f(0+spost,1-spost);      // Texture Coordinate (0, 1) 
      glVertex2f(0,0);         // First Vertex  ( 0, 0) 

      glTexCoord2f(0+spost,0+spost);      // Texture Coordinate (0, 0) 
      glVertex2f(0,480);         // Second Vertex ( 0, 480) 

      glTexCoord2f(1-spost,0+spost);      // Texture Coordinate (1, 0) 
      glVertex2f(640,480);        // Third Vertex  (640, 480) 

      glTexCoord2f(1-spost,1-spost);      // Texture Coordinate (1, 1) 
      glVertex2f(640,0); 

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

Как?

ответ

3

Возможно, это не прямой ответ на ваш вопрос, но вы не должны слишком фокусироваться на эффектах через фиксированный конвейер. Учебники NeHE хороши, но немного устарели. Я рекомендую вам просто проработать основы и включить шейдеры в свой код. Они намного быстрее и позволят вам создавать гораздо более сложные эффекты.

+0

Битва за мной, что на данный момент. Это кажется очень простым способом сделать это ... но я просто не могу понять, что смещение текстуры должно быть каждый раз, когда будет рисоваться Quad. – John

+0

Хорошо, я постараюсь помочь, но вы действительно должны отредактировать свой вопрос, так как он не читается для меня. Возможно, опубликуйте несколько скриншотов - в вопросе, связанном с opengl, обычно достаточно, чтобы показать, где проблема;) –

0

Как правило, если вы хотите масштабировать вокруг точки (sx, sy), вам необходимо перевести свой мир так, чтобы (sx, sy) был в начале координат, выполнял масштабирование и переводил в обратную сторону, чтобы (sx, sy) возвращается туда, где он был изначально.