Показать сообщение отдельно
Старый 19.11.2012, 00:13   #100
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Ну, в общем понаступав на пару десятков граблей я пришел к выводу, что в блитце самой большой проблемой является большое количество ентитей. Особенно я это понял когда 300-400 рисованных облачков с альфой начало хавать фпс.
Начал разбираться с синглсёрфом.
с 10000 мешей начал снижаться фпс, и то не из-за рендера, а из-за большого списка.

Сделал перемещение x,y,z, поворот y, а вот поворот х работоет коряво. Если есть у кого рабочий вариант, покажите плиз.
выглядит код так
Global mesh=xCreateMesh()
Global surf=xCreateSurface(mesh)

Type cloud
	Field x#,y#,z#
	Field surface
	Field vertex[3]
	Field scale#
	Field rotx#,roty#
End Type

Function CloudCreate(x#,y#,z#,scale#,rotx#,roty#)
cloud.cloud=New cloud
	cloud\x=x : cloud\y=y : cloud\z=z
	cloud\scale=scale
	cloud\rotx=rotx : cloud\roty=roty
	cloud\surface=surf
	cloud\vertex[0] = xAddVertex (cloud\surface,cloud\x-cloud\scale*Cos(roty),cloud\y+cloud\scale*Cos(rotx),cloud\z-cloud\scale*Sin(roty-rotx),0,0)
	cloud\vertex[1] = xAddVertex (cloud\surface,cloud\x+cloud\scale*Cos(roty),cloud\y+cloud\scale*Cos(rotx),cloud\z+cloud\scale*Sin(roty+rotx),1,0)
	cloud\vertex[2] = xAddVertex (cloud\surface,cloud\x+cloud\scale*Cos(roty),cloud\y-cloud\scale*Cos(rotx),cloud\z+cloud\scale*Sin(roty-rotx),1,1)
	cloud\vertex[3] = xAddVertex (cloud\surface,cloud\x-cloud\scale*Cos(roty),cloud\y-cloud\scale*Cos(rotx),cloud\z-cloud\scale*Sin(roty+rotx),0,1)
	tr1=xAddTriangle(cloud\surface,cloud\vertex[0],cloud\vertex[1],cloud\vertex[2]) 
	tr2=xAddTriangle(cloud\surface,cloud\vertex[0],cloud\vertex[2],cloud\vertex[3])
	tr3=xAddTriangle(cloud\surface,cloud\vertex[2],cloud\vertex[1],cloud\vertex[0]) 
	tr4=xAddTriangle(cloud\surface,cloud\vertex[3],cloud\vertex[2],cloud\vertex[0])
	xLogMessage(cloud\surface)
End Function

Function CloudUpdate(cloud.cloud)
xVertexCoords(cloud\surface,cloud\vertex[0],cloud\x-cloud\scale*Cos(cloud\roty),cloud\y+cloud\scale*Cos(rotx),cloud\z-cloud\scale*Sin(cloud\roty)+cloud\scale*Sin(cloud\rotx))
xVertexCoords(cloud\surface,cloud\vertex[1],cloud\x+cloud\scale*Cos(cloud\roty),cloud\y+cloud\scale*Cos(rotx),cloud\z+cloud\scale*Sin(cloud\roty)+cloud\scale*Sin(cloud\rotx))
xVertexCoords(cloud\surface,cloud\vertex[2],cloud\x+cloud\scale*Cos(cloud\roty),cloud\y-cloud\scale*Cos(rotx),cloud\z+cloud\scale*Sin(cloud\roty)-cloud\scale*Sin(cloud\rotx))
xVertexCoords(cloud\surface,cloud\vertex[3],cloud\x-cloud\scale*Cos(cloud\roty),cloud\y-cloud\scale*Cos(rotx),cloud\z-cloud\scale*Sin(cloud\roty)-cloud\scale*Sin(cloud\rotx))
End Function
Посоветуйте что надо доработать
__________________

Последний раз редактировалось burovalex, 10.01.2013 в 23:17.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (19.11.2012)