Вторник, 15 Июля 2025, 10:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Ферма - техническое название
demosceneДата: Пятница, 11 Июля 2025, 15:05 | Сообщение # 21
частый гость
Сейчас нет на сайте
Цитата
где найти простой и удобный видеообменник?

https://iimg.su/ берёт гифки.
Код
ffmpeg -loop 0 -i video.mp4 -lavfi "palettegen=reserve_transparent=1[pal],[0:v][pal]paletteuse=dither=bayer" video.gif
vvs81Дата: Пятница, 11 Июля 2025, 15:33 | Сообщение # 22
был не раз
Сейчас нет на сайте
Это не то, обменник картинок, гиф это не видео файл ;)
demosceneДата: Пятница, 11 Июля 2025, 16:25 | Сообщение # 23
частый гость
Сейчас нет на сайте
vvs81, тогда лей сюда cloud.mail.ru они даже дают посмотреть из браузера, если не ошибаюсь.
vvs81Дата: Пятница, 11 Июля 2025, 17:04 | Сообщение # 24
был не раз
Сейчас нет на сайте
Видос тест. Ну вроде работает, думал что есть такие которые делают превьюшку, да хрен с ним, и так сойдёт. Спасибо.

Сообщение отредактировал vvs81 - Пятница, 11 Июля 2025, 19:53
demosceneДата: Пятница, 11 Июля 2025, 17:42 | Сообщение # 25
частый гость
Сейчас нет на сайте
Заценил видос. Нармуль анимация. А я вот этим занимался.



Я это сделал автоматом.
Шаг 1.
Код
import os,sys,cv2 as cv,numpy as np
from PIL import Image
p=sys.argv[1]
a=set()
for fn in os.listdir(p):
im=np.uint8(Image.open(p+'/'+fn).convert('RGBA'))
im=im.reshape(-1,4)
im=im[:,2::-1][im[:,3]>254]
im>>=2
a.update(set([tuple(np.uint16(c)) for c in im.reshape(-1,3)]))
a=list(a)
a.sort()
a=np.uint8(a)
a.tofile(p+'.spc')

Шаг 2.
Код
#include <stdio.h>
unsigned char buf[0x6000000];
unsigned char field[0x1000000];
int main(int argc,char**argv){
FILE*f;
unsigned char*a;
unsigned char*b;
unsigned char*c;
int i;
int j;
int k;
int t;
int cnt;
int cnt_sav;
int pass=0;
int done=0;
if(argc!=2)return 1;
f=fopen(argv[1],"rb");
if(!f)return 2;
cnt=fread(buf,3,0x1000000,f);
fclose(f);
if(cnt<0)return 3;
a=buf;
for(i=0;i<cnt;++i){
field[a[0]|(a[1]<<8)|(a[2]<<16)]=1;
a+=3;
}
i=0;
k=0;
a=buf;
c=buf+(cnt*3);
while(!done){
done=1;
cnt_sav=cnt;
for(;i<cnt_sav;++i){
if(!(i&4095))printf("%d %d\n",pass,i);
b=buf+(k*3);
for(j=k;j<i;++j){
c[0]=(a[0]+b[0])>>1;
c[1]=(a[1]+b[1])>>1;
c[2]=(a[2]+b[2])>>1;
t=c[0]|(c[1]<<8)|(c[2]<<16);
if(!field[t]){
field[t]=1;
++cnt;
c+=3;
done=0;
}
b+=3;
}
a+=3;
}
k=i;
++pass;
}
f=fopen(argv[1],"wb");
if(!f)return 4;
fwrite(buf,3,cnt,f);
fclose(f);
return 0;
}

Шаг 3.
Код
import os,sys,cv2 as cv,numpy as np,random
from PIL import Image
def load_sprites(d,norm=0):
a=[]
for fn in os.listdir(d):
  im=np.uint8(Image.open(d+'/'+fn).convert('RGBA'))
  col=im[:,:,2::-1]
  if norm:
   col=col-col.min((0,1))
   col=np.uint8(col*(255.9/col.max((0,1))))
  im=np.dstack([col,im[:,:,3]])
  a.append(im)
return a
def load_space(fn):
ret=np.fromfile(fn,dtype=np.uint8).reshape(-1,3)
ret<<=2
ret|=ret>>6
return ret
asis=load_sprites('as_is')
wood=load_sprites('wood',1)
woodtex=load_space('wood_tex.spc')
surface=np.zeros_like(asis[0][:,:,:3])
def project(im,trans=None):
global surface
mask=im[:,:,3]>254
data=im[:,:,:3][mask]
if trans is not None:
  trans=np.int32(trans[:2])
  v0=np.square(trans[0]).sum()
  v1=np.square(trans[1]).sum()
  if v0>v1:
   trans=trans[::-1]
  rng=np.float32(trans[1]-trans[0])*(1./255)
  data=np.uint8(data*rng)
  data+=np.uint8(trans[0])
surface[mask]=data
for im in asis:
project(im)
for im in wood:
c0=random.choice(woodtex)
c1=random.choice(woodtex)
while c0[0]>c1[0] or c0[1]>c1[1] or c0[2]>c1[2]:
  c0=random.choice(woodtex)
  c1=random.choice(woodtex)
project(im,(c0,c1))
cv.imwrite('out.png',surface)

Тут всё.
https://cloud.mail.ru/public/bUsB/o2rpZ3kTr


Сообщение отредактировал demoscene - Пятница, 11 Июля 2025, 18:09
vvs81Дата: Пятница, 11 Июля 2025, 18:09 | Сообщение # 26
был не раз
Сейчас нет на сайте
Заменой цветов

Добавлено (11 Июля 2025, 18:11)
---------------------------------------------
очень интересная и полезная утилита, вот только пока не могу придумать куда её применить

demosceneДата: Пятница, 11 Июля 2025, 18:26 | Сообщение # 27
частый гость
Сейчас нет на сайте
Это можно встроить в игру, если у тебя нормальный движок.
И сделать много-премного случайных локаций, почти не занимающих места.
Вот это
Код
im>>=2

Код
ret<<=2
ret|=ret>>6

значит, что расчёт в 6 бит на канал.
Замени на
Код
im>>=3

Код
ret<<=3
ret|=ret>>5

для точности 5 бит на канал. Это может помочь уменьшить размер игры, если это критично.


Сообщение отредактировал demoscene - Пятница, 11 Июля 2025, 18:30
vvs81Дата: Пятница, 11 Июля 2025, 18:45 | Сообщение # 28
был не раз
Сейчас нет на сайте
demoscene, я не на STMe или Ардуино делаю игру, мне нет необходимости экономить место, спасибо.
demosceneДата: Пятница, 11 Июля 2025, 18:48 | Сообщение # 29
частый гость
Сейчас нет на сайте
Я слышал, браузеркам дают максимум 50 мегов на бесплатных хостингах. Или у тебя VPS?
Вроде бы я тут сделал всё, что хотел. Пока, или есть ещё вопросы?
vvs81Дата: Пятница, 11 Июля 2025, 18:55 | Сообщение # 30
был не раз
Сейчас нет на сайте
Ну если брать все мои файлы графики, то в 50 не поместиться так и так. Бесплатный хостинг мне не понадобится. Спасибо ещё раз. demoscene,
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2025 Рейтинг