Proceduralne podejście do generowania tekstur

Wielkość: px
Rozpocząć pokaz od strony:

Download "Proceduralne podejście do generowania tekstur"

Transkrypt

1 Proceduralne podejście do generowania tekstur Paweł Sabat Praca zamieszczona na Wersja bez obrazków na końcu Praca inżynierska Promotor: dr Przemysław Kobylański Wydział Podstawowych Problemów Techniki Politechnika Wrocławska Wrocław 2014

2 1 Wstęp Celem projektu inżynierskiego było zaimplementowanie przykładowych technik tekstur proceduralnych przy użyciu jednej z najnowszych technologii internetowych - WebGL 1.0. Obowiązkowym elementem pracy jest implementacja wybranych technik, oraz zaprezentowanie ich. Ważnym elementem jest też możliwość modyfikowania parametrów i oglądania wyników w czasie rzeczywistym. Znaczna część technik i informacji o nich jest zaczerpnięta z książki Texturing & Modeling. A procedural approach [1]. Kod bazowej funkcji - noise - został zaczerpnięty ze strony [NOISE]. Pełny spis pozycji które wykorzystywano przy pisaniu pracy znajduje się w dziale Literatura. Praca składa się z następujących rozdziałów 1. Wstęp - opis celu projektu inżynierskiego 2. Wyjaśnienie pojęć - wprowadzanie i wyjaśnienie niezbędnych pojęć 3. Wstęp do tekstur proceduralnych - wyjaśnienie czym są tekstury proceduralne, gdzie się je używa i z jakich powodów 4. Użyte technologie - ogólny opis użytych technologii, oraz podrozdział przybliżający temat WebGL Wymagania, uruchamianie programu, różnice między przeglądarkami 6. Szkielet programu - ogólny opis kodu bazowego, współdzielonego przez wszystkie strony 7. Noise - opis niezbędnej funkcji będącej podstawą wszystkich zaimplementowanych efektów 8. Zaimplementowane techniki - wyjaśnienie i opis 9. Ograniczenia technologii 10. Podsumowanie Literatura 2 Wyjaśnienie pojęć model Komputerowa reprezentacja obiektu. 1

3 tekstura Obraz nakładany na model w celu nadania mu bardziej realnego wyglądu przy jedoczesnym niskim nakładzie obliczeniowym. tekstura proceduralna Tekstura wygenerowana przez komputer, a nie stworzona przez człowieka. Jako tekstury proceduralne nie są zaliczane też procedury malowane w programach graficznych. API Application Programming Interface - zestaw interfejsów do wykonywania określnego zadania. OpenGL API do renderowania grafiki 3D. OpenGl ES API do renderowania grafiki 3D na urządzeniach mobilnych. Okrojone w stosunku do OpenGL. WebGL API do renderowania grafiki 3D dostępne z poziomu przeglądarki internetowej za pomocą javascript. Shader Program uruchamiany na karcie graficznej służący do przetwarzania grafiki 3D i generowania obrazu. GLSL Język programowania w którym pisane są shadery. Vertex Punkt w przestrzeni i powiązane z nim atrybuty np. jego pozycja czy kolor. Vertex shader Shader, który odpowiada za przetwarzanie vertexów np. zmienianie ich pozycji przez przesunięcie czy obrót. Fragment Dane, które mogą posłużyć do wygenerowania pixela. Fragment shader Shader, który odpowiada za przetworzenie fragmentów, w szczególności obliczenie koloru możliwego pixela. 2

4 Pixel Najmniejszy wyświetlany fragment obrazu. Zlepek słów od ang. picture element. Noise Funkcja, która w wersji idealnej powinna spełniać następujące kryteria: dla tego samego argumentu da to samo wyjście jej wartość jest w przedziale -1 do 1 ma ograniczoną częstotliwość z dołu i z góry, z czego maksymalna częstotliwość to ok. 1 nie posiada oczywistych regularności ani krótkiego okresu jest stacjonarna, czyli jej statystyczne właściwości nie zmieniają się po translacji jest izotropiczna, czyli jej statystyczne właściwości nie zmieniają się przy rotacji 3 Wstęp do tekstur proceduralnych 3.1 Czym są? Tekstury proceduralne to tekstury wygenerowane przez komputer. Za tekstury proceduralne uważa się np. wartości funkcji przekształcone do postaci możliwej do użycia jako kolor pixela, ale już np. nie będzie teksturą proceduralną obraz malowany w photoshop ie mimo że całkowicie zostaje stworzony przez oprogramowanie. Jest kwestią dyskusyjną, czy obraz stworzony przez np. ręczne nakładanie na siebie tekstur proceduralnych w celu uzyskania pożądanego efektu jest też teksturą proceduralną. 3.2 Jakie są zalety i wady tekstur proceduralnych? Tekstury proceduralne mają następujące zalety: są bardzo małe w porównaniu z obrazami zapisanymi w plikach potrafią generować bardzo skomplikowane wzory można łatwo kontrolować ich poziom szczegółów przy powiększaniu- /zmniejszaniu Tekstury proceduralne mają następujące wady: ciężko jest stworzyć teksturę z pożądanym efektem 3

5 ciężkie lub niemożliwe jest kontrolowanie pojawiających się szczegółów wymagają sporej wiedzy nt. programowania, grafiki, obycia i dużej wyobraźni 3.3 Jak się tworzy tekstury proceduralne Tekstury proceduralne tworzy się przez napisanie odpowiedniego kodu, który wygeneruje obraz. Ponieważ wyniki takiego programu często są zaskakujące i nieprzewidziane, tworzenie tekstur proceduralnych to w dużym stopniu wprowadzanie możliwych modyfikacji do już istniejącego kodu i sprawdzanie wyników już w postaci wygenerowanego obrazu. Jest to więc bardziej sztuka niż nauka ścisła, w której można zawsze z góry przewidzieć jaki obraz się wygeneruje. 4 Użyte technologie Praca wykorzystuje technologie: HTML5 JavaScript WebGL 1.0, GLSL ES 1 HTML5 oraz JavaScript to trzon wszystkich współczesnych aplikacji webowych. Służą one do prezentowania treści (HTML5) oraz do tworzenia bardziej interaktywnych i dynamicznych stron (JavaScript). Ponieważ technologie te są powszechnie znane, pomija się ich dokładniejszy opis. 4.1 WebGL 1.0, GLSL ES 1 WebGL 1.0 to opublikowane po raz pierwszy w 2011 roku [WEBGL100] API do renderowania grafiki 3D zaprojektowane do użycia w sieci. WebGL 1.0 jest oparte na OpenGL ES 2.0, stąd posiada bardzo podobne możliwości, z tą różnicą że WebGL jest przeznaczone do użycia z elementem HTML5 Canvas [WEBGL10]. Dostęp do API WebGL jest uzyskiwane przez kontekst pobrany z elementu canvas [WEBGL10, HTML5]. 1 var canvas = document. getelementbyid ( some canvas id ) 2 var context = canvas. getcontext ( webgl ) Po pobraniu kontekstu można zacząć programować pod WebGL. WebGL jest jedynie narzędziem pośredniczącym. Odpowiada ono za ustawienie rzeczy pod renderowanie grafiki 3D (stworzenie buforów, dostarczenie danych) oraz za wywołanie funkcji, w wyniku której zostanie wyświetlony 4

6 obraz. Kod wywołujący funkcje WebGL to JavaScript, zatem jest wykonywany po stronie procesora. Z drugiej strony są shadery. Są to małe programy, dla WebGL 1.0 pisane w języku OpenGL ES Shading Language 1 (w skrócie GLSL ES 1) i odpalane na karcie graficznej. To one odpowiadają za przetworzenie dostarczonych danych i ich renderowanie. Aby zrozumieć, jak te technologie współdziałają ze sobą, należy zapoznać się z przepływ danych w WebGL. Został on przejrzyście przestawiony i wyjaśniony w książce [2]. W uproszczeniu wygląda następująco: bufory danych vertex shader fragment shader ekran Bufory danych to pamięć na karcie graficznej, do której wgrano informacje potrzebne do wyświetlenia obiektu. Są to np.: położenie verteksów w przestrzeni kolor każdego verteksa normalna do verteksa ilość odbijanego światła Niezbędnym jest jedynie położenie verteksów w przestrzeni, ponieważ bez tego nie mamy kształtu do wyświetlenia. Wszystkie pozostałe paramtery są całkowicie opcjonalne. Za tworzenie buforów i wgrywanie do nich danych odpowiada WebGL. Vertex shader odpowiada za przekształcenia położenia verteksów w przestrzeni. Pozwala on np. na obrót obiektów na scenie poprzez zaaplikowanie odpowiedniej transformacji na każdym verteksie tworzącym dany obiekt. W tej pracy inżynierskiej vertex shader używa się jedynie do transformacji wyświetlanego obszaru do przedziału [0, 1] 2. Fragment shader odpowiada za ustalenie jakiego koloru ma być wyświetlany piksel. Jego zadaniem jest nakładanie tekstur na obiekty, aplikowanie efektów specjalnych czy światła na scenie. Ponieważ fragment shader odpowiada za kolor, kod w nim zawarty odpowiada za wszystkie efekty generowane w ramach tej pracy inżynierskiej i stanowi najważniejszą jej część. Verteks shader oraz fragment shader razem tworzą tzw. program, który stanowi całość i może zostać użyty przy kolejnym wywołaniu funkcji rysującej. Program będzie dalej nazywany jako webgl program, żeby nie powodować dezorientacji. Całość akcji niezbędnych do wyświetlenia obrazu na ekranie przy użyciu WebGL 1.0 w uproszczeniu przestawia się następująco: 1. stwórz webgl program 2. stwórz vertex shader 5

