forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   axelynx (http://forum.boolean.name/showthread.php?t=14637)

HolyDel 10.08.2012 01:26

Ответ: axelynx
 
по новой сборке и вопросам wolfhound512

Цитата:

2) Как изменить surface (изменить количество вершин/треуголников) ?
Код:

surface->Resize(count_trinagles,count_vertices);
Цитата:

3) Если необходимо изменить геометрию объекта в сцене (добавить удалить вершины/треугольники), то нужно удалить entity, удалить surface, и создать все заново?
Код:

ent->SetGeometry(new_geometry);
Цитата:

4) можно ли задавать параметры вершин списками,а не по одной?
Код:

SetVerticesPositions(int start_index, int count, const vec3* position) =0;
SetVerticesNormals(int start_index, int count, const vec3* normal) =0;
SetVerticesTangents(int start_index, int count, const vec3* tangent) =0;
SetVerticesTexCoords(int start_index, int count, const vec2* uv, int layer = 0) =0;
SetVerticesColors(int start_index, int count, const vec4* color) =0;

Цитата:

1) Можно изменить направление камеры? Чтобы она смотрела не в -Z, а в +Z? Так как-то привычнее.
Код:

camera->Projection(fov, aspect, znear, zfar,ST_LEFT_HANDLE);
Цитата:

2) Попробовал решить п.1 следующим образом:

axelynx::Pivot* body = _scene->AddPivot();
_camera = _scene->AddCamera();
_camera->SetParent( body );
_camera->Turn( 0, 180, 0 );
И двигать пивот, а не камеру. Но при движении пивота камера почему-то не двигается.
теперь будет двигаться. но с повротом камеры все равно пока какая-то фигня.
Цитата:

3) SetRotate() и SetMousePos() не работают.
теперь работают

jimon 10.08.2012 01:34

Ответ: axelynx
 
Вложений: 1
HolyDel
Давай меряцо, решил написать тест на 4к кубиков, 420 моих фпс против 365 твоих.

Редактор мой не сильно расчитан на 4к нодов (привет qml, точнее пока, скоро руками рендер делать буду), ибо казуалочкам хватает под 1к объектов, но пережили. В render pipeline пришлось макросами включать насильное кеширование всех стейтов, в обычных сценах оно не сильно влияет (там по разнообразнее всё же), а тут достаточно каждый дип устанавливать шейдер и VAO и уже вместо 420 фпс получаем всего 60, втф нвидиа, втф.

ps. s0.bin - вот и все 4096 объектов сцены, запечены сразу, но все model, model * view, model * view * prj матрички считаются, те 12k умножений матриц на кадр

HolyDel 10.08.2012 01:41

Ответ: axelynx
 
давай :)
выведи плиз в заголовок окна фпс (или еще как нибудь).

твоя демка запускается под вайном в убунте. но я не могу тут запустить фрапс ((

jimon 10.08.2012 01:56

Ответ: axelynx
 
Вложений: 1
Цитата:

Сообщение от HolyDel (Сообщение 235867)
давай :)
выведи плиз в заголовок окна фпс (или еще как нибудь).

твоя демка запускается под вайном в убунте. но я не могу тут запустить фрапс ((

вывожу фпс в консоль приложения раз в 360 кадров

...
без фрапса пиковый рекорд - 513 фпс, средний стал 460-470

HolyDel 10.08.2012 02:06

Ответ: axelynx
 
ubuntu 12.04
i7 2.4GHz
6850M

axelynx - 200
твое - 300

win7 64 bit
i3 2.1 GHz
intel hd 2000

axelynx - 16
твое - 20

win7 64 bit
i7 2600K 3.4Ghz
geforce 460 gt

axelynx (EntityCost) - 760
axelynx (InstancedEntityCost) - 3130
твое - 690

pax 10.08.2012 07:20

Ответ: axelynx
 
Объединяйтесь! пишите вместе двигло, порвите всех нафиг!

HolyDel 10.08.2012 12:11

Ответ: axelynx
 
Цитата:

вот и все 4096 объектов сцены, запечены сразу, но все model, model * view, model * view * prj матрички считаются, те 12k умножений матриц на кадр
однако в таком случае ты не можешь менять кубам блендинг например.
это все таки не EntityCost :) скорее InstancedEntityCost.
и да, ты для всей геометрии так делаешь?

jimon 10.08.2012 12:35

Ответ: axelynx
 
Цитата:

Сообщение от HolyDel (Сообщение 235887)
однако в таком случае ты не можешь менять кубам блендинг например.
это все таки не EntityCost :) скорее InstancedEntityCost.
и да, ты для всей геометрии так делаешь?

ну а где можно менять блендинг то ? в udk или cry engine тебе понадобится как минимум переназначить материал, у меня тоже можно переназначить материал в реалтайме, придется заставлять потом двиг ворошить очередь рендера, но менять можно :) а блиц-way где всё можно менять с ходу - это явно не залог производительности

у меня вся геометрия (вообще вся), это 1 вбо, я посчитал что больше 10 метров геометрии мне особо и не надо, дип происходит с offset-ом в этом vbo (все заранее печется в vao если надо)

