doom2d.org

Главная база плоских морпехов
It is currently 26 Oct 2020, 13:30

All times are UTC + 3 hours




Post new topic Reply to topic  [ 256 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10, 11, 12, 13  Next
Author Message
PostPosted: 30 Jul 2014, 15:25 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
да как бы никто ничего не расскажет :) сам проект пилится в code::blocks, компилится через mingw gcc, и вроде как на линях запускается (хотя я сам не проверял, линей нету).

Результат моих вчерашних "развлекушек" (динамическое освещение выключено):
Image

Небольшой вброс. Отвечать на него ненадо, все всё равно останутся при своих мнениях и вкусах.
Оффтоп:

За те пол года что я сижу в c::b, моя ненависть к нему выросла до неимоверных размеров. Это самое непонятное "нечто", в котором ничего нет из коробки, а если ставишь со стороны - не факт что оно будет работать (даже грёбаный дебагер "из коробки" не работает). И я с удовольствием вернулся бы на MSVS 2008 мою любимую (да, огромную по весу, но неимоверно функциональную и безпроблемно работающую по сравнению с блоксом), если бы не было проблем как раз с запуском под линями.


_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 30 Jul 2014, 15:31 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
а я всё равно отвечу: ну и зачем делать выбор между сортами говна? тьфу. тяжело вам там без православных vim и emacs.


Top
 Profile  
 
PostPosted: 30 Jul 2014, 15:33 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
У всех разные религии, и понятия о "православии". ;)

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 30 Jul 2014, 15:38 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
это ровно до тех пор, пока не попользуешься нормальным инструментом.

(сказал я, вообще пишущий код в mcedit и не пользующийся отладчиками)


Top
 Profile  
 
PostPosted: 31 Jul 2014, 20:09 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
Блин, может быть кто нибудь объяснит мне дураку, как прочитать вот такой вот файл по кадрам (то есть в массив кадров)?

Краткие сведения о изображении:
Размер: 1792х1792 пикселя
Бит на пиксель: 32 бита (rgba)
Размеры кадра: 256x256 пикселей
Количество кадров: 44 (общее 49)
Формат: TGA-32

Image


Я как только не бился, у меня получалось вынуть только последнюю строку, она же и распихивалась во все 44 нужные мне кадра (то есть 2 кадра есть, 5 кадров пустые, и так чередуется). Упарился уже, пол дня мучался. Помогите пожалуйста.
Знаю что в D2d:F шрифты грузятся из подобного файла (всмысле,подобной структуры), можете показать каким образом это делается?

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 31 Jul 2014, 20:26 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
э… ты чего? O_O тарга этого формата тупая, как колесо. скипнул хидер, прочитал всё в память и выбираешь нужные пиксели.

Code:
/* rawImage -- uint[] */
auto fw = imageWidth/frameWidth;
auto fh = imageHeight/frameHeight;
auto fimg = new uint[](frameWidth*FrameHeight);
foreach (fno; 0..fw*fh) {
  auto fx = (fno%fw)*frameWidth;
  auto fy = (fno/fw)*frameHeight;
  auto frmStart = fy+fx;
  foreach (y; 0..frameHeight) {
    fimg[y*frameWidth..(y+1)*frameWidth] = rawImage[frmStart..frmStart+frameWidth];
    frmStart += imageWidth;
  }
  saveFrame(fno, fimg);
}


Top
 Profile  
 
PostPosted: 31 Jul 2014, 20:31 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
ketmar wrote:
э… ты чего? O_O тарга этого формата тупая, как колесо. скипнул хидер, прочитал всё в память и выбираешь нужные пиксели.

Вот с выбором нужных пикселей проблема и приключилась. КОгда файл был в одну ленту я его спокойно осилил. А как только фреймы стали в 7 лент - мой мозг не осилил задачу :(

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 31 Jul 2014, 21:33 
Offline
Приколист
User avatar

Joined: 24 Jan 2012, 15:18
Posts: 1391
Location: Москва
St.AnGer wrote:
Вот с выбором нужных пикселей проблема и приключилась. КОгда файл был в одну ленту я его спокойно осилил. А как только фреймы стали в 7 лент - мой мозг не осилил задачу :(

А почему собственно не 6 или 8, а именно 7? Люблю чётные числа :)

Кстати, не мог не вспомнить об этом:

Image


_________________
by Stas'M


Top
 Profile  
 
PostPosted: 31 Jul 2014, 21:36 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
binarymaster wrote:
St.AnGer wrote:
Вот с выбором нужных пикселей проблема и приключилась. КОгда файл был в одну ленту я его спокойно осилил. А как только фреймы стали в 7 лент - мой мозг не осилил задачу :(

А почему собственно не 6 или 8, а именно 7? Люблю чётные числа :)

ну просто в данной картинке получилось 7 лент по 7 фреймов. И я всё равно не могу их запихнуть в массив, потому что не понимаю вот эту строку в коде, который дал ketmar выше:
Code:
fimg[y*frameWidth..(y+1)*frameWidth] = rawImage[frmStart..frmStart+frameWidth];

Оффтоп:

Хочу православный Сииииииииииии (упал на пол и начал биться в истерике) :cry:


_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
PostPosted: 31 Jul 2014, 21:45 
Offline
Приколист
User avatar

Joined: 24 Jan 2012, 15:18
Posts: 1391
Location: Москва
Судя по этой строчке кода, она одним махом копирует в fimg одну строку пикселей картинки из rawImage.

Интуиция подсказывает мне, что мы можем вылезти за границы...

Поэтому так:
Code:
fimg[y*frameWidth..((y+1)*frameWidth)-1] = rawImage[frmStart..(frmStart+frameWidth)-1];

_________________
by Stas'M


Top
 Profile  
 
PostPosted: 31 Jul 2014, 21:50 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
>Судя по этой строчке кода, она одним махом копирует в fimg одну строку пикселей
>картинки из rawImage.

абсолютно верно, копирование части одного массива в часть другого.

>Хочу православный Сииииииииииии
фу каку всякую в рот тащить! читай православный D! это обычный foreach, только намного более эффективный:
Code:
foreach (p; 0..frameWidth) fimg[y*frameWidth+p] = rawImage[frmStart+p];

>Интуиция подсказывает мне, что мы можем вылезти за границы
это плохая, негодная интуиция. в D слайс определяется как [start..end). т.е. последний элемент в слайс не входит. можно было по foreach догадаться, кстати. %-)