7 3. załaduj źródła do vertex shadera 4. skompiluj vertex shader 5. dodaj vertex shader do webgl programu 6. stwórz fragment shader 7. załaduj źródła do framgent shadera 8. skompiluj fragment shader 9. dodaj fragment shader do webgl programu 10. zlinkuj webgl program 11. ustaw webgl program jako aktualnie używany 12. utwórz bufor na atrybuty verteksów 13. wgraj dane do bufora 14. podepnij bufor pod odpowiedni atrybut fragment shadera 15. wywołaj funkcję rysującą prymitywy Z powodu tak wielu niezbędnych akcji do narysowania nawet najprostszego kształtu na ekranie, WebGL posiada początkowo bardzo stromą krzywą uczenia się. Nie jest możliwe rozbicie tych etapów na mniejsze, łatwiej przyswajalne i niezależne części, ponieważ wszystkie one są niezbędne. Osoba chcąca zrozumieć działanie całego procesu powinna zajrzeć do pozycji [2], oraz uzupełniająco do [WEBGL10] oraz [GLES20]. 5 Wymagania, uruchamianie programu, różnice między przeglądarkami Całość pracy została napisana w postaci stron internetowych. Nie jest więc wymagana instalacja. Wystarczy uruchomić odpowiednią stronę. Wymagane za to są: przeglądarka internetowa obsługująca HTML5, javascript, WebGL 1.0 włączona obsługa WebGL w przeglądarce dostępna akceleracja 3D w systemie 6

8 Program był uruchamiany na Firefox 27, Chrome 33, Internet Explorer 11 pod Windows 7. Na wszystkich przeglądarkach działa, jednak z powodu różnic między przeglądarkami strony wykazują trochę odmienne zachowanie. Firefox oraz IE nie obsługują pola color w formularzach HTML5, stąd pole to jest w nich wyświetlane jedynie jako tekst z wartością koloru w postaci #RRGGBB, tak jak w CSS. Wartości te można ręcznie modyfikować. W Chrome pole to jest wyświetlane w postaci przycisku wyświetlającego aktualnie wybrany kolor, który po kliknięciu pozwala wybrać inny kolor z palety kolorów. Firefox nie przesyła na bieżąco powiadomień do strony nt. modyfikacji pola typu range w trakcie przesuwania. Stąd obraz jest odświeżany dopiero po puszczeniu suwaka. W Chrome oraz IE powiadomienia o zmianie wartości są przesyłane na bieżąco, dzięki czemu można w trakcie obserwować zmiany jakie to powoduje w generowanym obrazie. IE pyta za każdym razem czy pozwalać stronie na włączenie zablokowanych skryptów. Żeby strona działała, niezbędna jest zgoda użytkownika. Program nie był testowany w przeglądarce Opera. WebGL jest tam domyślnie wyłączony i trzeba go najpierw aktywować. 6 Opis szkieletu programu Wszystkie strony składają się z wcześniej utworzonego kodu szkieletowego, który następnie był powielany i dostosowywany na potrzeby danego efektu. Różnice między poszczególnymi efektami to przede wszystkim kod fragment shadera oraz kontrolki pozwalające na wygodną zmianę przekazywanych parametrów. Poniżej przedstawiam główne elementy szkieletu. Dokładne opisy użytych tutaj funkcji znajdują się w specyfikacjach [HTML5, WEBGL10, GLES20, GLES20GLSL]. Ogromnie przydatną pozycją, bez której ciężko byłoby napisać cokolwiek jest książka [2]. Implementacja szkieletu wykorzystuje bibliotekę ze strony [MATRIX] do operacji na macierzach. Opis teoretyczny przekształceń przestrzeni na macierzach, ich znaczenie i wyprowadzenie znajduje się w znakomitej pozycji [3]. Zakładam, że w zmiennej gl znajduje się kontekst elementu canvas. 1 var canvas = document. getelementbyid ( some canvas id ) 2 var g l = canvas. getcontext ( webgl ) 6.1 Tworzenie shadera 1 f u n c t i o n getshader ( gl, tagid, shadertype ) 2 { 3 var shadernode = document. getelementbyid ( t a g I d ) ; 4 var shadersrc = shadernode. innerhtml ; 7

9 5 6 var shader = g l. createshader ( shadertype ) ; 7 g l. shadersource ( shader, shadersrc ) ; 8 g l. compileshader ( shader ) ; 9 10 i f ( g l. getshaderparameter ( shader, g l. COMPILE STATUS )!= true ) 11 { 12 a l e r t ( tagid + shader compilation f a i l e d \n\n + g l. getshaderinfolog ( shader ) ) ; 13 r eturn n u l l ; 14 } return shader ; 17 } Powyższa funkcja odpowiada za: utworzenie shadera wyciągnięcia źródeł z elementu strony o przekazanym id wstawienie źródeł do shadera skompilowanie shadera ewentualną obsługę błędów podczas kompilacji Pierwsze dwie linijki w ciele funkcji odpowiadają za uzyskanie kodu źródłowego dla shadera. Następnie tworzony jest shader, do którego wstawiane są źródła shadera, po czym następuje kompilacja. Jeśli wystąpiły błędy są one wyświetlane za pomocą powiadomienia alert i zwracany jest null. Jeśli wszystko przebiegło pomyślnie, funkcja zwraca skompilowany shader. Aby przekazać źródła shadera do funkcji gl.shadersource, trzeba je mieć w zmiennej typu string. Niektórzy autorzy stron używających WebGL piszą shader bezpośrednio jako string, jednak jest to wysoce niewygodne. Innym rozwiązaniem, używanym np. na stronie jest wstawienie kodu shadera do tagu 1 <s c r i p t type = xxx id = s c r i p t i d >... </ s c r i p t > gdzie xxx to typ skryptu, który przeglądarka nie rozpoznaje. Domyślnym zachowaniem przeglądarki jest zignorowanie takiego elementu, a dzięki przypisanemu id jest możliwe odwołanie się do tego elementu w dalszych skryptach. 1 var scriptelement = document. getelementbyid ( s c r i p t i d ) ; 8

10 Aby wyciągnąć tekst shadera z elementu, który już został znaleziony można posłużyć się jedną z dwóch metod: użyć API HTML DOM (Document Object Model) użyć atrybutu innerhtml Użycie HTML DOM polega na pobraniu wszystkich węzłów zawartych w uzyskanym elemencie i sklejeniu zawartości węzłów tekstowych. Jest to jednak niepotrzebne, ponieważ istnieje drugi sposób. Atrybut innerhtml zawiera tekstową reprezentację elementów zawartych w ciele elementu, na którym ten atrybut jest sprawdzany. Stąd można łatwo i wygodnie uzyskać treść shadera ze skryptu. 1 var source = scriptelement. innerhtml ; W pracy tej użyto sposobu drugiego. 6.2 Tworzenie i używanie webgl programu 1 // c r e a t e program 2 var program = g l. createprogram ( ) ; 3 // add shaders to program 4 g l. attachshader ( program, vertexshader ) ; 5 g l. attachshader ( program, fragmentshader ) ; 6 // l i n k program 7 g l. linkprogram ( program ) ; 8 i f ( g l. getprogramparameter ( program, g l. LINK STATUS )!= true ) 9 { 10 a l e r t ( Program l i n k i n g f a i l e d + g l. getprograminfolog ( program ) ) ; 11 r eturn ; 12 } 13 // s e t to use program 14 g l. useprogram ( program ) ; W pierwszej linijce tworzony jest webgl program. Następnie dodawane są do niego wcześniej utworzone shadery za pomocą funkcji getshader(), po czym następuje linkowanie. Ponieważ vertex shader i fragment shader ściśle ze sobą współpracują, muszą one być ze sobą zgodne: zmienne przez które parametry są przekazywane z jednego do drugiego (zmienne typu varying) muszą mieć takie same nazwy i typy w obu 9

