| 
				
				"Отражения" SDL2.
				 |   |  
| Alkosha | Дата: Среда, 24 Декабря 2014, 08:22 | Сообщение # 1 |  
 
участник 
Сейчас нет на сайте 
 
 | Вот скетч, набросал в графическом редакторе, но хочу реализовать подобное (отражение в "воде") на SDL2. 
    
   Поначалу казалось, что задачка элементарная. Но не тут-то было.   До данной затеи была одна таргет-текстура, на которую я рендерил всё подряд SDL_SetRenderTarget(renderer, texTarget);. Зачем она нужна, спросите вы? Чтоб зумить, создавать эффект приближения\удаления камеры относительно сцены. 
   Создал две таргет-текстуры.   На одной рисую бэкграунд, на второй то, что будет выводиться как в нормальном виде, так и в отзеркаленном... Но нужно очищать область рендеринга. Именно таким образом, чтоб вся текстура была прозрачной в следующем цикле рендеринга. 
   как поступить в таком случае ? Каждый раз дэстроить текстуру (SDL_DestroyTexture(texTarget);) и создавать заново? Не затратно ли это в плане производительности ?Добавлено (24 декабря 2014, 08:22) ---------------------------------------------
  Цитата Alkosha (  )   Каждый раз дэстроить текстуру (SDL_DestroyTexture(texTarget);) и создавать заново?    
   Именно так я и сделал. 
   Теперь вторую таргет-текстуру я в нормальном виде вывожу, и её же флипаю по вертикали. 
   Правда оффсет не подобрал ещё. 
    
 
 Сообщение отредактировал Alkosha - Воскресенье, 21 Декабря 2014, 00:11  |  
| 
 | 
 |    |  
| Saitei | Дата: Среда, 24 Декабря 2014, 08:30 | Сообщение # 2 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | Цитата Alkosha (  )  Именно так я и сделал. 
   Теперь вторую таргет-текстуру я в нормальном виде вывожу, и её же флипаю по вертикали. 
   Правда оффсет не подобрал ещё     Можно ещё для флипнутой текстуры в случае с водой сделать эффект волны. Будет неплохо выглядеть, мне кажется  
 
 Сообщение отредактировал Saitei - Среда, 24 Декабря 2014, 08:31  |  
| 
 | 
 |    |  
| Alkosha | Дата: Среда, 24 Декабря 2014, 08:43 | Сообщение # 3 |  
 
участник 
Сейчас нет на сайте 
 
 | Цитата Saitei (  )  Можно ещё для флипнутой текстуры в случае с водой сделать эффект волны   
   SDL2 не умеет шейдеры. А а getpixel \ setpixel для такого массива пикселей будут адски грузить проц. 
   Добавлено (24 декабря 2014, 08:43)   ---------------------------------------------   Я попросту приплюсну по вертикали. Но тут гемор с оффсетом, так как камера у меня ещё должна двигаться по Z (масштабирование картинки), и оффсет зависит от зума.
 
 Сообщение отредактировал Alkosha - Среда, 24 Декабря 2014, 08:45  |  
| 
 | 
 |    |  
| Snake174 | Дата: Среда, 24 Декабря 2014, 10:29 | Сообщение # 4 |  
 
участник 
Сейчас нет на сайте 
 
 | Цитата SDL2 не умеет шейдеры.     http://forums.libsdl.org/viewtopic.php?t=6946&sid=e1086f0489c98133fc10fe202ca08214 
   Можно в принципе ещё делать всё на чистом OpenGL, а SDL использовать только для создания окна и обработки ввода.
  Не следует обманывать инспектора   Pipmak Assistant   Love2D Exporter   Love2D-Helpers     Old Consoles Games
 
 Сообщение отредактировал Snake174 - Среда, 24 Декабря 2014, 10:32  |  
| 
 | 
 |    |  
| Alkosha | Дата: Суббота, 27 Декабря 2014, 15:25 | Сообщение # 5 |  
 
участник 
Сейчас нет на сайте 
 
 | Цитата Snake174 (  )  Можно в принципе ещё делать всё на чистом OpenGL, а SDL использовать только для создания окна и обработки ввода.   
   Про это я знаю. А я говорил про чистый SDL2. 
   Добавлено (24 декабря 2014, 11:51)   ---------------------------------------------   Когда-то давно пытался настроить проект кодблокса на openGL+SDL, так ничего и не получилось. Раздельно openGL-проект и SDL-проект пашут, а в одном проекте - шляпа. С тех пор я и забил. 
   Добавлено (24 декабря 2014, 11:54)   ---------------------------------------------   Цитата Snake174 (  )  а SDL использовать только для создания окна и обработки ввода.   
   По сути, тот же glut можно использовать, не обязательно SDL 
   Добавлено (27 декабря 2014, 15:25)   ---------------------------------------------     никак не могу расчитать оффсет при масштабировании. 
   Textarget - нормальное изображение, Textarget2 - отзеркаленное. 
   (cum - класс камеры)   Спрайты на textarget размещаются по X-cum.x, Y-cum.y 
   Код           SDL_Rect dstrect;          dstrect.w=800*cum.z;          dstrect.h=600*cum.z;          dstrect.x=400-400*cum.z;          dstrect.y=300-300*cum.z;          SDL_Point center;          center.x=400;          center.y=300; 
          SDL_SetTextureBlendMode(texTarget,SDL_BLENDMODE_BLEND);          SDL_SetTextureBlendMode(texTarget2,SDL_BLENDMODE_BLEND); 
          SDL_SetRenderTarget(renderer, NULL);          SDL_RenderCopyEx(renderer, texTarget, NULL, &dstrect, cum.angle,          ¢er, SDL_FLIP_NONE); //БЭКГРАУНД (1-ый план) 
      SDL_RenderCopyEx(renderer, texTarget2, NULL, &dstrect, cum.angle,        ¢er, SDL_FLIP_NONE); // НОРМАЛЬНОЕ ИЗОБРАЖЕНИЕ (2-ой план) 
          dstrect.y=-300*cum.z; // ВОТ ТУТА НАДО КАК-ТО РАСЧИТАТь ПОЗИЦИОНИРОВАНИЕ ТЕКСТУРЫ ПО Y 
          SDL_SetTextureAlphaMod(texTarget2,100);          SDL_RenderCopyEx(renderer, texTarget2, NULL, &dstrect, cum.angle,          ¢er, SDL_FLIP_VERTICAL); // ОТРАЖЕНИЕ 
          effects.shading();          gui.display();          dialog.display();          SDL_RenderPresent(renderer);          SDL_DestroyTexture(texTarget2);  
 
 Сообщение отредактировал Alkosha - Суббота, 27 Декабря 2014, 16:02  |  
| 
 | 
 |    |  
| PoidetLi | Дата: Понедельник, 15 Июня 2015, 17:40 | Сообщение # 6 |  
 
участник 
Сейчас нет на сайте 
 
 | Цитата Alkosha (  )     dstrect.y=(300-300*cum.z)*-1; ;  Может так?
  в еюдуго прсхлуренц   http://gcup.ru/forum/9-44187-1 мой Project 96
 |  
| 
 | 
 |    |     
		
		 
 |