Top
 Profile  
 
PostPosted: 31 Jul 2014, 21:56 
Offline
Приколист
User avatar

Joined: 24 Jan 2012, 15:18
Posts: 1391
Location: Москва
ketmar wrote:
это плохая, негодная интуиция. в D слайс определяется как [start..end). т.е. последний элемент в слайс не входит. можно было по foreach догадаться, кстати. %-)

Ну не стоит так сразу в целом судить о моей интуиции :-D

Code:
foreach (p; 0..frameWidth) fimg[y*frameWidth+p] = rawImage[frmStart+p];

Вот этот код что-то не очень понял, реквестирую полную версию.

_________________
by Stas'M


Top
 Profile  
 
PostPosted: 31 Jul 2014, 21:59 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
>Вот этот код что-то не очень понял, реквестирую полную версию.
так это и есть полная версия. зануды. %-) это замена для копирования слайса, который St.AnGer не понял.
Code:
for (size_t p = 0; p < frameWidth; ++p) fimg[y*frameWidth+p] = rawImage[frmStart+p];


Top
 Profile  
 
PostPosted: 31 Jul 2014, 22:06 
Offline
Приколист
User avatar

Joined: 24 Jan 2012, 15:18
Posts: 1391
Location: Москва
Ладно, не смотря на то, что последний и предпоследний отрывок кода я не понял (т.к. без понятия, что идёт перед ним, а что после), надеюсь, он заработает.

_________________
by Stas'M


Top
 Profile  
 
PostPosted: 31 Jul 2014, 22:11 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
я же говорю, это замена для строки:
Code:
fimg[y*frameWidth..(y+1)*frameWidth] = rawImage[frmStart..frmStart+frameWidth];


Top
 Profile  
 
PostPosted: 31 Jul 2014, 22:31 
Offline
Приколист
User avatar

Joined: 24 Jan 2012, 15:18
Posts: 1391
Location: Москва
ketmar wrote:
я же говорю, это замена для строки:
Code:
fimg[y*frameWidth..(y+1)*frameWidth] = rawImage[frmStart..frmStart+frameWidth];

А, тогда так:
Code:
/* rawImage -- uint[] */
auto fw = imageWidth/frameWidth;
auto fh = imageHeight/frameHeight;
auto fimg = new uint[](frameWidth*FrameHeight);
foreach (fno; 0..fw*fh) {
  auto fx = (fno%fw)*frameWidth;
  auto fy = (fno/fw)*frameHeight;
  auto frmStart = fy+fx;
  foreach (y; 0..frameHeight) {
    for (size_t p = 0; p < frameWidth; ++p) fimg[y*frameWidth+p] = rawImage[frmStart+p];
    frmStart += imageWidth;
  }
  saveFrame(fno, fimg);
}

Что-ж, сойдёт, но одной строкой смотрится лучше.
Но меня почему-то ещё мучают некоторые сомнения, по поводу правильности копирования фреймов.

UPD:
Сомнения уже не мучают, одну важную деталь принял за другую.

_________________
by Stas'M


Top
 Profile  
 
PostPosted: 31 Jul 2014, 22:36 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
когда мучают сомнения, надо почитать код. %-)


Top
 Profile  
 
PostPosted: 31 Jul 2014, 22:37 
Offline
Приколист
User avatar

Joined: 24 Jan 2012, 15:18
Posts: 1391
Location: Москва
Всё уже понял :lol:
Теперь подождём, как St.AnGer отреагирует на всё это. :)

_________________
by Stas'M


Top
 Profile  
 
PostPosted: 31 Jul 2014, 22:42 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 620
>Теперь подождём, как St.AnGer отреагирует на всё это.
опять будет дельфой обзываться.

p.s. надо было ещё writeln() куда-нибудь воткнуть, для большего троллинга.


Top
 Profile  
 
PostPosted: 31 Jul 2014, 23:57 
Offline
User avatar

Joined: 16 Nov 2012, 09:22
Posts: 341
ketmar wrote:
опять будет дельфой обзываться.

p.s. надо было ещё writeln() куда-нибудь воткнуть, для большего троллинга.

Хотел написать оправдание про то что я хочу спать и всё такое, но... Ну я не знал что это D, честно :) да и сам D я не пользовал ни разу )))

с writeln троллинг не прошёл бы, самые базовые основы паскаля я знаю ))) а код действительно похож на паскалевский чем то, потому и спросил про делфи :) Я же весь код почти понял, кроме вот этой несчастной строки :) притом что её я тоже понял, но не до конца :mrgreen:

Вообщем, спасибо всем за разъяснения, теперь я знаю чуточку больше и утром это всё сваяю на сях )) кстати, код довольно удобный в этом случае! Но Си мне нравится больше )) Да и вообще, как постоянно говорит мой товарищ Kirpi4 - ох как ты любишь костыли... :mrgreen:

_________________
Image

Скачать Doom 2d: Remake v0.3.8a

Скачать Doom 2d на движке ksTech2d (v0.05)


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 256 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10, 11, 12, 13  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
doom2d.org, since 2007