11 zmienne uniform przez które przekazywane są parametry globalne dla shaderów muszą mieć zgodne nazwy jeśli są użyte w obu Dodatkowo na shadery są narzucone pewne ograniczenia, takie jak maksymalna ilość zmiennych typu uniform. Wszystkie te rzeczy są sprawdzane podczas linkowania. Jeśli w trakcie linkowania nastąpiły błędy, są one wyświetlane. W przeciwnym razie webgl program jest ustawiany jako aktualnie używany. Od tej pory wszystkie wyświetlane kształty będą przez niego przetwarzane. 6.3 Przekazywanie danych do webgl programu Dane do webgl programu są przekazywane przez dwa typy zmiennych: uniform attrib uniform Zmienne typu uniform można traktować jak zmienne globalne w ramach programu. Wartość tych zmiennych jest przypisana przed uruchomieniem funkcji wyświetlającej, zatem podczas pracy shadera, wartość zmiennych uniform jest stała. W zmiennych tych zapisuje się np. macierz transformacji dla verteksów. Wszystkie parametry dostępne do modyfikacji na stronach implementujących techniki proceduralne są przekazywane przez zmienne typu uniform, np. kolory. 1 uniform vec3 c o l o r a t 0 ; 2 uniform vec3 c o l o r a t 1 ; Ustawianie wartości typu uniform odbywa się przez wywołanie funkcji WebGL. Zmienna typu uniform przyjmuje dokładnie jedną wartość, która w trakcie działania shadera się nie zmienia. Bufor na dane jest więc niepotrzebny. 1 program vars. s c a l e = g l. getuniformlocation ( program, c o l o r a t 0 ) 2 g l. uniform3f ( program vars. c o l o r a t 0, 1. 0, 1. 0, 0. 0 ) W pierwszej linijce pobierana jest lokalizacja zmiennej uniform o nazwie color at 0. Lokalizacja ta służy jako id dla zmiennej w programie. Następnie do zmiennej tej (pod jej lokalizację) jest wstawiana wartość (1.0, 1.0, 0.0), co odpowiada kolorowi żółtemu. Pozostałe parametry dostępne do modyfikacji na stronie (scale, threshold,... ) też są zmiennymi typu uniform, tak samo jak color at 0, są więc przekazywane do shadera w analogiczny sposób. 10

12 6.3.2 attrib Zmienne typu attrib są parametrami wejściowymi dla shadera, które mogą być różne dla każdego verteksa. Wartość zmiennych attrib jest ustalana na stałe lub pobierana z ustalonego wcześniej bufora. W zmiennych tych przechowuje się wszelkie atrybuty unikalne dla verteksów np. ich pozycja czy kolor. Zmienne typu attrib mogą być przekazywane tylko do verteks shadera. Stąd, żeby fragment shader dostał parametr unikalny dla każdego verteksa, verteks shader musi go przekazać fragment shaderowi. Ustawianie wartości typu attrib zostanie omówione na przykładzie poniższego kodu. 1 // v a l u e s f o r apos w i l l be taken from array 2 var vsposindex = g l. g e t A t t r i b L o c a t i o n ( program, apos ) ; 3 i f ( vsposindex == 1 ) 4 { 5 a l e r t ( I n v a l i d a t t r i b u t e name in g e t A t t r i b L o c a t i o n ( ) ) ; 6 return ; 7 } 8 g l. enablevertexattribarray ( vsposindex ) ; 9 10 // s e t some p o i n t s 11 var v e r t i c e s = [ , 1. 0, 0. 5, , 0. 0, 0. 5, , 1. 0, 0. 5, , 0. 0, ] ; // c r e a t e b u f f e r f o r v e r t i c e s 19 v e r t B u f f e r = g l. c r e a t e B u f f e r ( ) ; 20 g l. bindbuffer ( g l.array BUFFER, v e r t B u f f e r ) ; 21 // put v e r t i c e s i n t o b u f f e r 22 g l. bufferdata ( g l.array BUFFER, new Float32Array ( v e r t i c e s ), g l.static DRAW ) ; // say that v a l u e s f o r vertexshader. pos should be taken from v e r t B u f f e r 25 g l. v e r t e x A t t r i b P o i n t e r ( vsposindex, 3, g l.float, f a l s e, 0, 0 ) ; Najpierw trzeba pobrać lokalizację atrybutu w programie. Lokalizacja ta służy jako id dla zmiennej w programie. W tym celu przekazuje się program 11

13 oraz nazwę zmiennej do funkcji getattriblocation(), która zwraca żądaną lokalizację. Następnie ustawiane jest, że zmienna apos (jej lokalizacja jest w vsposindex) ma mieć wartości pobierane z bufora, a nie ustalone na jedną wartość. Dalej tworzona jest tablica pozycji kolejnych verteksów oraz bufor na nie, po czym bufor ten zostaje ustawiony jako aktualny ARRAY BUFFER. W tym momencie wszystko co zostaje wykonane na ARRAY BUFFER będzie dotyczyło vertbuffer. Należy zaznaczyć, że bufor ten znajduje się w pamięci karty graficznej, a nie w pamięci RAM. Ponieważ funkcja bufferdata() przyjmuje jedynie tzw. typed arrays, trzeba skonwertować tablicę vertices na tablicę typed array odpowiedniego typu. Zajmuje się tym funkcja Float32Array(). Szczegóły dotyczące typed arrays są w odpowiedniej specyfikacji [TYPEDARRAY]. Po konwersji na tablicę typed array dane z vertices są wstawiane do bufora aktualnie przypisanego do ARRAY BUFFER, czyli do wcześniej utworzonego vertbuffer. Na koniec bufor ten zostaje powiązany z atrybutem apos, którego kolejne wartości będą brane z właśnie przypisanego bufora. 6.4 Rysowanie wprowadzonych danych Gdy wszystko zostanie już ustalone należy wywołać jedną z dwóch funkcji rysujących: drawarrays() bądź drawelements(). Obie z tych funkcji rysują prymitywy takie jak: punkty linie trójkąty drawarrays() bierze jednak kolejne verteksy z bufora, natomiast drawelements() bierze verteksy z bufora wedle indeksów przechowywanych w innym buforze. Pozwala to zaoszczędzić pamięć, jeśli duża liczba verteksów w wyświetlanym kształcie się powtarza. Ponieważ jednak w tej pracy wykorzystuje się jedynie dwa trójkąty do wyświetlania obrazu, używana jest funkcja drawarrays(). 1 // f i n a l l y show what we ve done 2 g l. drawarrays ( g l. TRIANGLE STRIP, 0, v e r t i c e s. l e n g t h /3) ; Powyższa funkcja powoduje wyświetlenie trójkątów zbudowanych z 4 verteksów (w vertices jest 12 punktów), bez żadnego offsetu. Trójkąty są bufowane za pomocą trybu TRIANGLE STRIP, który bierze dwa pierwsze verteksy, po czym dla każdego kolejnego tworzy trójkąt zbudowany z aktualnego verteksa i dwóch poprzednich. 12

14 6.5 Interfejs użytkownika Interfejs użytkownika został stworzony na bazie HTML5. Na każdej ze stron zawiera on canvas na którym wyświetlany jest generowany obraz, oraz odpowiednie kontrolki podpięte pod zmienne uniform shaderów. Obraz jest odświeżany przy każdej zmianie dowolnego parametru, dzięki czemu można od razu oglądać wyniki dokonanych zmian. Zakresy kontrolek zostały dobrane eksperymentalnie, tak żeby najlepiej było widać tworzące się ciekawe zachowania generowanego obrazu. Stąd w pewnych teksturach ten sam parametr może mieć większy zakres, bądź inną granulację. W zależności od tekstury dodano też do stron dodatkowe paramtery kontrolujące nowe funkcje, tak żeby udostępnić użytkownikowi nie tylko podstawowy zakres modyfikacji parametrów, ale też dać mu nowe możliwości kontroli. 7 Noise Bazą prawie wszystkich stworzonych efektów jest funkcja noise. Bazuje ona na rozmieszczeniu watości losowych na n-wymiarowej kracie, których suma przemnożona przez współczynniki jest zwracana jako wartość. Współczynniki te zależą od punktu w którym chcemy obliczyć wartość funkcji i zawsze są równe zero oprócz komórek kratki w bezpośrednim otoczeniu punktu. Szczegółowe omówienie implementacji znajduje się w książce [1]. Implementacja funkcji noise wykorzystana w tej pracy została pobrana ze strony [NOISE]. Implementacja ta jest powszechnie używana nie tylko w swojej oryginalnej postaci, ale też przepisywana do innych języków. Z powodu ograniczeń technologii implementacja ta jest wklejona bezpośrednio w kod źródłowy każdej strony, a nie zaimportowana osobno z pliku. 8 Zaimplementowane techniki Techniki tekstur proceduralnych zostały zaimplementowane i osadzone w stronach internetowych, we wcześniej opisany sposób. Nazwy poniższych podrozdziałów odpowiadają nazwom poszczególnych stron zawierających implementację odpowiedniej techniki. Opisy kolejnych stron nie zawierają rzeczy opisane na stronach wcześniejszych. Stąd jeśli czytelnik ma wątpliwości, należy przeczytać opis wcześniejszych technik. Obrazy prezentujące poszczególne techniki dla różnych parametrów zostały zamieszczone na końcu pracy inżynierskiej. 13

