Skocz do zawartości

micha_i

Użytkownicy
  • Postów

    92
  • Dołączył

  • Ostatnia wizyta

O micha_i

  • Urodziny 15.06.1996

O mnie

  • Skąd
    nie pytajcie się mnie.
  • Płeć
    Male
  • Adres www
  • Hobby
    komputer,GM,HTML,Java,fizyka,matematyka

Osiągnięcia micha_i

Smart Newbie

Smart Newbie (2/13)

0

Reputacja

  1. Witam, Dzisiaj zacząłem sobie pisać shader, który miał mi świecić naokoło kursora. Wszystko pięknie działało. Ale postanowiłem pójść o krok dalej i dodać cienie. Postanowiłem zrobić to lekko topornym ray-tracing'iem (Od pixela do źródła światła sprawdzasz, czy jest wolna droga). Po wielu próbach i przekleństwach, wreszcie zaczęło działać. Ale były 2 szkopuły: 1. Tło musiało mieć jednolity kolor z którym porównywałem. 2. Mój kod nie wydala nawet 30fps. Na razie zostawiłem problem nr 2 i zacząłem bawić się problemem 1. Okazało się, że po dodaniu samplera od tła, połowa ekranu(dolna) pozostaje czarna. Uznałem, że to coś z normalizacją sampla czy czymś tam. Ale po zmianie wielkości view'a znów pojawiły się problemy, gdyż światło nie podąża za kursorem. A fps'y dalej się nie podnoszą. Dlatego proszę was o pomoc, ponieważ nie mam pojęcia gdzie może być błąd. Vertex Shader: GML attribute vec3 in_Position; // (x,y,z) attribute vec4 in_Colour; // (r,g,b,a) attribute vec2 in_TextureCoord; // (u,v) varying vec2 v_vTexcoord; varying vec4 v_vColour; varying vec2 v_vPosition; void main() { vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; v_vPosition = (gm_Matrices[MATRIX_WORLD] * object_space_pos).xy; v_vColour = in_Colour; v_vTexcoord = in_TextureCoord; } Fragment Shader: GML varying vec2 v_vTexcoord; varying vec4 v_vColour; varying vec2 v_vPosition; uniform sampler2D worldTexture; uniform sampler2D backTexture; uniform float TextureSizeX; uniform float TextureSizeY; uniform float BackgroundSizeX; uniform float BackgroundSizeY; uniform float light_x; uniform float light_y; uniform float light_r; uniform float light_g; uniform float light_b; uniform float light_pow; vec4 addColor(vec4 colour,vec3 co){ co=normalize(co); colour=normalize(colour); return normalize(vec4(co-colour.rgb,colour.a)); } void main() { vec4 colour=v_vColour; vec2 coord=v_vTexcoord; vec2 Position=v_vPosition; vec2 Texture=vec2(TextureSizeX,TextureSizeY); vec2 Light=vec2(light_x,light_y); vec2 ray=Position-Light; colour=addColor(colour,vec3(light_r,light_g,light_b));//Tu jest dodawanie światła colour*=light_pow/distance(Position,Light);//A tu przyciemnianie wraz z dystansem for (float i=0.01;i<1.0;i+=0.02){//Tu jest pętla od promieni. Aktualnie jest 1/0.2=5 punktów sprawdzania vec2 pomoc=(ray*i)+Light; vec4 col=texture2D(worldTexture,vec2(pomoc/Texture)); vec4 col2=texture2D(backTexture,vec2(pomoc/Texture)); if (int(col.r*255.0)!=int(col2.r*255.0) || int(col.g*255.0)!=int(col2.g*255.0) || int(col.b*255.0)!=int(col2.b*255.0)){//Porównanie koloru pixela z kolorem tła. colour.rgb=vec3(0.0,0.0,0.0); break; } } gl_FragColor =colour*texture2D(gm_BaseTexture,coord); } Obiekt Controller: GML Information about object: Controller Create Event: execute code: global.viewsurface=surface_create(view_wview[0],view_hview[0]); view_surface_id[0]=global.viewsurface; Other Event: Game End: execute code: surface_free(global.viewsurface); Draw Event: execute code: draw_self(); draw_text(100,100,fps); Draw GUI Event: execute code: if (!surface_exists(global.viewsurface)){ global.viewsurface=surface_create(view_wview[0],view_hview[0]); view_surface_id[0]=global.viewsurface; } time1=shader_get_uniform(LightShader,"game_time1"); time2=shader_get_uniform(LightShader,"game_time2"); msx=shader_get_uniform(LightShader,"light_x"); msy=shader_get_uniform(LightShader,"light_y"); tex=shader_get_uniform(LightShader,"TextureSizeX"); tey=shader_get_uniform(LightShader,"TextureSizeY"); bex=shader_get_uniform(LightShader,"BackgroundSizeX"); bey=shader_get_uniform(LightShader,"BackgroundSizeY"); pow=shader_get_uniform(LightShader,"light_pow"); lr=shader_get_uniform(LightShader,"light_r"); lg=shader_get_uniform(LightShader,"light_g"); lb=shader_get_uniform(LightShader,"light_b"); gamma=shader_get_uniform(LightShader,"gamma"); world = shader_get_sampler_index(LightShader, "worldTexture"); back = shader_get_sampler_index(LightShader, "backTexture"); shader_set(LightShader); texture_set_stage(world, surface_get_texture(view_surface_id[0])); texture_set_stage(back, background_get_texture(background0)); shader_set_uniform_f(tex,view_wview[0]); shader_set_uniform_f(tey,view_hview[0]); shader_set_uniform_f(bex,view_wview[0]); shader_set_uniform_f(bey,view_hview[0]); shader_set_uniform_f(msx,mouse_x); shader_set_uniform_f(msy,mouse_y); shader_set_uniform_f(pow,100); shader_set_uniform_f(lr,55.0); shader_set_uniform_f(lg,55.0); shader_set_uniform_f(lb,55.0); draw_surface(global.viewsurface,view_xview[0],view_yview[0]); shader_reset(); Key Release Event for Key: end the game Btw. Room ma view0 1024x1024(rozmiary room'a), background0 jest cały biały.
  2. jeszcze jeden kucol! łii!

  3. Witam wszystkich po długiej przerwie. Chciałbym się zapytać, czy istnieje jakiś DLL, dzięki któremu mogę na przykład narysować obraz, ale wyostrzony? (W edytorze grafiki zakładka Image>>Sharpen , chodzi o to, że będę wczytywał obraz z pliku, i muszę mieć nad nim 100% kontroli) Z góry dziękuję.
  4. Witam. Mam taki oto problem: napisałem sobie podstawowy serwer i klient do gierki(na razie nic w niej nie ma). Klient działa normalnie,jak należy. Jednak z serwerem jest problem. Po włączeniu go, od razu jest zwieszony, ale klient może się do niego połączyć, wtedy klient też się zwiesza.(Przekazywanie lagów netem? Szczyt technologii...) Wrzucam paczkę z serwerem i klientem: Projekt Za nic nie mogę znaleźć miejsca, w którym zrobiłem błąd. Z góry dzięki za pomoc. Ps. Używałem artykułu: Art.
  5. Fakt, mój błąd. Dzięki za pomoc.
  6. Teraz to mi żadnego nie wypisuje: te kropki powinny być połączone w wielokąt. W tej niepołączonej na dole pisze mi, że zmienna pierwszy to jej własne Id. Projekcik: projekt
  7. Jest z tym mały problem. Chcę to wykorzystać do robienia "wielokątów", z tworzeniem linii między tym obiektem, a dwoma najbliższymi. Ale jeśli ustawie te obiekty w room'ie, to po starcie wyrzuca mi w jednym z nich błędy, i nie rysuje linii. Myślę, że jest to spowodowane tym, że 2 obiekty wyłączyły obiekty, które są obiektami pierwszym i drugim dla tego wybranego obiektu. E: chyba użyje tego z GMLscripts... E2: niet, ten sam błąd :(
  8. XD o tym nie pomyślałem. Dzieki wielkie.
  9. Witam. Potrzebuję kodu, który zwracałby mi Id DRUGIEGO obiektu danego typu w stosunku do obiektu, w którym go włączam. Coś jak instance_nearest , tylko że zwraca drugi obiekt z kolei. Z góry dziękuję.
  10. @Compi : Raczej nie, bo to ma być minecraft. Topic: Mam lekki generator,ale coś nie działa, gdy generuje mapę o szerokości 4k.
  11. Nie zaczynaj od klocków,bo skończysz jak dyzmek(z góry sry) np. ja od razu zacząłem od skryptów.
  12. micha_i

    Filmy

    Kingsajz Constantine Pamięć Absolutna Leon Zawodowiec(ostatnia scenka :rolleyes: ) Edward Nożycoręki Jestem Bogiem Jestem Legendą(również ostatnia scenka :rolleyes: )
  13. 1:Edytor graficzny game maker'a działa w systemie klatek. 2:Poucz się czegoś takiego jak kolizje 3:Kolizje! Człowieku,zanim będziesz chciał robić gry, pościągaj se kilka przykładów,wkuj dokumentację na pamięć, a nie będziesz się wszystkiego pytał. E:lub pisz skrypt z użyciem jakiejś funkcji,której nie znasz,i sprawdź, co ci wyrzuci ^_^ (ja sie tak uczyłem)
×
×
  • Dodaj nową pozycję...