всё же это EntityCost, в тесте я 4096 раз продублировал asset_transform и asset_surface, когда в одном экземпляре остались только texture, material, geometry

HolyDel 10.08.2012 13:12

Ответ: axelynx
 
и все таки - ты для всей геометрии так делаешь?

множишь вершины на матрицу на процессоре?

jimon 10.08.2012 14:09

Ответ: axelynx
 
Цитата:

Сообщение от HolyDel (Сообщение 235890)
и все таки - ты для всей геометрии так делаешь?

множишь вершины на матрицу на процессоре?

с чего ты вообще взял что я множу вершины на матрицу ? я написал что двиг делает за кадр 12k умножений матриц, если представить что мы не будем считать никаких матриц, а будем только множить вектора позиций на матрички то это 4096 * 8 = 32768 операций, что уже не совпадает

я считаю на CPU только MVP матрицу (model_view_prj) ибо для мобильников множить три матрицы в вертексном шейдере довольно медленно, сами же вершины геометрии множатся на матрицу в вертексном шейдере, кроме спрайтов и текстов, чтобы рисовать спрайты и тексты вместе за один дип приходится их складывать в один батч, при добавлении их в батч я и множу их вершины на MV матрицу (model_view), умножение на Prj матрицу уже идет в шейдере для всего батча (ессно если две камеры рисуют разные спрайты то это уже будет 2 дипа)

HolyDel 10.08.2012 16:06

Ответ: axelynx
 
Цитата:

чтобы рисовать спрайты и тексты вместе за один дип приходится их складывать в один батч
кубы ты тоже складываешь в батч? или все же он рисуется за 4096 дипов?
если складываешь в батч только кубы в этой демке - то это InstancedEntityCost.
если рисуешь каждый своим дипом или складываешь в батч любую геометрию, или это автоматом определяется (например судя по количеству вершин) - то это EntityCost.
ибо Entity могут быть с разными шейдерами, текстурами, блендингом и т.д.

в общем, если пользователь просто создает ентити, а оно батчится автоматом, то ето EntityCost, если пользователь создает специальную группу, или еще там как-то, то это InstancedEntityCost.

jimon 10.08.2012 16:26

Ответ: axelynx
 
Цитата:

Сообщение от HolyDel (Сообщение 235914)
кубы ты тоже складываешь в батч? или все же он рисуется за 4096 дипов?
если складываешь в батч только кубы в этой демке - то это InstancedEntityCost.
если рисуешь каждый своим дипом или складываешь в батч любую геометрию, или это автоматом определяется (например судя по количеству вершин) - то это EntityCost.
ибо Entity могут быть с разными шейдерами, текстурами, блендингом и т.д.

у меня геометрия не складывается в батчи, потому в демке 4096 дипов, можно юзать инстансинг, но он :
1) появился только в opengl es 3.0
2) я не нашел ему применения в реальных играх

ps. если реально в такой демке сделать разные материалы и текстуры - видеодрайвер умрёт, можешь проверить

den 10.08.2012 16:29

Ответ: axelynx
 
Вообщем либу собирать не стал (уж больно она огромная), использовал уже собранную. Собираю проект. Собрался.
Код:
Код:

#include <axelynx/axelynx.h>

using namespace axelynx;

int main()
{
    Engine *eng = Engine::Init();
    eng->Free();
    return 0;
}

Выход в консоль:
Цитата:

FILENAME FILENAME FILENAME:/
плюс ещё три не читаемых символа

лог создался, но он пустой.

ЧЯДНТ?

HolyDel 10.08.2012 16:34

Ответ: axelynx
 
Цитата:

у меня геометрия не складывается в батчи, потому в демке 4096 дипов
а, ну тогда нет вопросов :) тогда респект :)

Цитата:

ps. если реально в такой демке сделать разные материалы и текстуры - видеодрайвер умрёт, можешь проверить
верю :)

Den
все правильно сделал.
что попросил движок - то он и сделал.
инициализировался и тупо закрылся.

хочешь что-то увидеть - создай окно.

Код:

#include <axelynx/axelynx.h>
 
using namespace axelynx;
 
int main()
{
    Engine *eng = Engine::Init();
    Window *wnd = eng->AddWindow(512,512);
 
    while(wnd->isRunning())
    {
                wnd->Flip();
    }
 
    eng->Free();
        return 0;
}


den 10.08.2012 16:47

Ответ: axelynx
 
Цитата:

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

Den
все правильно сделал.
что попросил движок - то он и сделал.
инициализировался и тупо закрылся.

хочешь что-то увидеть - создай окно.

Код:

#include <axelynx/axelynx.h>
 
using namespace axelynx;
 
int main()
{
    Engine *eng = Engine::Init();
    Window *wnd = eng->AddWindow(512,512);
 
    while(wnd->isRunning())
    {
                wnd->Flip();
    }
 
    eng->Free();
        return 0;
}


чёрное окошко, всё норм.
Лог:
Код:

succers: 512 XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0" after 2466 requests (2466 known processed) with 0 events remaining.
это нормально?)


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

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