15 noise Strona przedstawia jak wygląda noise bez żadnych dodatkowych przekształceń. Ponieważ antydziedzina funkcji noise jest wartością z przedziału [ 1.0, 1.0], musi ona zostać przekształcona na przedział [0.0, 1.0] żeby mogła być wyświetlona. Przekształceniem zastosowanym jest tutaj bezpośrednie odwzorowanie odcinka [ 1.0, 1.0] na odcinek [0.0, 1.0]. 1 f l o a t n o i s e = ( c n o i s e ( vpos. xy ) ) / 2. 0 ; Dodatkowo użyty jest parametr scale pozwalający na przeskalowanie wektora wejściowego dla noise, dzięki czemu można kontrolować stopień powiększenia funkcji w generowanym obrazie. 1 f l o a t n o i s e = ( c n o i s e ( vpos. xy s c a l e ) ) / 2. 0 ; Wartość wynikowa funkcji noise jest poddana przekształceniu przez funkcję wykładniczą. W ramach ekperymentowania uznano, że funkcja wykładnicza najlepiej nadaje się do przekształcania wartości wyjściowej. Ma ona te zalety, że jest ciągła, monotonicznie rosnąca w przedziale [0.0, 1.0], a wartości z odcinka [0.0, 1.0] poddane przekształceniu nigdy poza niego nie wychodzą. Dodatkowo efekty jakie powstają przez takie przekształcenie są w wielu przypadkach interesujące. Na stronie wartość pow factor jest nazywana threshold z powodu efektu jaki zdaje się ona mieć na generowany obraz. 1 f l o a t f a c t o r = pow( noise, pow factor ) ; Ostatnim elementem jest możliwość wybrania koloru dla wartości 0.0 oraz 1.0. Kolor, który jest wyświetlany jest interpolowany między wybranymi kolorami zgodnie z wartością powyższej zmiennej factor. 1 gl F r a g C o l o r = mix ( c o l o r 0, c o l o r 1, f a c t o r ) ; a noise abs Strona ta jest identyczna z 01 noise poza jednym przekształceniem. W 01 noise wartość funkcji noise jest przekształcona przez przesunięcie i przeskalowanie, tak żeby wartości były w przedziale [0.0, 1.0]. Natomiast w 01a noise abs użyto wartości bezwzględnej do przekształcenia wartości funkcji noise. 1 f l o a t n o i s e = abs ( c n o i s e ( vpos. xy s c a l e ) ) ; Ciekawe jest, że tak drobna zmiana ma znaczący wpływ na generowany obraz. Zamiast rozmytych, nieokreślonych kształtów wyraźnie widać linie oddzielające fragmenty. 14

16 fractalsum Kod fractalsum został oparty na kodzie (książka [1], s.85): 1 f l o a t 2 f r a c t a l s u m ( point Q) 3 { 4 f l o a t value = 0 ; 5 f o r ( f = MINFREQ; f < MAXFREQ; f = 2) 6 value += s n o i s e (Q f ) / f ; 7 return value ; 8 } który przedstawia ideę nakładania kolejnych wartości funkcji na siebie, jednak za każdym razem w innej skali i z innego punktu. Jest to ciekawe narzędzie, które można wykorzystywać w wielu różnych miejscach. Kod 02 fractalsum został oparty bezpośrednio na tym kodzie, a interesujący fragment wygląda następująco: 1 f l o a t f r a c t a l s u m ( vec2 point ) 2 { 3 f l o a t value = 0. 0 ; 4 f l o a t f r e q = 1. 0 ; 5 6 value += c n o i s e ( point ) ; // c n o i s e ( point 1. 0 ) / 1. 0 ; 7 value += c n o i s e ( point 2. 0 ) / 2. 0 ; 8 value += c n o i s e ( point 4. 0 ) / 4. 0 ; 9 value += c n o i s e ( point 8. 0 ) / 8. 0 ; return clamp ( value, 1.0, 1. 0 ) ; 12 } void main ( void ) 15 { 16 vec4 c o l o r 0 = vec4 ( c o l o r a t 0, 1. 0 ) ; 17 vec4 c o l o r 1 = vec4 ( c o l o r a t 1, 1. 0 ) ; f l o a t value = ( f r a c t a l s u m ( vpos. xy s c a l e ) ) / 2. 0 ; 20 f l o a t f a c t o r = pow( value, pow factor ) ; 21 g l F r a g C o l o r = mix ( c o l o r 0, c o l o r 1, f a c t o r ) ; 22 } Pętla w funkcji fractalsum została ręcznie rozwinięta, z powodu ograniczeń narzuconych na pętle w GLSL ES 1.0. Szczegóły ograniczeń są w 15

17 [GLES20GLSL] Appendix A, sekcja 4 Control Flow. Dodatkowo użyto funkcji clamp na obliczonej wartości, żeby funkcja fractalsum zwracała wartość z przedziału [ 1.0, 1.0], w celu wygodniejszego jej użycia. Funkcja main pobiera wartość fractalsum dla aktualnego punktu i przeskalowuje ją do przedziału [0.0, 1.0]. Na podstawie tej wartości obliczany kolor, którego wartość jest między wybranymi przez użytkownika kolorami a factalsum levels Pomysł ten został oparty na książce [1, s.88], która w podobny sposób uzyskuje efekt zwany marble (marmur). Pomysł polega na podzieleniu odcinka [0.0, 1.0] na przedziały. Każda granica między przedziałami ma nadany kolor. Wartość wynikowego koloru jest mieszaniną dwóch sąsiadujących ze sobą kolorów z wybranego punktu. Pozycję punktu na rzeczonym odcinku [0.0, 1.0] uzyskuje się używając wartości zwróconej przez fractalsum. Funkcja marble color zwraca kolor w zależności od parametru, który przyjmuje się że jest w znormalizowanym zakresie [0.0, 1.0]. Dzieli ona ten zakres na cztery części, których granice są w punktach: Kolory dla tych punktów to odpowiednio: Color 0 Color 1 Color 2 Color 3 Implementacja wygląda następująco: 1 vec3 m a r b l e c o l o r ( f l o a t f a c t o r ) 2 { 3 i f ( f a c t o r < 0. 4 ) 4 { 5 r eturn mix ( c o l o r 0, c o l o r 1, f a c t o r / 0. 4 ) ; 6 } 7 e l s e i f ( f a c t o r < 0. 8 ) 8 { 16

18 9 return mix ( c o l o r 1, c o l o r 2, ( f a c t o r 0. 4 ) / 0. 4 ) ; 10 } 11 e l s e 12 { 13 r eturn mix ( c o l o r 2, c o l o r 3, ( f a c t o r 0. 8 ) / 0. 2 ) ; 14 } } void main ( void ) 19 { 20 f l o a t value = clamp ( 21 f r a c t a l s u m ( vec2 ( vpos. x s c a l e x, vpos. y s c a l e y ). xy s c a l e ), , 1. 0 ) ; 23 value = ( value ) / 2. 0 ; 24 f l o a t f a c t o r = pow( value, pow factor ) ; 25 g l F r a g C o l o r = vec4 ( m a r b l e c o l o r ( f a c t o r ), 1. 0 ) ; 26 } b fractalsum levels jump Efekt ten to modyfikacja 02a fractalsum levels polegająca na ostrej zmianie jednego koloru w drugi, bez żadnej interpolacji między nimi. Powoduje to powstanie ciekawych granic między obszarami. Przy odpowiednim doborze kolorów i przeskalowań można uzyskać efekt przypominający korę drzewa. Z drugiej strony uzyskuje się bardzo ciekawy efekt przejścia przypominający wypalanie się papieru, jeśli dwa środkowe kolory zostaną ustawione na czerwony i żółty, natomiast dwa skrajne na zupełnie inne kolory. Przy płynnej zmianie parametru threshold wyraźnie widać efekt przejścia między skrajnymi kolorami. 1 vec3 m a r b l e c o l o r ( f l o a t f a c t o r ) 2 { 3 i f ( f a c t o r < 0. 5 ) 4 { 5 r eturn mix ( c o l o r 0, c o l o r 1, f a c t o r 2. 0 ) ; 6 } 7 e l s e 8 { 17

19 9 return mix ( c o l o r 2, c o l o r 3, ( f a c t o r 0. 5 ) 2. 0 ) ; 10 } } void main ( void ) 15 { 16 f l o a t value = clamp ( 17 f r a c t a l s u m ( vec2 ( vpos. x s c a l e x, vpos. y s c a l e y ). xy s c a l e ), , 1. 0 ) ; 19 value = ( value ) / 2. 0 ; 20 f l o a t f a c t o r = pow( value, pow factor ) ; 21 g l F r a g C o l o r = vec4 ( m a r b l e c o l o r ( f a c t o r ), 1. 0 ) ; 22 } c fractalsum 9 levels 2 colors Kod tej strony rozwija pomysł poprzedniej, żeby tworzyć ostre przejście między kolorami. Tym razem jednak ilość kolorów została zredukowana tylko do dwóch, jednak ilość poziomów na jakie jest dzielony odcinek [0.0, 1.0] został zwiększony do 9. W ramach każdego pododcinka następuje interpolacja między kolorami, jednak początek następnego pododcinka zaczyna się od razu od pierwszego koloru bez łagodnego przejścia. Powoduje to powstanie poziomów, niczym na mapie terenu, bądź na korze niektórych drzew. 1 vec3 m a r b l e c o l o r ( f l o a t f a c t o r ) 2 { 3 i f ( f a c t o r < ) 4 { 5 return mix ( c o l o r 0, c o l o r 1, f a c t o r / ) ; 6 } 7 e l s e i f ( f a c t o r < ) 8 { 9 return mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.11 ) ; 10 } 11 e l s e i f ( f a c t o r < ) 12 { 13 r eturn mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.11 ) ; 14 } 18

