forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Глупый вопрос (http://forum.boolean.name/showthread.php?t=7640)

Randomize 06.03.2009 16:09

Ответ: Глупый вопрос
 
HolyDel, ты мысли читаешь.
Да игра типа кримсона будет.
По кровище типа кримсона, а жанр - стратегия.
Естественно от танка следы. От взрыва воронка.
От металла осколки. Из пушки гильзы.
От людей следы.Из врагов кравища.

dimanche13 06.03.2009 17:22

Ответ: Глупый вопрос
 
Цитата:

Сообщение от HolyDel (Сообщение 99754)
В играх потипу кримсоланда (в играх другого типа, где крови мало, я не вижу смысла запекать ее в текстуру) именно ТЫСЯЧИ монстров. Там каждую секунду 10-20 убийств монстров (если не больше). Там в прямом смысле - моря крови :)

Допустим убивать 10 монстров в секунду, что маловероятно, тока если из гранатомета их валить. И держаться в таком темпе 10 минут(мне б за 10 минут надоело), то набежало бы 6000 объектов. причем один по любасу наслоится на другой, и будет такая кровавая каша, что если убирать первых убитых монстраков, которые лежат под пятью слоями новых, никто и не заметит. Я так и делал в своем кримсоне, без всякого рендера в текстуру. Правда там и убийств в секунду было не 10... :-D

HolyDel 06.03.2009 21:29

Ответ: Глупый вопрос
 
dimanche13, хм. ты прав.

вот я сделал через рендер в текстуру:
http://forum.boolean.name/showpost.p...&postcount=483

dimanche13 06.03.2009 23:22

Ответ: Глупый вопрос
 
давно, кстати, слежу за Sigel. Вот все кричат Xors да Xors, у тебя вроде не хуже выходит. Хотел покрутить, но не нашел информации ни о фьючерсах, ни о том что сделано, ни о том что планируется, ни сравнительных тестов с другими движками, а это не есть гуд...

NitE 07.03.2009 00:22

Ответ: Глупый вопрос
 
dimanche13, движок-то может и лучше но кодить на С++ не все гаразды - ктомуже уж для цпп точно есть движки лучше сигела и любого другого на этом форуме...

HolyDel 07.03.2009 19:38

Ответ: Глупый вопрос
 

Цитата:

ни сравнительных тестов с другими движками
начало положено:
http://forum.boolean.name/showthread...newpost&t=7937

предлагайте другие тесты. будем делать (хотя я отвечаю тока за свой двиг, и, может, если бенчмарк демка не сложная за блиц и хорс).

фичелист давно есть в основной теме:
http://forum.boolean.name/showpost.p...&postcount=422

вот справки путевой нет, да.

Randomize 11.03.2009 07:14

Ответ: Глупый вопрос
 
Вложений: 2
BlitzMax хочет меня убить.
Изображение в оконном режиме трансперентится а в фуллскрине нет.
Из опробываного мной:

PHP код:

SetMaskColor(255,0,255)

image.mask_r=255
image
.mask_g=0
image
.mask_b=255

Флаг картинке
MASKED_IMAGE 

