|
06.03.2009, 16:09
|
#16
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,852 пользователей)
|
Ответ: Глупый вопрос
HolyDel, ты мысли читаешь.
Да игра типа кримсона будет.
По кровище типа кримсона, а жанр - стратегия.
Естественно от танка следы. От взрыва воронка.
От металла осколки. Из пушки гильзы.
От людей следы.Из врагов кравища.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
Последний раз редактировалось Randomize, 06.03.2009 в 16:28.
|
(Offline)
|
|
06.03.2009, 17:22
|
#17
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Глупый вопрос
Сообщение от HolyDel
В играх потипу кримсоланда (в играх другого типа, где крови мало, я не вижу смысла запекать ее в текстуру) именно ТЫСЯЧИ монстров. Там каждую секунду 10-20 убийств монстров (если не больше). Там в прямом смысле - моря крови
|
Допустим убивать 10 монстров в секунду, что маловероятно, тока если из гранатомета их валить. И держаться в таком темпе 10 минут(мне б за 10 минут надоело), то набежало бы 6000 объектов. причем один по любасу наслоится на другой, и будет такая кровавая каша, что если убирать первых убитых монстраков, которые лежат под пятью слоями новых, никто и не заметит. Я так и делал в своем кримсоне, без всякого рендера в текстуру. Правда там и убийств в секунду было не 10...
|
(Offline)
|
|
06.03.2009, 21:29
|
#18
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Глупый вопрос
dimanche13, хм. ты прав.
вот я сделал через рендер в текстуру:
http://forum.boolean.name/showpost.p...&postcount=483
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.03.2009, 23:22
|
#19
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Глупый вопрос
давно, кстати, слежу за Sigel. Вот все кричат Xors да Xors, у тебя вроде не хуже выходит. Хотел покрутить, но не нашел информации ни о фьючерсах, ни о том что сделано, ни о том что планируется, ни сравнительных тестов с другими движками, а это не есть гуд...
|
(Offline)
|
|
07.03.2009, 00:22
|
#20
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Глупый вопрос
dimanche13, движок-то может и лучше но кодить на С++ не все гаразды - ктомуже уж для цпп точно есть движки лучше сигела и любого другого на этом форуме...
|
(Offline)
|
|
07.03.2009, 19:38
|
#21
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Глупый вопрос
|
(Offline)
|
|
11.03.2009, 07:14
|
#22
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,852 пользователей)
|
Ответ: Глупый вопрос
BlitzMax хочет меня убить.
Изображение в оконном режиме трансперентится а в фуллскрине нет.
Из опробываного мной:
SetMaskColor(255,0,255) image.mask_r=255 image.mask_g=0 image.mask_b=255 Флаг картинке: MASKED_IMAGE
Картинка не хочет иметь прозрачный цвет ни в какую
Привожу код для большей предметности вопроса:
Function LoadTileBase:TImage(FileName:String, TileWidth:Int, TileHeight:Int) Local temp_img:TImage = LoadImage (FileName) Local tilex_c:Int = (ImageWidth(temp_img) / (TileWidth + 2)) Local tiley_c:Int = (ImageHeight(temp_img) / (TileHeight + 2)) Local TileCount:Int = tilex_c * tiley_c Local TileBase:TImage = CreateImage(tilewidth, tileheight, TileCount + 1, MASKEDIMAGE) Local n:Int = 0 SetColor(255, 0, 255) DrawRect 0, 0, ImageWidth(temp_img), ImageHeight(temp_img) SetColor(255, 255, 255) DrawImage (temp_img, 0, 0) For Local y:Int = 0 To tiley_c - 1 For Local x:Int = 0 To tilex_c-1 GrabImage TileBase, (tilewidth + 2) * x + 1, (tileheight + 2) * y + 1, n MaskPixmap(LockImage(TileBase, n), 255, 0, 255) UnlockImage(TileBase, n) n = n + 1 Next Next Flip;WaitKey() Return TileBase EndFunction
Функция загружает набор тайлов с рамкой и ликвидирует рамку.
Легче так обьяснить:
-- До --
-- После --
Использую OpenGL драйвер * SetGraphicsDriver GLMax2DDriver()
Изображения только PNG.
И ещё один вопрос: Модуль BMPLoader по любому нуже чтоли? Без него ошибка. Картинки сохранял все фотошопом. Открывал и смотрел заголовок на каждой PNG. Неужели без него в проекте никак?
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
11.03.2009, 14:18
|
#23
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Глупый вопрос
ну во первых, для чего тебе такая функция LoadTileBase:TImage(FileName:String, TileWidth:Int, TileHeight:Int)? Просто не грузи тайлы с рамками. Для этого уже есть LoadAnimImage и с SetMaskColor - все работает, я проверял.
|
(Offline)
|
|
12.03.2009, 16:32
|
#24
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,852 пользователей)
|
Ответ: Глупый вопрос
Сообщение от dimanche13
ну во первых, для чего тебе такая функция LoadTileBase:TImage(FileName:String, TileWidth:Int, TileHeight:Int)? Просто не грузи тайлы с рамками. Для этого уже есть LoadAnimImage и с SetMaskColor - все работает, я проверял.
|
Дело в том, что рисовать очень большие файлы с большим набором тайлов бывает крайне сложно.
И я нашол решение. Ширина и высота тайла получается на 2px больше.
Между тайлами идут жирные линии отделяющие тайлы друг от друга.
Тоесть я создаю файл наполненый прямоугольниками и заполняю прямоугольник картинкой.
Просто чисто так не очень то и удобно рисовать особенно когда тайлов много и они однотипные.
Как пример прикладываю изображение:
Без рамки я бы просто умер.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
12.03.2009, 20:31
|
#25
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Глупый вопрос
просто я не вижу необходимости разделять тайлы полосами.
|
(Offline)
|
|
14.03.2009, 16:25
|
#26
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,852 пользователей)
|
Ответ: Глупый вопрос
Решение про накладывание изображения на изображение:
Graphics 800, 600 Explosion = LoadImage("Картинка1") bg = LoadImage("Картинка2", DYNAMICIMAGE) Repeat Cls DrawImage bg, 0, 0 If MouseHit(1) DrawToPixmap(Explosion, 0, LockImage(bg), MouseX(), MouseY()) End If Flip Until KeyHit(KEY_ESCAPE) Function ARGB_Alpha:Int(ARGB:Int) Return (argb Shr 24) & $ff 'Return Int((ARGB & $FF000000:Int) / $1000000:Int) End Function Function ARGB_Red:Int(ARGB:Int) Return (argb Shr 16) & $ff ' Return Int((ARGB & $00FF0000:Int) / $10000:Int) End Function Function ARGB_Green:Int(ARGB:Int) Return (argb Shr 8) & $ff ' Return Int((ARGB & $0000FF00:Int) / $100:Int) End Function Function ARGB_Blue:Int(ARGB:Int) Return (argb & $ff) ' Return (ARGB & $000000FF:Int) End Function Function ARGB_Color:Int(alpha:Int,red:Int,green:Int,blue:Int) Return (Int(alpha * $1000000) + Int(RED * $10000) + Int(green * $100) + Int(blue)) End Function Function DrawToPixmap(image:TImage, framenr:Int = 0, Pixmap:TPixmap, x:Int, y:Int, alpha:Float = 1.0, Multiply:Int = 1) Local TempPix:TPixmap = Null If framenr = 0 Then TempPix = LockImage(image) If framenr > 0 Then TempPix = LockImage(image, Framenr) For Local i:Int = 0 To ImageWidth(image) - 1 For Local j:Int = 0 To ImageHeight(image) - 1 If x + i < pixmap.width And y + j < pixmap.Height 'And i >= x And j >= y Local sourcepixel:Int = ReadPixel(TempPix, i, j) Local destpixel:Int = ReadPixel(pixmap, x+i,y+j) Local destA:Float = ARGB_Alpha(destpixel) Local sourceA:Float = ARGB_Alpha(sourcepixel) * alpha If sourceA = 255 Then destA = 0 Local destR:Float = ARGB_Red(destpixel) Local destG:Float = ARGB_Green(destpixel) Local destB:Float = ARGB_Blue(destpixel) Local SourceR:Float = ARGB_Red(Sourcepixel) Local SourceG:Float = ARGB_Green(Sourcepixel) Local SourceB:Float = ARGB_Blue(Sourcepixel) Local AlphaSum:Int = destA + sourceA If multiply = 1 sourceR = (sourceR * sourceA / AlphaSum) + destA / AlphaSum * (destR * destA / AlphaSum) sourceG = (sourceG * sourceA / AlphaSum) + destA / AlphaSum * (destG * destA / AlphaSum) sourceB = (sourceB * sourceA / AlphaSum) + destA / AlphaSum * (destB * destA / AlphaSum) Else sourceR = (sourceR * sourceA / AlphaSum) + (destR * destA / AlphaSum) sourceG = (sourceG * sourceA / AlphaSum) + (destG * destA / AlphaSum) sourceB = (sourceB * sourceA / AlphaSum) + (destB * destA / AlphaSum) EndIf If AlphaSum > 255 Then AlphaSum = 255 sourcepixel = ARGB_Color(AlphaSum, SourceR, sourceG, sourceB) If SourceA <> 0 Then WritePixel(Pixmap, x + i, y + j, sourcepixel) EndIf Next Next If framenr = 0 UnlockImage(image) If framenr > 0 UnlockImage(image, framenr) End Function
Этот способ ещё тормознее и без alpha канала:
Local e:TPixmap = LockImage(imgBlood) Local p:TPixmap = LockImage(imgFloor) MaskPixmap(e, 0, 0, 0) p.Paste(e, MouseX(), MouseY()) UnlockImage(imgBlood) UnlockImage(imgFloor)
Нужели это всё, что можно сделать?
В Blitz3D подобное - расплюнуть.
Я понимаю, что тут какбы 3D-2D, но ведь SetBuffer(TextureBuffer()) в B3D есть, значит и тут чёто подобное должнобыть.
Просто я помню как я грабил экран в B3D и текстурил этим всю мапу и воду и скайбокс и юнитов. Баловался кароче
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
Последний раз редактировалось Randomize, 14.03.2009 в 19:31.
|
(Offline)
|
|
17.03.2009, 21:56
|
#27
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,852 пользователей)
|
Ответ: Глупый вопрос
Нароод!? Неужели на BlitzMax тут так мало прогают?
Не верю, что никто ничего не знает про наложение картинки на картинку.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
17.03.2009, 23:35
|
#28
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Глупый вопрос
Я же тебе написал, как это делается paste методом. Потом если тебе так нравятся эти pink-полосы, то можно загрузить картинку с pink-маской порезать на тайлы с полосами, а потом просто изменить width и height картинки, отрубив таким образом остатки полос. Ты морочаешься на пустом месте. Если я прально понял.
|
(Offline)
|
|
18.03.2009, 08:09
|
#29
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,852 пользователей)
|
Ответ: Глупый вопрос
Не сейчас я просто хочу наложить image на image.
Оставляя Alpha-канал png изображения.
В моём случае наклаедываемого, хотя это не имеет значения.
Должен же быть в BlitzMax для этого метод. Paste просто напросто плюёт на альфа канал.
Попиксельно пробывал бррр скорость не ахти какая.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
18.03.2009, 09:16
|
#30
|
|
Ответ: Глупый вопрос
Randomize
вот исходник метода Paste :
Rem
bbdoc: Paste a pixmap
end rem
Method Paste( source:TPixmap,x,y )
For Local h=0 Until source.height
ConvertPixels source.PixelPtr(0,h),source.format,Self.PixelPtr(x,y+h),Self.format,source.width
Next
End Method
а функция ковертации пикселей
Function CopyPixels( in_buf:Byte Ptr,out_buf:Byte Ptr,format,count )
MemCopy out_buf,in_buf,count*BytesPerPixel[format]
End Function
Function ConvertPixels( in_buf:Byte Ptr,in_format,out_buf:Byte Ptr,out_format,count )
If in_format=out_format
CopyPixels in_buf,out_buf,out_format,count
Else If in_format=PF_STDFORMAT
ConvertPixelsFromStdFormat in_buf,out_buf,out_format,count
Else If out_format=PF_STDFORMAT
ConvertPixelsToStdFormat in_buf,out_buf,in_format,count
Else
Local tmp_buf:Int[count]
ConvertPixelsToStdFormat in_buf,tmp_buf,in_format,count
ConvertPixelsFromStdFormat tmp_buf,out_buf,out_format,count
EndIf
End Function
это означает некоторые вещи, к примеру то что если у конечного пиксмапа не будет альфа канала то конечно при копировании альфа канал пропадёт и еще означает то что картинка не рисуется поверх, а тупо заменяются пиксели
идинственый нормальный способ сделать то что ты хочешь это рендер в текстуру, тогда наложения картинок произойдет прямо в видеокарте и ничего делать не надо
|
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Вопрос |
Черный крыс |
BlitzMax |
1 |
31.03.2009 09:30 |
Глупый вопрос но задам. |
magpro |
3D-программирование |
3 |
30.05.2007 23:22 |
16 битный рижим. |
ЛысыЙ_Чук-Иванчук |
3D-программирование |
2 |
17.07.2006 17:15 |
Часовой пояс GMT +4, время: 08:37.
|