20 15 e l s e i f ( f a c t o r < ) 16 { 17 r eturn mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.11 ) ; 18 } 19 e l s e i f ( f a c t o r < ) 20 { 21 r eturn mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.11 ) ; 22 } 23 e l s e i f ( f a c t o r < ) 24 { 25 r eturn mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.11 ) ; 26 } 27 e l s e i f ( f a c t o r < ) 28 { 29 r eturn mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.11 ) ; 30 } 31 e l s e i f ( f a c t o r < ) 32 { 33 r eturn mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.11 ) ; 34 } 35 e l s e 36 { 37 r eturn mix ( c o l o r 0, c o l o r 1, ( f a c t o r ) / 0.12 ) ; 38 } } Funkcja main jest identyczna jak w przypadku 02a fractalsum levels turbulence Kod turbulence został oparty na kodzie (książka [1], s.86): 1 f l o a t 2 t u r b u l e n c e ( point Q) 3 { 4 f l o a t value = 0 ; 5 f o r ( f = MINFREQ; f < MAXFREQ; f = 2) 6 value += abs ( s n o i s e (Q f ) ) / f ; 19

21 7 return value ; 8 } który do złudzenia przypomina kod fractalsum. Jedyną różnicą jest użycie funkcji abs() na wartości funkcji snoise(). Przez ten zabieg wartości są znacznie przesunięte w stronę zera, co też wyraźnie widać jeśli porówna się obrazy generowane przez turbulence i fractalsum. Turbulence ma znacznie mniejszą różnorodność w odcieniach barw jakie widać. Kod zaimplementowanej funkcji wygląda następująco: 1 f l o a t t u r b u l e n c e ( vec2 point ) 2 { 3 f l o a t value = 0. 0 ; 4 f l o a t f r e q = 1. 0 ; 5 6 value += abs ( c n o i s e ( point ) ) ; // c n o i s e ( point 1. 0 ) / 1. 0 ; 7 value += abs ( c n o i s e ( point 2. 0 ) ) / 2. 0 ; 8 value += abs ( c n o i s e ( point 4. 0 ) ) / 4. 0 ; 9 value += abs ( c n o i s e ( point 8. 0 ) ) / 8. 0 ; return clamp ( value, 1.0, 1. 0 ) ; 12 } void main ( void ) 15 { 16 vec4 c o l o r 0 = vec4 ( c o l o r a t 0, 1. 0 ) ; 17 vec4 c o l o r 1 = vec4 ( c o l o r a t 1, 1. 0 ) ; f l o a t value = ( t u r b u l e n c e ( vpos. xy s c a l e ) ) / 2. 0 ; 20 f l o a t f a c t o r = pow( value, pow factor ) ; 21 g l F r a g C o l o r = mix ( c o l o r 0, c o l o r 1, f a c t o r ) ; 22 } Zgodnie z oczekiwaniami kod 02 fractalsum i 03 turbulence różnią się jedynie użyciem funkcji abs() na wartościach zwracanych przez cnoise lattice Lattice (ang. krata) to efekt sprawdzenia, co wyjdzie jeśli użyje się funkcji okresowej np. sinus na współrzędnych obrazu. Okazuje się, że jeśli do sinusa podana zostanie wartość x każdego fragmentu, to otrzyma się pasy jako obraz. Dodano więc sin(y) dla każdego fragmentu, a wartość w danym punkcie jest determinowana przez mniejszą wartość z tych dwóch funkcji. 20

22 1 void main ( void ) 2 { 3 vec4 c o l o r 0 = vec4 ( c o l o r a t 0, 1. 0 ) ; 4 vec4 c o l o r 1 = vec4 ( c o l o r a t 1, 1. 0 ) ; 5 6 f l o a t v a l u e x = ( s i n ( vpos. x s c a l e ) ) / 2. 0 ; 7 f l o a t v a l u e y = ( s i n ( vpos. y s c a l e ) ) / 2. 0 ; 8 f l o a t value = min ( value x, v alue y ) ; 9 g l F r a g C o l o r = mix ( c o l o r 0, c o l o r 1, pow( value, pow factor ) ) ; 10 } a lattice and noise Program sprawdza jaki wyjdzie obraz, jeśli połączy się lattice oraz noise. Dla pozycji x jest liczony sinus do którego jest dodawana wartość noise, a wynik jest przycinany do przedziału [ 1.0, 1.0] i przeskalowany do [0.0, 1.0]. Tak samo dla pozycji y. Wartością wynikową jest mniejsza z tych dwóch wartości. Najciekawszy efekt uzyskuje się przy dużych wartościach lattice scale. Obraz przypomina wtedy, jakby był drukowany. 1 void main ( void ) 2 { 3 vec4 c o l o r 0 = vec4 ( c o l o r a t 0, 1. 0 ) ; 4 vec4 c o l o r 1 = vec4 ( c o l o r a t 1, 1. 0 ) ; 5 6 f l o a t v a l u e x = 7 ( 8 clamp ( 1.0, 1. 0, s i n ( vpos. x 10.0 l a t t i c e s c a l e ) + noise2d ( vpos. xy s c a l e ) 3. 0 ) ) 11 / 2. 0 ; 12 f l o a t v a l u e y = 13 ( 14 clamp ( 1.0, 1. 0, s i n ( vpos. y 10.0 l a t t i c e s c a l e ) + noise2d ( vpos. xy s c a l e ) 3. 0 ) ) 17 / 2. 0 ; 18 21

23 19 f l o a t value = min ( value x, v alue y ) ; 20 g l F r a g C o l o r = mix ( c o l o r 0, c o l o r 1, pow( value, pow factor ) ) ; 21 } b sin and noise To ciekawe połączenie używa wartości funkcji noise jako parametru dla funkcji sinus, co w efekcie daje mocno zniekształcone okręgi. Przeskalowanie parametru dla sinusa powoduje zagęszczenie pojawiających się okręgów, natomiast threshold kontroluje ich grubość. 1 void main ( void ) 2 { 3 vec4 c o l o r 0 = vec4 ( c o l o r a t 0, 1. 0 ) ; 4 vec4 c o l o r 1 = vec4 ( c o l o r a t 1, 1. 0 ) ; 5 6 f l o a t value = ( s i n ( noise2d ( vpos. xy s c a l e ) s i n s c a l e ) ) / 2. 0 ; 7 f l o a t f a c t o r = pow( value, pow factor ) ; 8 g l F r a g C o l o r = mix ( c o l o r 0, c o l o r 1, f a c t o r ) ; 9 } 9 Ograniczenia technologii Wersja GLSL użyta w WebGL 1.0 nie pozwala na tworzenie pętli, której nie da się rozwinąć do postaci nieiteracyjnej w trakcie kompilacji shader a. Narzuca to ograniczenia w możliwych modyfikacjach i może stanowić przeszkodę do osiągania ciekawych efektów inaczej niedostępnych. W pracy zrezygnowano z tego powodu z implementacji komórek voronoi jako elementu bazowego do tworzenia kolejnych technik proceduralnych, ponieważ implementacja funkcji wyznaczającej odległość do drugiego najbliższego punktu przy dynamicznym generowaniu punktów jest mocno utrudniona. Klasyczny diagram voronoi jest możliwy do zaimplementowania w WebGL dzięki sztuczce z buforem głębokości [VORONOI]. WebGL 1.0 nie udostępnia rozszerzenia Transform Feedback, które pozwala na przechowywanie danych już przetworzonych przez shader. Pozwalało by to nie tylko na przeprowadzanie wcześniejszych obliczeń w celu optymalizacji, ale też używanie karty graficznej do obliczeń na bieżąco, co w przypadku bardziej skomplikowanych technik proceduralnych może mieć kluczowe znaczenie. 22

24 10 Podsumowanie Techniki proceduralne są bardzo ciekawym narzędziem w rękach wprawionego artysty. Przy stosunkowo małym nakładzie pracy możliwe jest tworzenie ciekawych efektów, których aplikacje ogranicza jedynie wyobraźnia osoby tworzącej. Techniki proceduralne pozwalają też w zupełnie innym świetle spojrzeć na powszechnie znane funkcje. Zamiast myśleć o sinusie jako o funkcji mającej coś wspólnego z kątami, możemy jej używać jako narzędzia do generowania pasów czy krat w teksturach proceduralnych. Funkcja wykładnicza natomiast okazuje się być bardzo dobrym przekształceniem tworzącym złudzenie parametru określającego wartość progową. Literatura [1] David S. Ebert, F. Kenton Musgrave, Darwyn Peachey and Ken Perlin, Texturing & modeling. A procedural approach. Third edition [2] Aaftab Munshi, Dan Ginsburg, Dave Shreiner, OpenglES 2.0 Programming Guide [3] Peter Shirley, Michael Ashikhmin and Steve Marschner, Fundamentals of Computer Graphics [HTML5] HTML5 A vocabulary and associated APIs for HTML and XHTML. W3C Candidate Recommendation 04 February [WEBGL10] WebGL 1.0 Specification Version March [WEBGL100] WebGL 1.0 Specification Version February [GLES20] OpenGL R ES Common Profile Specification Version , A. Munshi, J. Leech, November full spec pdf [GLES20GLSL] The OpenGL R ES Shading Language Version 1.00, R. Simpson, May ES Specification pdf [TYPEDARRAY] Typed Array Specification Version 1.0, 08 February [NOISE] 23

25 [VORONOI] [MATRIX] 24

Proceduralne podejście do generowania tekstur

Proceduralne podejście do generowania tekstur Proceduralne podejście do generowania tekstur Paweł Sabat Praca zamieszczona na http://noni.hswro.org Wersja z obrazkami na końcu Praca inżynierska Promotor: dr Przemysław Kobylański Wydział Podstawowych

Bardziej szczegółowo

Programowanie gier 3D w HTML5. Andrzej P.Urbański Politechnika Poznańska

Programowanie gier 3D w HTML5. Andrzej P.Urbański Politechnika Poznańska Programowanie gier 3D w HTML5 Andrzej P.Urbański Politechnika Poznańska Moje marzenie Od dawna jest znany pakiet Open GL napisany w C++ i bardzo ułatwiający tworzenie gier 3D Zaproponowałem kiedyś jako

Bardziej szczegółowo

Rys.2.1. Drzewo modelu DOM [1]

Rys.2.1. Drzewo modelu DOM [1] 1. CEL ĆWICZENIA Celem ćwiczenia jest przedstawienie możliwości wykorzystania języka JavaScript do tworzenia interaktywnych aplikacji działających po stronie klienta. 2. MATERIAŁ NAUCZANIA 2.1. DOM model

Bardziej szczegółowo

WIZUALIZACJA INFORMACJI TEKSTOWEJ WSTĘP DO HTML 5 CANVAS

WIZUALIZACJA INFORMACJI TEKSTOWEJ WSTĘP DO HTML 5 CANVAS WIZUALIZACJA INFORMACJI TEKSTOWEJ WSTĘP DO HTML 5 CANVAS Autor prezentacji: Michał Kołkowski Promotor: prof dr. hb. Włodzisław Duch SPIS TREŚCI 1. Ogólnie o Canvasie 2. Utworzenie szablonu do pracy z Canvas

Bardziej szczegółowo

1 Temat: Vertex Shader

1 Temat: Vertex Shader Instrukcja Architektura procesorów graficznych 1 Temat: Vertex Shader Przygotował: mgr inż. Tomasz Michno 1 Wstęp 1.1 Czym jest shader Shader jest programem (zazwyczaj krótkim), wykonywanym przez kartę

Bardziej szczegółowo

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie... 2. II. Tworzenie nowej karty pracy... 3. a. Obiekty... 4. b. Nauka pisania...

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie... 2. II. Tworzenie nowej karty pracy... 3. a. Obiekty... 4. b. Nauka pisania... INSTRUKCJA UŻYTKOWNIKA Spis treści I. Wprowadzenie... 2 II. Tworzenie nowej karty pracy... 3 a. Obiekty... 4 b. Nauka pisania... 5 c. Piktogramy komunikacyjne... 5 d. Warstwy... 5 e. Zapis... 6 III. Galeria...

Bardziej szczegółowo

która metoda jest najlepsza

która metoda jest najlepsza która metoda jest najlepsza dr inż. Marek Żabka Instytut Matematyki Wydział Matematyki Stosowanej Politechnika Śląska 20 września 2012r Nowa metoda tworzenia grafiki na stronie internetowej: element,,canvas

Bardziej szczegółowo

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu Instrukcja obsługi Aplikacja wizualizuje obszar projektu tj. Dorzecze Środkowej Odry będące w administracji Regionalnego Zarządu

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT Temat: Zaimplementować system kryptografii wizualnej http://www.cacr.math.uwaterloo.ca/~dstinson/visual.html Autor: Tomasz Mitręga NSMW Grupa 1 Sekcja 2 1. Temat projektu

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Gry Komputerowe Laboratorium 4. Teksturowanie Kolizje obiektów z otoczeniem. mgr inż. Michał Chwesiuk 1/29. Szczecin, r

Gry Komputerowe Laboratorium 4. Teksturowanie Kolizje obiektów z otoczeniem. mgr inż. Michał Chwesiuk 1/29. Szczecin, r Gry Komputerowe Laboratorium 4 Teksturowanie Kolizje obiektów z otoczeniem mgr inż. Michał Chwesiuk 1/29 Klasa Stwórzmy najpierw klasę TextureManager, która będzie obsługiwała tekstury w projekcie. 2/29

Bardziej szczegółowo

Programowanie Procesorów Graficznych

Programowanie Procesorów Graficznych Programowanie Procesorów Graficznych Wykład 1 9.10.2012 Prehistoria Zadaniem karty graficznej było sterowanie sygnałem do monitora tak aby wyświetlić obraz zgodnie z zawartościa pamięci. Programiści pracowali

Bardziej szczegółowo

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych rk Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych pojęć, prawdopodobnie zastanawiasz się, kiedy zaczniesz

Bardziej szczegółowo

1. Prymitywy graficzne

1. Prymitywy graficzne 1. Prymitywy graficzne Prymitywy graficzne są elementarnymi obiektami jakie potrafi bezpośrednio rysować, określony system graficzny (DirectX, OpenGL itp.) są to: punkty, listy linii, serie linii, listy

Bardziej szczegółowo

JAVAScript w dokumentach HTML (1)

JAVAScript w dokumentach HTML (1) JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript mogą być zagnieżdżane w dokumentach HTML. Instrukcje JavaScript

Bardziej szczegółowo

Dodawanie grafiki i obiektów

Dodawanie grafiki i obiektów Dodawanie grafiki i obiektów Word nie jest edytorem obiektów graficznych, ale oferuje kilka opcji, dzięki którym można dokonywać niewielkich zmian w rysunku. W Wordzie możesz zmieniać rozmiar obiektu graficznego,

Bardziej szczegółowo

Modele danych walidacja widoki zorientowane na model

Modele danych walidacja widoki zorientowane na model Modele danych walidacja widoki zorientowane na model 1. Wprowadzenie Modele danych Modele danych w ASP.NET MVC to klasy znajdujące się w katalogu Models. Ich zadaniem jest mapowanie danych przesyłanych

Bardziej szczegółowo

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import Fraction.h #import <stdio.h> #import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:

Bardziej szczegółowo

Expo Composer. www.doittechnology.pl 1. Garncarska 5 70-377 Szczecin tel.: +48 91 404 09 24 e-mail: info@doittechnology.pl. Dokumentacja użytkownika

Expo Composer. www.doittechnology.pl 1. Garncarska 5 70-377 Szczecin tel.: +48 91 404 09 24 e-mail: info@doittechnology.pl. Dokumentacja użytkownika Expo Composer Dokumentacja użytkownika Wersja 1.0 www.doittechnology.pl 1 SPIS TREŚCI 1. O PROGRAMIE... 3 Wstęp... 3 Wymagania systemowe... 3 Licencjonowanie... 3 2. PIERWSZE KROKI Z Expo Composer... 4

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

E-geoportal Podręcznik użytkownika.

E-geoportal Podręcznik użytkownika. PROCAD SA E-geoportal Podręcznik użytkownika. gis@procad.pl 2 Spis treści 1. Wstęp.... 3 2. Ikony narzędziowe.... 4 2.1. Ikony narzędziowe przesuwanie obszaru mapy.... 5 2.2. Ikony narzędziowe informacja

Bardziej szczegółowo

Ćwiczenie 6. Transformacje skali szarości obrazów

Ćwiczenie 6. Transformacje skali szarości obrazów Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L Ćwiczenie 6. Transformacje skali szarości obrazów 1. Obraz cyfrowy Obraz w postaci cyfrowej

Bardziej szczegółowo

Instrukcja obsługi systemu zarządzania treścią dwajeden.pl

Instrukcja obsługi systemu zarządzania treścią dwajeden.pl Instrukcja obsługi systemu zarządzania treścią dwajeden.pl Tworzenie i edycja danych na stronie www 1. Rozpoczęcie pracy. Logowanie się do systemu zarządzania treścią dwajeden.pl ropocząć należy od podania

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23 OpenGL : mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski 1/23 Folder z plikami zewnętrznymi (resources) Po odpaleniu przykładowego projektu, nie uruchomi się on poprawnie. Powodem

Bardziej szczegółowo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ

REFERAT PRACY DYPLOMOWEJ REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i implementacja aplikacji internetowej do wyszukiwania promocji Autor: Sylwester Wiśniewski Promotor: dr Jadwiga Bakonyi Kategorie: aplikacja webowa Słowa

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 07 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami tworzenia aplikacji okienkowych w C#. Wprowadzenie teoretyczne. Rozważana w

Bardziej szczegółowo

Pierwsze kroki z easy Soft CoDeSys. 2009 Eaton Corporation. All rights reserved.

Pierwsze kroki z easy Soft CoDeSys. 2009 Eaton Corporation. All rights reserved. Pierwsze kroki z easy Soft CoDeSys Tworzenie prostego programu Rozpoczęcie pracy 2 Tworzenie prostego programu Wybór aparatu 3 Tworzenie prostego programu Wybór języka programowania Do wyboru jest sześć

Bardziej szczegółowo

Tworzenie szablonów użytkownika

Tworzenie szablonów użytkownika Poradnik Inżyniera Nr 40 Aktualizacja: 12/2018 Tworzenie szablonów użytkownika Program: Plik powiązany: Stratygrafia 3D - karty otworów Demo_manual_40.gsg Głównym celem niniejszego Przewodnika Inżyniera

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom: 1. QT creator, pierwsze kroki. Qt Creator wieloplatformowe środowisko programistyczne dla języków C++, JavaScript oraz QML, będące częścią SDK dla biblioteki Qt. Zawiera w sobie graficzny interfejs dla

Bardziej szczegółowo

Przewodnik użytkownika (instrukcja) AutoMagicTest

Przewodnik użytkownika (instrukcja) AutoMagicTest Przewodnik użytkownika (instrukcja) AutoMagicTest 0.1.21.137 1. Wprowadzenie Aplikacja AutoMagicTest to aplikacja wspierająca testerów w testowaniu i kontrolowaniu jakości stron poprzez ich analizę. Aplikacja

Bardziej szczegółowo

POMOC / INSTRUKCJA OBSŁUGI

POMOC / INSTRUKCJA OBSŁUGI POMOC / INSTRUKCJA OBSŁUGI 1. Powiększanie mapy 2. Plakat 3. Schemat lekcji 4. Broszura informacyjna 5. Instrukcja obsługi Pasek narzędzi i menu wyboru Zmiana skali mapy Mini mapa - podgląd na położenie

Bardziej szczegółowo

Portal zarządzania Version 7.5

Portal zarządzania Version 7.5 Portal zarządzania Version 7.5 PODRĘCZNIK ADMINISTRATORA Wersja: 29.8.2017 Spis treści 1 Informacje na temat niniejszego dokumentu...3 2 Informacje o portalu zarządzania...3 2.1 Konta i jednostki... 3

Bardziej szczegółowo

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Wykład 11 Grafika 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Grafika GDI+ GDI+ - Graphics Device Interface jeden z trzech podstawowych komponentów

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Systemy wirtualnej rzeczywistości Laboratorium Komponenty i serwisy Wstęp: W trzeciej części przedstawione zostaną podstawowe techniki

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 08 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami powiązania modelu obiektowego z modelem okienkowym w C#. Wprowadzenie teoretyczne.

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 2. Przygotowanie środowiska pracy

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

Przewodnik po soczewkach

Przewodnik po soczewkach Przewodnik po soczewkach 1. Wchodzimy w program Corel Draw 11 następnie klikamy Plik /Nowy => Nowy Rysunek. Następnie wchodzi w Okno/Okno dokowane /Teczka podręczna/ Przeglądaj/i wybieramy plik w którym

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

INSTRUKCJA OBSŁUGI ⓫ Dodatki

INSTRUKCJA OBSŁUGI ⓫ Dodatki INSTRUKCJA OBSŁUGI ⓫ Dodatki 2 CONTENTS I. ZAKTUALIZOWANY INTERFEJS PROGRAMU SCADA Pro II. OPIS NOWEGO INTERFEJSU 1. Dodatki 1.1 Język 1.2 Parametr 1.3 Zestawienie materiałów 1.4 Wydruk obliczeń 1.5 Widok

Bardziej szczegółowo

Tworzenie Stron Internetowych. odcinek 9

Tworzenie Stron Internetowych. odcinek 9 Tworzenie Stron Internetowych odcinek 9 Prosta galeria oparta na HTML Najprostszym sposobem zbudowania galerii zdjęć jest wykorzystanie tylko HTML i CSS. Strona główna galerii składa się miniatur zdjęć,

Bardziej szczegółowo

Zacznij Tu! Poznaj Microsoft 2012. Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

Zacznij Tu! Poznaj Microsoft 2012. Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska Zacznij Tu! Poznaj Microsoft 2012 Visual Basic Michael Halvorson Przekład: Joanna Zatorska APN Promise, Warszawa 2013 Spis treści Wstęp...................................................................vii

Bardziej szczegółowo

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller Dokumentacja systemu NTP rekrut Autor: Sławomir Miller 1 Spis treści: 1. Wstęp 1.1 Wprowadzenie 1.2 Zakres dokumentu 2. Instalacja 2.1 Wymagania systemowe 2.2 Początek 2.3 Prawa dostępu 2.4 Etapy instalacji

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Microsoft Small Basic

Microsoft Small Basic Microsoft Small Basic Okno grafiki Szacowany czas trwania lekcji: 1 godzina Okno grafiki Podczas tej lekcji uzyskasz informacje na temat: Instrukcji używających obiektu GraphicsWindow. Właściwości obiektu

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego Zad. 4: Rotacje 2D 1 Cel ćwiczenia Wykształcenie umiejętności modelowania kluczowych dla danego problemu pojęć. Definiowanie właściwego interfejsu klasy. Zwrócenie uwagi na dobór odpowiednich struktur

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER Karta przedmiotu Podstawy programowania procesorów graficznych realizowanego w ramach projektu PO WER 2017-2019 Wydział Inżynierii Elektrycznej i Komputerowej Kierunek studiów: Informatyka Profil: Ogólnoakademicki

Bardziej szczegółowo

Jak posługiwać się edytorem treści

Jak posługiwać się edytorem treści Jak posługiwać się edytorem treści Edytor CKE jest bardzo prostym narzędziem pomagającym osobom niezaznajomionym z językiem HTML w tworzeniu interaktywnych treści stron internetowych. Razem z praktyka

Bardziej szczegółowo

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

Pętle. Dodał Administrator niedziela, 14 marzec :27

Pętle. Dodał Administrator niedziela, 14 marzec :27 Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać

Bardziej szczegółowo

Animacje z zastosowaniem suwaka i przycisku

Animacje z zastosowaniem suwaka i przycisku Animacje z zastosowaniem suwaka i przycisku Animacja Pole równoległoboku Naukę tworzenia animacji uruchamianych na przycisk zaczynamy od przygotowania stosunkowo prostej animacji, za pomocą, której można

Bardziej szczegółowo

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS)

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS) Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS) Temat: Platforma Systemowa Wonderware cz. 2 przemysłowa baza danych,

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do 0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do obserwatora f) w kierunku od obserwatora 1. Obrót dookoła osi