Картинка не хочет иметь прозрачный цвет ни в какую :(
Привожу код для большей предметности вопроса:

PHP код:

Function LoadTileBase:TImage(FileName:StringTileWidth:IntTileHeight: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(tilewidthtileheightTileCount 1MASKEDIMAGE)
    
Local n:Int 0
    SetColor
(2550255)
    
DrawRect 00ImageWidth(temp_img), ImageHeight(temp_img)
    
SetColor(255255255)
    
DrawImage (temp_img00)
    For 
Local y:Int 0 To tiley_c 1
        
For Local x:Int 0 To tilex_c-1
                GrabImage TileBase
, (tilewidth 2) * 1, (tileheight 2) * 1n
                MaskPixmap
(LockImage(TileBasen), 2550255)
                
UnlockImage(TileBasen)
            
1
        Next
    Next
    Flip
;WaitKey()
    Return 
TileBase

EndFunction 

Функция загружает набор тайлов с рамкой и ликвидирует рамку.
Легче так обьяснить:
-- До --
Вложение 5512
-- После --
Вложение 5513

Использую OpenGL драйвер * SetGraphicsDriver GLMax2DDriver()
Изображения только PNG.

И ещё один вопрос: Модуль BMPLoader по любому нуже чтоли? Без него ошибка. Картинки сохранял все фотошопом. Открывал и смотрел заголовок на каждой PNG. Неужели без него в проекте никак?

dimanche13 11.03.2009 14:18

Ответ: Глупый вопрос
 
ну во первых, для чего тебе такая функция LoadTileBase:TImage(FileName:String, TileWidth:Int, TileHeight:Int)? Просто не грузи тайлы с рамками. Для этого уже есть LoadAnimImage и с SetMaskColor - все работает, я проверял.

Randomize 12.03.2009 16:32

Ответ: Глупый вопрос
 
Вложений: 1
Цитата:

Сообщение от dimanche13 (Сообщение 100259)
ну во первых, для чего тебе такая функция LoadTileBase:TImage(FileName:String, TileWidth:Int, TileHeight:Int)? Просто не грузи тайлы с рамками. Для этого уже есть LoadAnimImage и с SetMaskColor - все работает, я проверял.

Дело в том, что рисовать очень большие файлы с большим набором тайлов бывает крайне сложно.
И я нашол решение. Ширина и высота тайла получается на 2px больше.
Между тайлами идут жирные линии отделяющие тайлы друг от друга.
Тоесть я создаю файл наполненый прямоугольниками и заполняю прямоугольник картинкой.
Просто чисто так не очень то и удобно рисовать особенно когда тайлов много и они однотипные.
Как пример прикладываю изображение:
Вложение 5524
Без рамки я бы просто умер.

dimanche13 12.03.2009 20:31

Ответ: Глупый вопрос
 
просто я не вижу необходимости разделять тайлы полосами.

Randomize 14.03.2009 16:25

Ответ: Глупый вопрос
 
Решение про накладывание изображения на изображение:

PHP код:

Graphics 800600

Explosion 
LoadImage("Картинка1")
bg LoadImage("Картинка2"DYNAMICIMAGE)


Repeat
Cls


DrawImage bg
00
If MouseHit(1)
    
DrawToPixmap(Explosion0LockImage(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:TImageframenr:Int 0Pixmap:TPixmapx:Inty:Intalpha:Float 1.0Multiply:Int 1)
      
Local TempPix:TPixmap Null
      
If framenr 0 Then TempPix LockImage(image)
      If 
framenr 0 Then TempPix LockImage(imageFramenr
      For 
Local i:Int 0 To ImageWidth(image) - 1
        
For Local j:Int 0 To ImageHeight(image) - 1
          
If pixmap.width And 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 канала:
PHP код:

Local e:TPixmap LockImage(imgBlood)
    
Local p:TPixmap LockImage(imgFloor)
    
MaskPixmap(e000)
    
p.Paste(eMouseX(), MouseY())
    
UnlockImage(imgBlood)
    
UnlockImage(imgFloor

Нужели это всё, что можно сделать?
В Blitz3D подобное - расплюнуть.
Я понимаю, что тут какбы 3D-2D, но ведь SetBuffer(TextureBuffer()) в B3D есть, значит и тут чёто подобное должнобыть.
Просто я помню как я грабил экран в B3D и текстурил этим всю мапу и воду и скайбокс и юнитов. Баловался кароче :)

Randomize 17.03.2009 21:56

Ответ: Глупый вопрос
 
Нароод!? Неужели на BlitzMax тут так мало прогают?
Не верю, что никто ничего не знает про наложение картинки на картинку.

dimanche13 17.03.2009 23:35

Ответ: Глупый вопрос
 
Я же тебе написал, как это делается paste методом. Потом если тебе так нравятся эти pink-полосы, то можно загрузить картинку с pink-маской порезать на тайлы с полосами, а потом просто изменить width и height картинки, отрубив таким образом остатки полос. Ты морочаешься на пустом месте. Если я прально понял.

Randomize 18.03.2009 08:09

Ответ: Глупый вопрос
 
Не сейчас я просто хочу наложить image на image.
Оставляя Alpha-канал png изображения.
В моём случае наклаедываемого, хотя это не имеет значения.
Должен же быть в BlitzMax для этого метод. Paste просто напросто плюёт на альфа канал.
Попиксельно пробывал бррр скорость не ахти какая.

jimon 18.03.2009 09:16

Ответ: Глупый вопрос
 
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

это означает некоторые вещи, к примеру то что если у конечного пиксмапа не будет альфа канала то конечно при копировании альфа канал пропадёт и еще означает то что картинка не рисуется поверх, а тупо заменяются пиксели

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


Часовой пояс GMT +4, время: 07:15.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot