Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
7 страниц V   1 2 3 > »   
Тема закрытаНачать новую тему
> Разработка игрового движка с нуля, как создать игровой движок
autistic
сообщение 03.12.2017, 21:02
Сообщение #1


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Пилю в свободное время графический движок https://bitbucket.org/mkbkompas/engine
Что-то с проекцией не то:


Треугольник равносторонний: (-0.5, -0.5, 0), (0.5, -0.5, 0), (0, 0.5, 0)
Клиентский код:
+

Код
#include <engine/platform.h>
#include <engine/renderer.h>

std::string vertexShaderSrc =
"\n\
attribute vec4 vertexPosition;\n\
uniform mat4 modelViewProj;\n\
void main()\n\
{\n\
  gl_Position = modelViewProj * vertexPosition;\n\
}\n\
\0";

std::string fragmentShaderSrc =
"\n\
void main()\n\
{\n\
  gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);\n\
}\n\
\0";

struct Vertex
{
    float x, y, z;
};

Vertex vertices[] = {
    {-0.5f, -0.5f, 0},
    {0.5f, -0.5f, 0},
    {0.0f,  0.5f, 0},
};

unsigned short indices[] = {
    0, 1, 2
};

int main()
{
    Engine::Platform *platform = Engine::GetPlatform();
    if (!platform->CreateMainWindow())
        return -1;

    Engine::Renderer *renderer = Engine::GetRenderer();

    size_t size = vertexShaderSrc.size();
    const Engine::Byte *pVertShaderData = reinterpret_cast<const Engine::Byte*>(vertexShaderSrc.data());
    Engine::ByteVector vertexSrc(pVertShaderData, pVertShaderData + size);

    size = fragmentShaderSrc.size();
    const Engine::Byte *pFragShaderData = reinterpret_cast<const Engine::Byte*>(fragmentShaderSrc.data());
    Engine::ByteVector fragSrc(pFragShaderData, pFragShaderData + size);

    auto progId = renderer->CreateGpuProgram(Engine::STATIC_VERTEX, vertexSrc, fragSrc);
    renderer->BindGpuProgram(progId);

    const Engine::Byte *pVertData = reinterpret_cast<const Engine::Byte*>(vertices);
    Engine::ByteVector verts(pVertData, pVertData + sizeof(vertices));

    const Engine::Byte *pIndexData = reinterpret_cast<const Engine::Byte*>(indices);
    Engine::ByteVector inds(pIndexData, pIndexData + sizeof(indices));

    auto buffId = renderer->CreateHardwareBuffer(Engine::STATIC_VERTEX, verts, inds);

    Engine::Matrix4 proj, model, modelViewProj;
    proj.SetPerspective(1.3f, 1.78f, 1.0f, 100.0f);
    model.SetTranslation(Engine::Vector3(0, 0, -1.5f));
    modelViewProj = model * proj;

    renderer->SetGpuProgramConstant(progId, "modelViewProj", modelViewProj);

    platform->SetMainWindowSize(1280, 720, true);
    renderer->SetViewport(1280, 720);

    for (;;) {
        if (!platform->UpdateMainWindow()) {
            break;
        }

        renderer->BeginRenderFrame();
        renderer->DrawHardwareBuffer(buffId);
        renderer->EndRenderFrame();
    }

    renderer->DestroyHardwareBuffer(buffId);
    renderer->DestroyGpuProgram(progId);
}


Нука быстра, помогите найти в чем проблема, пожалуйста?


--------------------
nop
Перейти в начало страницы
 
Diesel
сообщение 03.12.2017, 22:32
Сообщение #2


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


proj.SetPerspective(1.3f, 1.78f, 1.0f, 100.0f);

Я не спец. Если честно, вообще не шарю. Так что не пинайте.

Я как увидел файл СиМаки, решил задать вопрос: а что все в последнее время так в неё ударились?

Сообщение отредактировал andreyholkin - 03.12.2017, 22:40
Перейти в начало страницы
 
autistic
сообщение 04.12.2017, 09:55
Сообщение #3


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(andreyholkin @ 04.12.2017, 00:32) *
proj.SetPerspective(1.3f, 1.78f, 1.0f, 100.0f);