Bardziej szczegółowo

Serwery aplikacji. dr Radosław Matusik. radmat

Serwery aplikacji. dr Radosław Matusik.   radmat www.math.uni.lodz.pl/ radmat EL - Expression Language Załóżmy, że mamy klasę Pracownik, której atrybutem jest PESEL. Załóżmy dalej, że w atrybucie sesji zalogowany przechowujemy obiekt aktualnie zalogowanego

Bardziej szczegółowo

Programowanie Obiektowe GUI

Programowanie Obiektowe GUI Programowanie Obiektowe GUI Swing Celem ćwiczenia jest ilustracja wizualnego tworzenia graficznego interfejsu użytkownika opartego o bibliotekę Swing w środowisku NetBeans. Ponadto, ćwiczenie ma na celu

Bardziej szczegółowo

PRZEWODNIK PO ETRADER ROZDZIAŁ XII. ALERTY SPIS TREŚCI

PRZEWODNIK PO ETRADER ROZDZIAŁ XII. ALERTY SPIS TREŚCI PRZEWODNIK PO ETRADER ROZDZIAŁ XII. ALERTY SPIS TREŚCI 1. OPIS OKNA 3 2. OTWIERANIE OKNA 3 3. ZAWARTOŚĆ OKNA 4 3.1. WIDOK AKTYWNE ALERTY 4 3.2. WIDOK HISTORIA NOWO WYGENEROWANYCH ALERTÓW 4 3.3. DEFINIOWANIE

