 |
06.03.2009, 16:09
|
#16
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,368
Написано 2,476 полезных сообщений (для 6,864 пользователей)
|
Ответ: Глупый вопрос
HolyDel, ты мысли читаешь.
Да игра типа кримсона будет.
По кровище типа кримсона, а жанр - стратегия.
Естественно от танка следы. От взрыва воронка.
От металла осколки. Из пушки гильзы.
От людей следы.Из врагов кравища.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 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,368
Написано 2,476 полезных сообщений (для 6,864 пользователей)
|
Ответ: Глупый вопрос
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 4090 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,368
Написано 2,476 полезных сообщений (для 6,864 пользователей)
|
Ответ: Глупый вопрос
Сообщение от 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 4090 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,368
Написано 2,476 полезных сообщений (для 6,864 пользователей)
|
Ответ: Глупый вопрос
Решение про накладывание изображения на изображение:

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 4090 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,368
Написано 2,476 полезных сообщений (для 6,864 пользователей)
|
Ответ: Глупый вопрос
Нароод!? Неужели на BlitzMax тут так мало прогают?
Не верю, что никто ничего не знает про наложение картинки на картинку.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 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,368
Написано 2,476 полезных сообщений (для 6,864 пользователей)
|
Ответ: Глупый вопрос
Не сейчас я просто хочу наложить image на image.
Оставляя Alpha-канал png изображения.
В моём случае наклаедываемого, хотя это не имеет значения.
Должен же быть в BlitzMax для этого метод. Paste просто напросто плюёт на альфа канал.
Попиксельно пробывал бррр скорость не ахти какая.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 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, время: 11:52.
|