forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   спрайты (http://forum.boolean.name/showthread.php?t=6190)

NoNsense 31.07.2008 17:52

спрайты
 
на экране 50*50 спрайтов плюс столько же на их тени. тоесть всего 2*50*50 и еще плюс 50*50 скрытых спрайтов (но они фпс и не едят)
все это копии от еще 6 разноцветных спрятанных спрайтов.
как можно повысить фпс?

ABTOMAT 31.07.2008 17:54

Ответ: спрайты
 
Сделать их синглсурфейсными.
Прирост до 1000%

FrankH 31.07.2008 22:03

Ответ: спрайты
 
Цитата:

Сообщение от NoNsense (Сообщение 83463)
на экране 50*50 спрайтов плюс столько же на их тени. тоесть всего 2*50*50 и еще плюс 50*50 скрытых спрайтов (но они фпс и не едят)
все это копии от еще 6 разноцветных спрятанных спрайтов.
как можно повысить фпс?

Смотря что это за спрайты, если это трава то одно дело, если выстрелы - другое.

NoNsense 01.08.2008 12:28

Ответ: спрайты
 
собственно спрайты - это кнопки, с тенями.
и если я их сделаю односурфейсными то я так понимаю пикать их каждую отдельно будет уже нельзя?
а пикать их необходимо, потому что программно рассчитывать (в каком регионе мышь) практически нереально - плоскость кнопок под углом к камере (плюс перспектива) , и количество кнопок варируется. Getcolor тоже не поможет - спрайт кнопки не однотонный.
когда кнопка нажимается, она удаляется (и кнопки рядом сходного цвета).

HolyDel 01.08.2008 12:37

Ответ: спрайты
 
NoNsense, еще одно усилие и можно придумать пикуемые кнопки (отдельные элементы, скрытые) и отдельно их односюрфейсное представление.

NoNsense 01.08.2008 12:51

Ответ: спрайты
 
повысит ли это фпс? вроде объекты с 0 альфой тоже его едят (50*50 по крайней мере).
и еще - элементы с 0 альфой станут мерцать, если я потом привяжу рендер к фпс.

хм, кстати - пивотам можно делать ентитирадиус и пикать их?
(сорри за простой вопрос, просто не могу сию минуту проверить сам - не за своим компом :))

alcoSHoLiK 01.08.2008 13:03

Ответ: спрайты
 
Цитата:

Сообщение от NoNsense (Сообщение 83521)
а пикать их необходимо, потому что программно рассчитывать (в каком регионе мышь) практически нереально - плоскость кнопок под углом к камере (плюс перспектива) , и количество кнопок варируется.

А блиц как считает, по-твоему? Аппаратно?

HolyDel 01.08.2008 13:17

Ответ: спрайты
 
пивотам можно. вот я набросал пример:
http://www.forum.likosoft.ru/showthr...?p=238#post238

на моей рабочей машине - сильный проц слабая видюзу удалось поднять фпс незныительно 10-20, на машинах со слабым процом но мощной видюхой должно быть изминение лучше заметно.

NoNsense 02.08.2008 08:49

Ответ: спрайты
 
HolyDel, сенкс, за пример.
только вот незначительный прирост фпс, озадачивает.
еще была идея сделать два плайна и по ним рисовать брашем на одном кнопки, на другом тени, пикать пивоты и перераскрашивать плайн. только код весь придется переписывать с нуля.
или еще попробовать тени объеденить с самими кнопками в синглурфейсы.
кстати снижение фпс только из за колличества объектов или и из-за того что их можно пикать?

HolyDel 02.08.2008 12:57

Ответ: спрайты
 
ну... эт на рабочей машине небольшой, а на домашней удалось доднять с 60 до (180-220)

NoNsense 02.08.2008 16:05

Ответ: спрайты
 
вобщем попробую

tormoz 02.08.2008 16:48

Ответ: спрайты
 
Примерчик
http://www.screensworld.com/svalka/w.rar

Сама либа
http://www.screensworld.com/svalka/S...sh_AMTFull.rar

H@NON 03.08.2008 19:50

Ответ: спрайты
 
еще один вариант. Сделал чтобы можно было пикать по спрайтам в одном сурфейсе.
Код:

Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

cam = CreateCamera()
PositionEntity( cam, 0, 0, -10 )

InitSpriteSystem()

addSprite("left",-2)
addSprite("right",2)

Global pickedSprite.Sprite

While Not KeyHit(1)
    mx = MouseX()
    my = MouseY()
    MHleft = MouseHit(1)
   
    If MHleft=1 Then
        pick = CameraPick(cam, mx, my)
        If pick <> 0 Then
            tri = PickedTriangle()
            pickedSprite = Object.Sprite(FindSprite( tri ))
        Else
            pickedSprite = Null
        EndIf
    EndIf
   
    RenderWorld()
   
    If pickedSprite<> Null Then
        CameraProject(cam,  pickedSprite\x, pickedSprite\y, pickedSprite\z)
        Text( ProjectedX(), ProjectedY(), pickedSprite\name )
    EndIf
   
    Flip
Wend

Type Sprite
    Field tri[2], vertex
    Field name$
    Field x#, y#, z#
End Type

Global SSmesh, SSsurf

Function InitSpriteSystem()
    SSmesh = CreateMesh()
    SSsurf = CreateSurface(SSmesh)
    EntityPickMode( SSmesh, 2 )
End Function

Function addSprite(name$, x#=0, y#=0, z#=0)
    Local SS.Sprite = New Sprite
   
    SS\x = x : SS\y = y : SS\z = z
   
    SS\vertex = AddVertex(SSsurf, SS\x-1, SS\y+1, SS\z+0, 0, 0)
    AddVertex(SSsurf, SS\x+1, SS\y+1, SS\z+0, 1, 0)
    AddVertex(SSsurf, SS\x+1, SS\y-1, SS\z+0, 1, 1)
    AddVertex(SSsurf, SS\x-1, SS\y-1, SS\z+0, 0, 1)
   
    SS\tri[0] = AddTriangle(SSsurf, SS\vertex, SS\vertex+1, SS\vertex+2)
    SS\tri[1] = AddTriangle(SSsurf, SS\vertex, SS\vertex+2, SS\vertex+3)
   
    SS\name = name
End Function

Function FindSprite( tri )
    Local SS.Sprite
   
    For SS.Sprite = Each Sprite
        For n = 0 To 1
            If tri = SS\tri[n] Then Return Handle(SS)
        Next
    Next
   
    Return -1
End Function


NoNsense 04.08.2008 13:28

Ответ: спрайты
 
как-то глухо, получается но не то что надо
не могу понять как объединяются загружаемые спрайты.
вобщем как мне связать в одну поверхность два спрайта такого типа:
ghost=loadsprite("...путь...")
sprite1=copyentity(ghost)
sprite2=copyentity(ghost)
positionentity sprite1,100,0,0
positionentity sprite2,-100,0,0

и еще - я так понял что после добавления они упадут в одни координаты,
их до добавления надо именовать, а после добавления растаскивать?

H@NON 04.08.2008 19:03

Ответ: спрайты
 
mesh = CreateMesh()

ghost=loadsprite("...путь...")
positionentity ghost,0,-100000,0
HideEntity(ghost)

sp1 = CopyMesh(ghost)
PositionMesh(sp1, x, y, z)
AddMesh(sp1, mesh)
FreeEntity(sp1)

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


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

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