Bardziej szczegółowo

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem. WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM NetBeans Wykonał: Jacek Ventzke informatyka sem. VI 1. Uruchamiamy program NetBeans (tu wersja 6.8 ) 2. Tworzymy

Bardziej szczegółowo

Zastosowania Robotów Mobilnych

Zastosowania Robotów Mobilnych Zastosowania Robotów Mobilnych Temat: Zapoznanie ze środowiskiem Microsoft Robotics Developer Studio na przykładzie prostych problemów nawigacji. 1) Wstęp: Microsoft Robotics Developer Studio jest popularnym

Bardziej szczegółowo

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania 1) Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z podstawowymi elementami obiektowymi systemu Windows wykorzystując Visual Studio 2008 takimi jak: przyciski, pola tekstowe, okna pobierania danych

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie:

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie: Repozytorium służy do przechowywania plików powstających przy pracy nad projektami we w miarę usystematyzowany sposób. Sam mechanizm repozytorium jest zbliżony do działania systemu plików, czyli składa

Bardziej szczegółowo

Laboratorium 7 Blog: dodawanie i edycja wpisów

Laboratorium 7 Blog: dodawanie i edycja wpisów Laboratorium 7 Blog: dodawanie i edycja wpisów Dodawanie nowych wpisów Tworzenie formularza Za obsługę formularzy odpowiada klasa Zend_Form. Dla każdego formularza w projekcie tworzymy klasę dziedziczącą