А что здесь не так? Вроде правильно проекцию строю:
1-й параметр - угол обзора в радианах, 1.3 рад = 75 градусов
2-й параметр - соотношение сторон экрана монитора 16:9 = 1.7(7)
3-й параметр - ближняя плоскость отсечения
4-й параметр - дальняя плоскость отсечения

Код ф-ии SetPerspective тут
Формула, по которой строится матрица тут, внизу страницы
Вроде верно все, но мои глаза говорят мне обратное =/

Цитата(andreyholkin @ 04.12.2017, 00:32) *
а что все в последнее время так в неё ударились?

Я нахожу удобство этой системы сборки в том, что она позволяет абстрагироваться от среды разработки и версии компилятора, лишь бы поддерживал стандарт С++11

Сообщение отредактировал refuse - 04.12.2017, 09:56


--------------------
nop
Перейти в начало страницы
 
Trollz0r
сообщение 04.12.2017, 10:26
Сообщение #4


Почти Мастер
***********

Репутация:   1357  
Группа: Участник
Сообщений: 1155
Награды: 5
Регистрация: 28.05.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


А если сделать окно 1280х768?

А если отрисовать в 5:4 1280х1024?

А билд для тестирования уже есть?


--------------------
Сверхнарод, не желающий кормить своего уицраора шаввой, будет кормить чужого гаввахом!
---------------
------------
----------
--------
------
----
--
Перейти в начало страницы
 
jamakasi
сообщение 04.12.2017, 10:34
Сообщение #5


Доктор Игровых Наук
*******************

Репутация:   544  
Группа: Участник
Сообщений: 3657
Награды: 9
Регистрация: 12.07.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


refuse, сдается мне ты запустил его, поменял размер окна или его что то другое изменило но не пересчитал proj.SetPerspective(1.3f, 1.78f, 1.0f, 100.0f) второй параметр =)
Высчитывай его динамически. Так же возможно ошибка закралась в самой функции SetPerspective.
Код
void SetPerspective(float fov, float aspect, float znear, float zfar)
        {
            assert(aspect && fov > 0 && fov < M_PI && znear < zfar); //а может быть ... aspect > 0 && fov > 0 .... ?)

            const float m22 = 1.0f / tanf(fov / 2.0f);
            const float m11 = m22 / aspect;
            const float m33 = zfar / (znear - zfar);
            const float m34 = -1.0f;
            const float m43 = znear * m33;

            x = { m11 * 1.5f, 0, 0, 0 }; //А тут что за магия 1.5f ?
            y = { 0, m22, 0, 0 };
            z = { 0, 0, m33, m34 };
            w = { 0, 0, m43, 0 };
        }

ps как же вырвиглазно выглядит с++ bad.gif

Я конечно не знаю зачем с нуля делать двиг но мне в студенческие годы очень понравился SFML как либа для старта своего двигла и Irrlicht как уже готовый двиг =)
Перейти в начало страницы
 
Diesel
сообщение 04.12.2017, 10:39
Сообщение #6


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Как там в 3d? Это вид с верху. Сейчас в Максе собрал по координатам треугольник.


По координатам, треугольник не может быть равносторонним.

Основание 1
Остальные стороны: каждая больше 1
Пифагор приде: биссектриса 1, основание 1

Сообщение отредактировал andreyholkin - 04.12.2017, 11:29
Перейти в начало страницы
 
Trollz0r
сообщение 04.12.2017, 11:25
Сообщение #7


Почти Мастер
***********

Репутация:   1357  
Группа: Участник
Сообщений: 1155
Награды: 5
Регистрация: 28.05.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Андрей прав, по координатам треугольник действительно равнобедренный, глаза не врут death.gif


--------------------
Сверхнарод, не желающий кормить своего уицраора шаввой, будет кормить чужого гаввахом!
---------------
------------
----------
--------
------
----
--
Перейти в начало страницы
 
