forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   C# Быстрый поворот/перемещение множества объектов (http://forum.boolean.name/showthread.php?t=14047)

pax 13.01.2011 15:07

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от Evgen (Сообщение 175483)
Да можно. Только у меня уже привычка (оставшаяся от Java) обращаться к классам типа Mathf.бла-бла-бла только в случае крайней необходимости. Скорость выражения типа Mathf. практический не уменьшают, но когда дело касается 5-10тыс. объектов могут отнять десяток FPS. Если я не прав поправьте.

Не прав, эти операции у тебя выполняются один раз за апдейт ;).

Evgen 13.01.2011 15:11

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от pax (Сообщение 175485)
Не прав, эти операции у тебя выполняются один раз за апдейт ;).

Ладно, Ладно. В этом варианте конечно один раз, но это только пока все кубики едут в одну сторону :)

pax 13.01.2011 15:13

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от Evgen (Сообщение 175480)
Код:

                for(int i = 0; i<cube.Length; i++){
                        cubex[i]+=Mathf.Sin(deg2rad)*speed;       
                        cubey[i]+=Mathf.Cos(deg2rad)*speed;       
                }


Тогда зачем вызываешь одинаковые операции Sin и Cos в цикле в данном случае? ;)

Evgen 13.01.2011 15:20

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от pax (Сообщение 175489)
Тогда зачем вызываешь одинаковые операции Sin и Cos в цикле в данном случае? ;)

В смысле одинаковые? Sin прирост по x относительно угла rot, Cos прирост по y.
Говорю же это только сейчас в одну сторону. Далее добавлю массив cuber[] где буду хранить направление каждого куба. В радианах скорее всего. Так что deg2rad может вовсе не пригодится.
На а дальше как-то так.

Код:

                for(int i = 0; i<cube.Length; i++){
                        cubex[i]+=Mathf.Sin(cuber[i])*speed;       
                        cubey[i]+=Mathf.Cos(cuber[i])*speed;       
                }


pax 13.01.2011 15:26

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Я на самом деле о Sin и Cos вообще не подумал бы, а работал бы так:
PHP код:

cubet[i].position += cubet[i].forward*speed


pax 13.01.2011 15:46

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Кстати зачем такое количество кубиков?

Evgen 13.01.2011 15:48

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от pax (Сообщение 175492)
Я на самом деле о Sin и Cos вообще не подумал бы, а работал бы так:
PHP код:

cubet[i].position += cubet[i].forward*speed


Да мы с этого начинали.
Через cubet[i].position есть небольшой прирост, но он не значителен.
Что касается Sin/Cos таким путем можно перемещать и 50000 объектов. А в реале обновлять только то, что попадает в камеру и работать должно шустро.

В тему кубиков, MINE CRAFT тут ни причем =) Просто куб наименее прожорливая фигура 12 треугольников 8 вершин.
Ну это пока кубики, потом может танки или космические корабли или еще чего =)

Evgen 13.01.2011 16:23

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Не подскажите как сделать чтобы объект был ярким без источников света.
Чтобы у него была полная яркость на C#?

ffinder 13.01.2011 16:26

Ответ: C# Быстрый поворот/перемещение множества объектов
 
для fullbright нужно использовать шейдер. например такой: http://www.unifycommunity.com/wiki/i...hp?title=Unlit

по "оптимизации" кубов я не понял постановки задачи.
без коллайдеров (а следовательно физики) скорость возросла.
только вот в игре объекты без коллайдеров практически невозможны, так как (ВНЕЗАПНО!) отсутствует возможность отслеживать их контакты и "пикать лучами из мышки".

распределенные во времени вычисления удобнее всего организовать через coroutines (сопрограммы): http://unity3d.com/support/documenta..._26_Yield.html

Evgen 13.01.2011 16:58

Ответ: C# Быстрый поворот/перемещение множества объектов
 
То PAX
Может я что-то не понял. Этот пример реализация вывода части из большого множества объектов на экран. cubex,cubey это массивы float.
Как показала практика быстрее рассчитать перемещение с помощью SinCos а потом в порядке очереди обновлять координаты кубов, что позволяет увеличить FPS.

То ffinder

Цитата:

Сообщение от ffinder (Сообщение 175504)
для fullbright нужно использовать шейдер. например такой: http://www.unifycommunity.com/wiki/i...hp?title=Unlit

по "оптимизации" кубов я не понял постановки задачи.
без коллайдеров (а следовательно физики) скорость возросла.
только вот в игре объекты без коллайдеров практически невозможны, так как (ВНЕЗАПНО!) отсутствует возможность отслеживать их контакты и "пикать лучами из мышки".

распределенные во времени вычисления удобнее всего организовать через coroutines (сопрограммы): http://unity3d.com/support/documenta..._26_Yield.html

А без шейдеров никак?
Можно как в Blitz3d например. EntityFX cube,1
Если нет, то как этот шейдер прикрутить к кубикам?

Физика мне точно не нужна а вот насчет pick пока не знаю, может тоже не понадобится.

ffinder 13.01.2011 17:12

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от Evgen (Сообщение 175507)
Если нет, то как этот шейдер прикрутить к кубикам?

создаешь файл с расширением .shader
копируешь в него текст шейдера
переносишь файл в папку Assets своего проекта
создаешь новый материал, выбираешь ему созданный шейдер
выбираешь материал для меша

.Squid 13.01.2011 17:55

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от Evgen (Сообщение 175500)
Просто куб наименее прожорливая фигура 12 треугольников 8 вершин.

В каждом уважающем себя кубе 24 вершины.

HolyDel 13.01.2011 18:50

Ответ: C# Быстрый поворот/перемещение множества объектов
 
ну может у него куб без нормалей и текс. координат.

имхо объекты без коллайдеров имеют право на жизнь тоже.


чот меня внезавпно заинтересовало юнити. пойду качну..

Evgen 13.01.2011 21:26

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Цитата:

Сообщение от HolyDel (Сообщение 175518)

чот меня внезавпно заинтересовало юнити. пойду качну..

Неделю назад я тоже так подумал :)
Если бы знал, что появилась бесплатная версия, может и раньше бы качнул.

Evgen 13.01.2011 22:07

Ответ: C# Быстрый поворот/перемещение множества объектов
 
Вложений: 1
Извините за примитивный вопрос.
Вот создал я Terrain вручную, а как определить высоту Terrain в точке x,z например?
В Blitz я использовал TerrainHeight#(terrain,grid_x,grid_z). А тут как?
И еще как можно определить нормали к поверхности terrain в определенной точке. Чтобы кубы разворачивать к поверхности.

По поводу self-ilumination есть ambientLight
http://unity3d.com/support/documenta...ientLight.html

Пока как-то так


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

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