Bardziej szczegółowo

Podstawy JavaScript ćwiczenia

Podstawy JavaScript ćwiczenia Podstawy JavaScript ćwiczenia Kontekst:

Bardziej szczegółowo

PHP: bloki kodu, tablice, obiekty i formularze

PHP: bloki kodu, tablice, obiekty i formularze 1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują

Bardziej szczegółowo

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy - Narzędzie Windows Forms - Przykładowe aplikacje 1 Narzędzia Windows Form Windows Form jest narzędziem do tworzenia aplikacji dla

Bardziej szczegółowo

Podstawy technologii WWW

Podstawy technologii WWW Podstawy technologii WWW Ćwiczenie 8 PHP, czyli poczatki nowej, dynamicznej znajomosci Na dzisiejszych zajęciach rozpoczniemy programowanie po stronie serwera w języku PHP. Po otrzymaniu żądania serwer

Bardziej szczegółowo

Ulotka. Zmiany w wersji

Ulotka. Zmiany w wersji Ulotka Zmiany w wersji Data produkcji wersji: 14 listopada 2016 Spis treści 1 Instalacja systemu... 3 1.1 Współpraca z przeglądarkami... 3 1.2 Współpraca z urządzeniami mobilnymi... 3 2 Ogólne... 4 2.1

Bardziej szczegółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma

Bardziej szczegółowo

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery Łukasz Bartczuk Moduł 6 JavaScript w przeglądarce Agenda Skrypty na stronie internetowej Model DOM AJAX Skrypty na stronie

Bardziej szczegółowo

Instrukcja obsługi narzędzia API

Instrukcja obsługi narzędzia API Instrukcja obsługi narzędzia API 2012 1. Podstawowe informacje Aby umożliwić maksymalną integrację systemów i stron partnerów z naszym systemem, stworzyliśmy specjalne API, które umożliwia generowanie

Bardziej szczegółowo

Delphi podstawy programowania. Środowisko Delphi

Delphi podstawy programowania. Środowisko Delphi Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór

Bardziej szczegółowo

16) Wprowadzenie do raportowania Rave

16) Wprowadzenie do raportowania Rave 16) Wprowadzenie do raportowania Rave Tematyka rozdziału: Przegląd wszystkich komponentów Rave Tworzenie nowego raportu przy użyciu formatki w środowisku Delphi Aktywacja środowiska Report Authoring Visual

Bardziej szczegółowo

INSTRUKCJA obsługi certyfikatów

INSTRUKCJA obsługi certyfikatów INSTRUKCJA obsługi certyfikatów dla użytkownika bankowości internetowej Pocztowy24 z wybraną metodą autoryzacji Certyfikat Spis treści 1. Wstęp... 3 1.1 Wymagania techniczne... 3 2. Certyfikat jako jedna

Bardziej szczegółowo

Bartłomiej Filipek www.ii.uj.edu.pl/~filipek

Bartłomiej Filipek www.ii.uj.edu.pl/~filipek Bartłomiej Filipek www.ii.uj.edu.pl/~filipek Nasz Cel Prehistoria krótki wstęp Nowa era! Vertex Shaders Fragment Shaders Podstawy GLSL Obsługa GLSL z API OpenGL Dodajmy parę efektów! Podsumowanie Dodatkowe

Bardziej szczegółowo

9.1.2. Ustawienia personalne

9.1.2. Ustawienia personalne 9.1.2. Ustawienia personalne 9.1. Konfigurowanie systemu Windows Systemy z rodziny Windows umożliwiają tzw. personalizację ustawień interfejsu graficznego poprzez dostosowanie wyglądu pulpitu, menu Start

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

1. Dockbar, CMS + wyszukiwarka aplikacji Dodawanie portletów Widok zawartości stron... 3

1. Dockbar, CMS + wyszukiwarka aplikacji Dodawanie portletów Widok zawartości stron... 3 DODAJEMY TREŚĆ DO STRONY 1. Dockbar, CMS + wyszukiwarka aplikacji... 2 2. Dodawanie portletów... 3 Widok zawartości stron... 3 Omówienie zawartości portletu (usunięcie ramki itd.)... 4 3. Ikonki wybierz

Bardziej szczegółowo

Wprowadzenie do programowania aplikacji mobilnych

Wprowadzenie do programowania aplikacji mobilnych Wprowadzenie do programowania aplikacji mobilnych Katedra Inżynierii Wiedzy Plan zajęć 1 XAML; 2 podstawowe kontrolki; 3 obsługa zdarzenia; 4 budowa prostego interfejsu z poziomu XAML i z poziomu kodu;

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

Robert Barański, AGH, KMIW MathScript and Formula Nodes v1.0

Robert Barański, AGH, KMIW MathScript and Formula Nodes v1.0 MathScript i Formula Nodes (MathScript and Formula Nodes) Formula Node w oprogramowaniu LabVIEW jest wygodnym, tekstowym węzłem, który można użyć do wykonywania skomplikowanych operacji matematycznych

Bardziej szczegółowo

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

Bardziej szczegółowo

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe

Bardziej szczegółowo

Korzystanie z aplikacji P-touch Transfer Manager

Korzystanie z aplikacji P-touch Transfer Manager Korzystanie z aplikacji P-touch Transfer Manager Wersja 0 POL Wprowadzenie Ważna uwaga Treść niniejszego dokumentu i dane techniczne produktu mogą ulegać zmianom bez powiadomienia. Firma Brother zastrzega

Bardziej szczegółowo