Молния в вакууме
сообщение 04.12.2017, 12:49
Сообщение #8


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Подтверждаю, длинна нижней грани совпадает с расстоянием от неё же до верхней точки.
Цитата(jamakasi @ 04.12.2017, 10:34) *
как же вырвиглазно выглядит с++

Там в новых стандартах вообще какую-то дичь делают, добавили этот using = вместо typedef, просто чтобы был и портил совместимость со старыми компиляторами, лямбда с ужасным синтаксисом, типа такого: [&] (int a, int b ) -> float { ... }. Лучше уж Objective-C.
Еще auto для тех, кому лень писать имя типа, но эта штука с совсем древними компиляторами в которых есть ещё неявный int будет работать иногда. Я например представленный движок собрал в C++ Builder 6, auto не заменял и всё ровно запустилось.


Сообщение отредактировал saas - 04.12.2017, 13:43
Перейти в начало страницы
 
Tron
сообщение 04.12.2017, 12:50
Сообщение #9


Игровой Эксперт
***************

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(andreyholkin @ 02.12.2017, 18:52) *
Говорят китайцы виноваты, а не мы.

изначально китайцы слили. все старье.
хавок триальный кстати
Перейти в начало страницы
 
Diesel
сообщение 04.12.2017, 13:38
Сообщение #10


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


А зачем писать графический движок?
https://ru.wikipedia.org/wiki/OpenGL
https://ru.wikipedia.org/wiki/DirectX
Эти же не просят лицензии покупать.

Я понял - это программа импортозамещения. Придёт пора, придёт Рогозин и внедрит это.
А почему падают ракеты? Виной тому, то что у нас нет своего хорошего программного обеспечения, или то что оно импортное?

Сообщение отредактировал andreyholkin - 04.12.2017, 13:43
Перейти в начало страницы
 
Молния в вакууме
сообщение 04.12.2017, 13:43
Сообщение #11


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(andreyholkin @ 04.12.2017, 13:38) *
А зачем писать графический движок?
https://ru.wikipedia.org/wiki/OpenGL
https://ru.wikipedia.org/wiki/DirectX
Эти же не просят лицензии покупать.

Так это и не графические движки, а просто API для доступа к видеокарте.
Перейти в начало страницы
 
Diesel
сообщение 04.12.2017, 14:08
Сообщение #12


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(saas @ 04.12.2017, 15:43) *
Цитата(andreyholkin @ 04.12.2017, 13:38) *
А зачем писать графический движок?
https://ru.wikipedia.org/wiki/OpenGL
https://ru.wikipedia.org/wiki/DirectX
Эти же не просят лицензии покупать.

Так это и не графические движки, а просто API для доступа к видеокарте.

Я не спец. И что в x-ray является графическим движком? Где он зарыт?
Перейти в начало страницы
 
Молния в вакууме
сообщение 04.12.2017, 14:09
Сообщение #13


Почти Игроман
*********

Репутация:   187  
Группа: Участник
Сообщений: 647
Награды: 4
Регистрация: 05.05.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


andreyholkin, в xrRender_R1,R2,R3,R4.
Перейти в начало страницы
 
Diesel
сообщение 04.12.2017, 14:13
Сообщение #14


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(saas @ 04.12.2017, 16:09) *
andreyholkin, в xrRender_R1,R2,R3,R4.

Стало доходить. Вообще я думал, что это узлы связи неких визуальных потребностей.
Если честно, то я и впрямь думал, что DirectX9-11 это графический движок.

Сообщение отредактировал andreyholkin - 04.12.2017, 14:14
Перейти в начало страницы
 
Diesel
сообщение 04.12.2017, 15:34
Сообщение #15


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


http://media.moddb.com/images/mods/1/26/25940/ssr.jpg
Не подскажите тему, как это сделать? Отражение в воде.
Перейти в начало страницы
 
Diesel
сообщение 04.12.2017, 19:47
Сообщение #16


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Ткнули носом в ОГСЕ. Отбой.
Перейти в начало страницы
 
autistic
сообщение 04.12.2017, 21:27
Сообщение #17


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(andreyholkin @ 04.12.2017, 12:39) *
По координатам, треугольник не может быть равносторонним.

