Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 22.11.2012, 13:29   #106
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 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
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

У меня есть два треугольника, соединенные в квад. И того 4 вертекса. Мне надо крутить точки вокруг центра квада.
По сути нужно матрицу преобразования поставить в координаты центра квада и повернуть эту матрицу на нужные углы и в нее подставить координаты вертексов.
Но не могу я понять как это сделать ((
__________________
(Offline)
 
Ответить с цитированием
Старый 22.11.2012, 23:43   #108
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 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к мешиков вытянул, местами подлагивает..
На качество травы не обращайте внимание, для примера, та же текстура только АльфаРеф накинул)
Качаем, комментируем!!
Вложения
Тип файла: rar SingleSurfTest2.rar (2.18 Мб, 305 просмотров)
__________________
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 00:07   #109
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

работает на 60 фпс-ах.
иногда почемуто опускается до 45-50. Похоже, это происходит когда я пытаюсь все поле окинуть взглядом.

травку на цпу вырвниваешь и шевелишь, или в шейдере?
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 07:09   #110
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Советы по оптимизации

burovalex, я тебе скидывал свой пример где все есть.
HolyDel, думаю на цпу ибо использует TForm.
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 10:01   #111
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 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
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Советы по оптимизации

burovalex, хм. Посмотрел код и понял что куда то делся код с разворотом квадов к камере.
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 15:40   #113
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

Обработка с процессора
шейдером будет в 100500 раз быстрее
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 15:54   #114
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Я вот чтото даже не могу представить как это делать. Получается шейдер накладывается на Весь меш, а в меше много элементов.
У каждого элемента может быть разные скорости перемещения, поворота, жизни, альфы и тд. Это ж не получится все упихать в шейдер
__________________
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 16:23   #115
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

ну вот для этого и придуман инстансинг.
хотя я не понял, тебе нужно обновлять меш каждый кадр или нет? если не каждый - можно на цпу. если каждый - однозначно в шейдере.
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 19:20   #116
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Ну инстансинг вроде как лучше использовать в сложных моделях. Я пробывал простые объекты в инстансинге, результаты не впечатлили. И инстансинг приводит меня к началу, что большое количество ентити тоже ни к чему хорошему не приводит.
Ну пока что я хочу облака реализовать в один меш, их вроде не обязательно каждый кадр обновлять.
Я вообще подумываю о таком варианте. Создать пару тройку мешей на большом расстоянии располагать квады а потом крутить эти меши с разными скоростями.
Как такой вариант?
__________________
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 21:16   #117
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Советы по оптимизации

Ну инстансинг вроде как лучше использовать в сложных моделях. Я пробывал простые объекты в инстансинге, результаты не впечатлили. И инстансинг приводит меня к началу, что большое количество ентити тоже ни к чему хорошему не приводит.
%)
- какой/как ты юзал инстансинг?
- если мы говорим о хардварном инстансинге (sm 3.0), то он лучше работает с простыми объектами (проверено).
- с инстансингом у тебя 1 ентити. вся суть его работы в том чтобы за 1 вызов отрисовки рисовать кучу объектов с индивидуальными свойствами. свойства передаются в доп вертекс буфере (в более ранних инстансингах бывало по-другому типа в виде массива констант - но на константы сильное ограничение в DX).
- не пробывал, а пробовал. это у тебя не опечатка а каждый раз, раздражает)
Ну пока что я хочу облака реализовать в один меш, их вроде не обязательно каждый кадр обновлять.
я хз что такое облака в твоей игре
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (23.11.2012)
Старый 23.11.2012, 22:11   #118
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

- какой/как ты юзал инстансинг?
Щас посматрел сам шейдер, а там не инстансинг а херь какая то. Там есть буффер с константами и всё, дальше он никак не используется. Хотя пример с самого ксорса )

- если мы говорим о хардварном инстансинге (sm 3.0), то он лучше работает с простыми объектами (проверено).
Если есть примерчик - буду благодарен! У меня на работе 3Г-модем, 64 кБит сложно в инете лазить...

- не пробывал, а пробовал. это у тебя не опечатка а каждый раз, раздражает)
Спасибо!! Я сам люблю грамотно писать, просто мне никто не говорил

я хз что такое облака в твоей игре
Да рисованные от руки, хочу просто по кругу их крутить
__________________
(Offline)
 
Ответить с цитированием
Старый 23.11.2012, 22:29   #119
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 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
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 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
Создав несколько мешей, с разными текстурками, затем рандомно к ним добавляю билборды.
А потом кручу меш, и всё крутится вокруг центра - игрока
Миниатюры
Нажмите на изображение для увеличения
Название: clouds.jpg
Просмотров: 657
Размер:	295.9 Кб
ID:	18110  
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com