Autor Wątek: Oldschoolowy efekt plazmy  (Przeczytany 1508 razy)

Offline slowbro

  • Użytkownik

# Lipiec 28, 2016, 02:42:14
Cześć

Interesuje mnie oldschoolowy efekt plazmy jaki można zobaczyć np. tutaj https://en.wikipedia.org/wiki/Plasma_effect#/media/File:Plasma_effect.jpg Wydaje się, że najprostszym sposobem uzyskania efektu jest zdefiniowane tablicy GLubyte Image[Wysokosc][szerokosc][4]. Następnie w funkcji init() uzupełnić tablicę wartościami kolorów z wykorzystaniem sin oraz cos, aby ładnie wyglądały. Następnie w funkcji rysującej w pętli zmieniać wartości kolorów, tworzyć z tego teksturę, bindować na kwadrat. Zależy mi, aby zakodować efekt plazmy bez wykorzystania shaderów.

Macie może jakieś inne prostsze i szybsze w realizacji pomysły na efekt plazmy?

Pozdrawiam

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kos

  • Użytkownik
    • kos.gd

# Lipiec 28, 2016, 09:12:55
Zależy mi, aby zakodować efekt plazmy bez wykorzystania shaderów.
Na co kodujesz że nie ma shaderów? :(

Offline slowbro

  • Użytkownik

# Lipiec 28, 2016, 09:56:49
Próbuje zakodować małe demko z prostymi, niewyszukanymi efektami. Open GL używałem dość dawno temu i teraz przypominam go sobie.  Z tego forum i tutoriali widzę, że teraz pisze się inaczej niż parę lat temu. Nie chcę na razie uczyć się używać shaderów z powodu braku czasu i chcę przypominać sobie po kolei Open GL. Na shadery przyjdzie czas w przyszłości, najpierw podstawy:)

Offline laggyluk

  • Użytkownik
    • http://laggyluk.com

# Lipiec 28, 2016, 11:59:52
tylko jaki pożytek z nieaktualnych podstaw? :p

Offline slowbro

  • Użytkownik

# Lipiec 28, 2016, 17:35:30
Generyczne założenia. A coś bardziej merytorycznego na temat podejścia do zrobienia efektu plazmy da radę?:)
« Ostatnia zmiana: Lipiec 28, 2016, 17:47:56 wysłana przez slowbro »

Offline laggyluk

  • Użytkownik
    • http://laggyluk.com

# Lipiec 28, 2016, 21:30:10
tu jest parę pomysłów jakbyś zmienił zdanie
https://www.shadertoy.com/results?query=plasma

Offline MDW

  • Użytkownik
    • www.encore-games.com

# Lipiec 28, 2016, 21:56:57
Taka prosta plazma jest banalnie prosta. Takie rzeczy robiło się bez problemu na Amidze 500 z 68000 7 MHz w AMOSie (taki fajny Basic) i chodziło to z pełną prędkością przy dosłownie zerowej zajętności procesora. :) Cały "myk" polega na tym, że to jest tylko wyświetlenie odpowiedniego obrazka na ekranie z <=256 kolorów (tryb z indeksowanym kolorem) i "przewijanie" palety kolorów. Nie trzeba modyfikować na ekranie nawet jednego pixela. :) Ale przyznam się, że to co było lamersko banalne na Amidze w połowie lat 80, dzisiaj jest trochę większym wyzwaniem. Ja nie mam pomysłu jakbym miał to zrobić w OpenGL bez shaderów. Jakąś inną plazmę (nawet lepiej wyglądającą) może dałoby się jakoś wykombinować. Ale dokładnie takiej nie potrafiłbym zrobić. :)

Offline slowbro

  • Użytkownik

# Lipiec 29, 2016, 00:20:49
W nawiązaniu do pierwszego postu zdefiniowałem strukturę zawierającą trzy pola dotyczące koloru:
typedef struct
{
float red;
float green;
float blue;
} Color;

zdefiniowałem tablicę dwuwymiarową:
static GLuint texName;
#define ImageWidth 512
#define ImageHeight 512

Color colors[ImageHeight][ImageWidth];

w części init() kodu tablica uzupełniana jest informacją o kolorach:
void initColors()
{
   int i, j;   
   for (i = 0; i < ImageHeight; i++) {
      for (j = 0; j < ImageWidth; j++) {
         colors[i][j].red = (GLfloat)(32 + 31 * cos( i * PI / 128 + (double)timeGetTime()/74 ));;
         colors[i][j].green = (GLfloat)(32 + 31 * sin( i * PI / 128 + (double)timeGetTime()/63 ));
         colors[i][j].blue = (GLfloat)(32 - 31 * cos( i * PI / 128 + (double)timeGetTime()/81));
      }
   }
}

Jak nałoży się teksturę na kwadrat to wychodzą poziome linie jak na widocznym zrzucie ekranu https://zapodaj.net/5665c74ea1dca.jpg.html Dlaczego kolorowe linie ułożone są poziomo, a nie powykrzywiane jak na plazmie? Wzory do generowania pochodzą z przykładowych kodów źródłowych plazmy znalezionych na internecie.

Offline Interceptor

  • Użytkownik

# Sierpień 02, 2016, 12:34:47
http://hugi.scene.org/online/hugi18/cogentex.htm

bez shaderów, kolory zmieniasz interpolując je po wartości przekazywanej do sin, cos

Offline slowbro

  • Użytkownik

# Sierpień 02, 2016, 20:51:08
Dzięki Interceptor! Fajny materiał.