Цитата(RedPython @ 04.12.2017, 13:25) *
Андрей прав, по координатам треугольник действительно равнобедренный, глаза не врут

Цитата(saas @ 04.12.2017, 14:49) *
Подтверждаю, длинна нижней грани совпадает с расстоянием от неё же до верхней точки.

Ох, позор на мою седую голову, верно же! >_<

Цитата(andreyholkin @ 04.12.2017, 15:38) *
А зачем писать графический движок?

Иногда полезнее иметь собственное простое и доступное решение, чтобы протестировать что-то или дему какую-нить запилить, нежели раскатывать монструозный движок с гигабайтной документацией к нему (и кучей чужих багов впридачу). Ну и вопрос с лицензированием, само собой, не на последнем месте стоит.

Цитата(RedPython @ 04.12.2017, 12:26) *
А билд для тестирования уже есть?

Эх запилю что-нибудь эдакое! Но это когда уже будет основной каркас более-менее готов.


--------------------
nop
Перейти в начало страницы
 
dPlayer
сообщение 04.12.2017, 21:37
Сообщение #18


Самый некомпетентный на форуме
********************

Репутация:   312  
Группа: Участник
Сообщений: 4074
Награды: 4
Регистрация: 04.09.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(andreyholkin @ 04.12.2017, 17:34) *
Не подскажите тему, как это сделать? Отражение в воде.

Отзеркалировать геометрию под террейн biggrin.gif wink.gif
Перейти в начало страницы
 
jamakasi
сообщение 04.12.2017, 22:06
Сообщение #19


Доктор Игровых Наук
*******************

Репутация:   544  
Группа: Участник
Сообщений: 3657
Награды: 9
Регистрация: 12.07.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(refuse @ 04.12.2017, 21:27) *
Иногда полезнее иметь собственное простое и доступное решение, чтобы протестировать что-то или дему какую-нить запилить, нежели раскатывать монструозный движок с гигабайтной документацией к нему (и кучей чужих багов впридачу). Ну и вопрос с лицензированием, само собой, не на последнем месте стоит.

Ну так это, у sfml лицензия zlib:
Цитата
  • ПО используется «как есть» — его авторы снимают с себя ответственность за проблемы, связанные с его использованием.
  • На распространение изменённых версий ПО накладываются следующие ограничения:

  1. Запрещается утверждать, что это вы написали оригинальный продукт;
  2. Изменённые версии не должны выдаваться за оригинальный продукт;
  3. Уведомление о лицензии не должно убираться из пакетов с исходными текстами.


Данная лицензия не требует обязательного распространения исходных текстов вместе с продуктом.

Что может быть удобнее чем такой лаконичный пример для 3d https://gist.github.com/kenpower/4018118 или такой https://www.sfml-dev.org/tutorials/2.4/graphics-draw.php для 2d ?) Все проблемы абстракции решены, матан и потоки уже тоже отточены годами и юзаются элементарно. Нафига нужен свой колхоз, или просто лень в случае успеха в титрах\описании внести строчку что "used awesome sfml lib" ?))
Перейти в начало страницы
 
autistic
сообщение 04.12.2017, 22:57
Сообщение #20


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(jamakasi @ 05.12.2017, 00:06) *
Что может быть удобнее чем такой лаконичный пример для 3d

Боян же, там FFP во все поля. Ты покажи пример где SM реализована, да так чтобы я без проблем мог кастомные шейдера писать, и чтобы удобно было smile.gif

Цитата(jamakasi @ 05.12.2017, 00:06) *
Все проблемы абстракции решены, матан и потоки уже тоже отточены годами и юзаются элементарно. Нафига нужен свой колхоз

Сказки все это, там точно такой же колхоз и багло там плавает годами, как и везде. Свой колхоз ценен тем, что я имплеменчу только то что буду использовать и не забиваю голову поддержкой 100500 различных фичей на все случаи жизни, которые мне никогда не понадобятся.


--------------------
nop
Перейти в начало страницы
 

7 страниц V   1 2 3 > » 
Тема закрытаНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.03.2024, 15:16