|
3D-программирование Вопросы, касающиеся программирования 3D мира |
22.11.2012, 13:29
|
#106
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Ребят, ну помогите с трансформацией, не могу заставить вертексы правильно двигаться. Гуглю, не могу найти нормальынй пример.
Решил уже сделать пивот, выравнивать его относительно новых координат, и все равно коряво работает.
Вот так:
Function CloudUpdate(cloud.cloud)
xPositionEntity transPivot,cloud\x,cloud\y,cloud\z
xRotateEntity transPivot,cloud\rotx,cloud\roty,0
xTFormPoint(cloud\x,cloud\y,cloud\z,transPivot,0)
xVertexCoords(cloud\surface,cloud\vertex[0],xTFormedX()-1,xTFormedY()+1,xTFormedZ())
xVertexCoords(cloud\surface,cloud\vertex[1],xTFormedX()+1,xTFormedY()+1,xTFormedZ())
xVertexCoords(cloud\surface,cloud\vertex[2],xTFormedX()+1,xTFormedY()-1,xTFormedZ())
xVertexCoords(cloud\surface,cloud\vertex[3],xTFormedX()-1,xTFormedY()-1,xTFormedZ())
End Function
Меняю угол, и у меня начинают квады крутиться как будто я кручу весь меш, и когда угол доходит до 180 они еще и к центру все собираются 0_о
For cloud.cloud=Each cloud
cloud\rotY=cloud\rotY+1
CloudUpdate(cloud.cloud)
Next
__________________
|
(Offline)
|
|
22.11.2012, 21:53
|
#107
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
У меня есть два треугольника, соединенные в квад. И того 4 вертекса. Мне надо крутить точки вокруг центра квада.
По сути нужно матрицу преобразования поставить в координаты центра квада и повернуть эту матрицу на нужные углы и в нее подставить координаты вертексов.
Но не могу я понять как это сделать ((
__________________
|
(Offline)
|
|
22.11.2012, 23:43
|
#108
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
УРААА!! Получилось! Вот я тугодум, два дня втыкал. Оказывается надо tForm для каждой координаты добавлять.
Мне кажется код нихрена не оптимальный. Ну хотя бы работает )
Function CloudCreate(x#,y#,z#,scale#=1,rotx#=0,roty#=0,rotz#=0)
cloud.cloud=New cloud
cloud\x=x : cloud\y=y : cloud\z=z
cloud\scale=scale
cloud\rotx=rotx : cloud\roty=roty : cloud\rotz=rotz
cloud\surface=surf
xPositionEntity transPivot,cloud\x,cloud\y,cloud\z
xRotateEntity transPivot,cloud\rotx,cloud\roty,0
xScaleEntity transPivot,cloud\scale,cloud\scale,cloud\scale
xTFormPoint(-1,1,0,transPivot,0)
cloud\vertex[0]=xAddVertex(cloud\surface,xTFormedX(),xTFormedY(),xTFormedZ(),0,0)
xTFormPoint(1,1,0,transPivot,0)
cloud\vertex[1]=xAddVertex(cloud\surface,xTFormedX(),xTFormedY(),xTFormedZ(),1,0)
xTFormPoint(1,-1,0,transPivot,0)
cloud\vertex[2]=xAddVertex(cloud\surface,xTFormedX(),xTFormedY(),xTFormedZ(),1,1)
xTFormPoint(-1,-1,0,transPivot,0)
cloud\vertex[3]=xAddVertex(cloud\surface,xTFormedX(),xTFormedY(),xTFormedZ(),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])
End Function
Function CloudUpdate(cloud.cloud)
xPositionEntity transPivot,cloud\x,cloud\y,cloud\z
xRotateEntity transPivot,cloud\rotx,cloud\roty,cloud\rotz
xTFormPoint(-1,1,0,transPivot,0)
xVertexCoords(cloud\surface,cloud\vertex[0],xTFormedX(),xTFormedY(),xTFormedZ())
xTFormPoint(1,1,0,transPivot,0)
xVertexCoords(cloud\surface,cloud\vertex[1],xTFormedX(),xTFormedY(),xTFormedZ())
xTFormPoint(1,-1,0,transPivot,0)
xVertexCoords(cloud\surface,cloud\vertex[2],xTFormedX(),xTFormedY(),xTFormedZ())
xTFormPoint(-1,-1,0,transPivot,0)
xVertexCoords(cloud\surface,cloud\vertex[3],xTFormedX(),xTFormedY(),xTFormedZ())
End Function
Доделал пример, не окончательный но 70к мешиков вытянул, местами подлагивает..
На качество травы не обращайте внимание, для примера, та же текстура только АльфаРеф накинул)
Качаем, комментируем!!
__________________
|
(Offline)
|
|
23.11.2012, 00:07
|
#109
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Советы по оптимизации
работает на 60 фпс-ах.
иногда почемуто опускается до 45-50. Похоже, это происходит когда я пытаюсь все поле окинуть взглядом.
травку на цпу вырвниваешь и шевелишь, или в шейдере?
|
(Offline)
|
|
23.11.2012, 07:09
|
#110
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Советы по оптимизации
burovalex, я тебе скидывал свой пример где все есть.
HolyDel, думаю на цпу ибо использует TForm.
|
(Offline)
|
|
23.11.2012, 10:01
|
#111
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
работает на 60 фпс-ах.
иногда почемуто опускается до 45-50. Похоже, это происходит когда я пытаюсь все поле окинуть взглядом.
травку на цпу вырвниваешь и шевелишь, или в шейдере?
|
Да у меня тоже так иногда подлагивает, тоже не могу понять с чем связано. Обработка с процессора, сглаживаю через xEntityAlphaRef(), двигаю по 10000 мешиков за кадр, таким образом:
For rep=1 To 10000
cloud.cloud=First cloud
CloudUpdate(cloud.cloud)
EndIf
Insert cloud.cloud After Last cloud
Next
burovalex, я тебе скидывал свой пример где все есть.
|
Да Некс, и я его открывал, но ты используешь поворот только по одной оси, это просто, но вот как только пытаешься повернуть косинусами-синусами по двум осям начинаются искажения.
__________________
|
(Offline)
|
|
23.11.2012, 12:44
|
#112
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Советы по оптимизации
burovalex, хм. Посмотрел код и понял что куда то делся код с разворотом квадов к камере.
|
(Offline)
|
|
23.11.2012, 15:40
|
#113
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Советы по оптимизации
шейдером будет в 100500 раз быстрее
|
(Offline)
|
|
23.11.2012, 15:54
|
#114
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Я вот чтото даже не могу представить как это делать. Получается шейдер накладывается на Весь меш, а в меше много элементов.
У каждого элемента может быть разные скорости перемещения, поворота, жизни, альфы и тд. Это ж не получится все упихать в шейдер
__________________
|
(Offline)
|
|
23.11.2012, 16:23
|
#115
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Советы по оптимизации
ну вот для этого и придуман инстансинг.
хотя я не понял, тебе нужно обновлять меш каждый кадр или нет? если не каждый - можно на цпу. если каждый - однозначно в шейдере.
|
(Offline)
|
|
23.11.2012, 19:20
|
#116
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Ну инстансинг вроде как лучше использовать в сложных моделях. Я пробывал простые объекты в инстансинге, результаты не впечатлили. И инстансинг приводит меня к началу, что большое количество ентити тоже ни к чему хорошему не приводит.
Ну пока что я хочу облака реализовать в один меш, их вроде не обязательно каждый кадр обновлять.
Я вообще подумываю о таком варианте. Создать пару тройку мешей на большом расстоянии располагать квады а потом крутить эти меши с разными скоростями.
Как такой вариант?
__________________
|
(Offline)
|
|
23.11.2012, 21:16
|
#117
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Советы по оптимизации
Ну инстансинг вроде как лучше использовать в сложных моделях. Я пробывал простые объекты в инстансинге, результаты не впечатлили. И инстансинг приводит меня к началу, что большое количество ентити тоже ни к чему хорошему не приводит.
|
%)
- какой/как ты юзал инстансинг?
- если мы говорим о хардварном инстансинге (sm 3.0), то он лучше работает с простыми объектами (проверено).
- с инстансингом у тебя 1 ентити. вся суть его работы в том чтобы за 1 вызов отрисовки рисовать кучу объектов с индивидуальными свойствами. свойства передаются в доп вертекс буфере (в более ранних инстансингах бывало по-другому типа в виде массива констант - но на константы сильное ограничение в DX).
- не пробывал, а пробовал. это у тебя не опечатка а каждый раз, раздражает)
Ну пока что я хочу облака реализовать в один меш, их вроде не обязательно каждый кадр обновлять.
|
я хз что такое облака в твоей игре
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.11.2012, 22:11
|
#118
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
- какой/как ты юзал инстансинг?
|
Щас посматрел сам шейдер, а там не инстансинг а херь какая то. Там есть буффер с константами и всё, дальше он никак не используется. Хотя пример с самого ксорса )
- если мы говорим о хардварном инстансинге (sm 3.0), то он лучше работает с простыми объектами (проверено).
|
Если есть примерчик - буду благодарен! У меня на работе 3Г-модем, 64 кБит сложно в инете лазить...
- не пробывал, а пробовал. это у тебя не опечатка а каждый раз, раздражает)
|
Спасибо!! Я сам люблю грамотно писать, просто мне никто не говорил
я хз что такое облака в твоей игре
|
Да рисованные от руки, хочу просто по кругу их крутить
__________________
|
(Offline)
|
|
23.11.2012, 22:29
|
#119
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Советы по оптимизации
Если есть примерчик - буду благодарен! У меня на работе 3Г-модем, 64 кБит сложно в инете лазить...
|
на ксорсе нету, он там появился, когда я с него ушёл. но по словам Сквида всё на месте. внутри там суть такова:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Да рисованные от руки, хочу просто по кругу их крутить
|
ну технически не очень представляю чем они являются. массивы спрайтов, одиночные билборды, что-то ещё? скрин?
|
(Offline)
|
|
23.11.2012, 23:25
|
#120
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Будешь наверное смеяться над скрином, зато сам
Квады или билборды, не знаю как правильней )
Const cloudKindCount=5
Dim cloudMesh(cloudKindCount-1)
Dim cloudSurface(cloudKindCount-1)
Dim cloudTexture(cloudKindCount-1)
For i=0 To cloudKindCount-1
cloudMesh(i)=xCreateMesh()
cloudSurface(i)=xCreateSurface(cloudMesh(i))
cloudTexture(i)=xLoadTexture("./data/sprite/cloud"+(i+1)+".png",4)
xEntityTexture cloudMesh(i),cloudTexture(i)
xEntityFX cloudMesh(i),1
xEntityAlphaRef(cloudMesh(i),80)
Next
Создав несколько мешей, с разными текстурками, затем рандомно к ним добавляю билборды.
А потом кручу меш, и всё крутится вокруг центра - игрока
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:39.
|