forum.boolean.name

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

pozitiffcat 03.03.2012 13:03

C3D Engine
 
обновлено инфо
C3D Engine является легковесным графическим, а в будущем и игровым движком, основанном на DirectX 9.0c использующем в основе визуализации шейдеры. Плотно интегрирован с физикой. Применяется для написания легковесных казуальных игр с наименьшими затратами времени.
Как устроен конвейер визуализации:
Программа -> Менеджер сцены -> Узел сцены -> Сетка -> Подсетка
В свою очередь, при отрисовке подсетки, устанавливаются параметры эффекта – это матрицы world, view, projection не перемноженые, текстура и диффузный цвет материала.
По умолчанию используется встроеный эффект. Можно загрузить и использовать свой.
Эффекты можно применять к сеткам. Этот эффект будет действовать для всех узлов, где применяется сетка. Эффект можно применить отдельно для узла. Эффект можно применить отдельно к материалу сетки, относительно сетки или узла.
Файл эффекта использует предустановленные переменные
matrix WorldMatrix; //абсолютная мировая матрица объекта
matrix ViewMatrix; // матрица вида
matrix ProjMatrix; // матрица проекции
matrix WorldViewProjMatrix; // перемноженая матрица
float4 MatDiffuse; // диффузный цвет материала
texture Tex; //текстура
Для отображения объектов нужно создавать узлы сцены CreateNode(). Потом сетку нужно передать этому узлу NodeAttachMesh(node,mesh); Одна сетка может быть назначена на несколько узлов сцен, поэтому сетку не требуется грузить много раз, например для отображения однотипных объектов.
Можно назначать эффекты и для отдельных узлов NodeSetEffect(node, effect). Эффектам можно задавать стандартные параметры Technique, Matrix, float, int, bool, float array, Texture. Эффекты так же можно назначить на часть объекта NodeSetEffectByMaterialId(node,effect,id)
Узлы сцены могут иметь родителей, при этом все трансформации с узлом производятся локально.
Объектам можно назначать физические тела (на данный момент куб, выпуклая форма и статичекий тримеш), не используйте физику для потомков. Потомки должны создаваться на уровне физики, если вы хотите иметь для них физические свойства.
Можно определять столкновения с объектами (оба объекта должны быть физическими)
На данный момент камера не может быть прикреплена ни к одному объекту, но можно производить перемещения и обзор.
Работа с клавиатурой и мышью.
Работа со скелетной анимацией.
Экспорт анимации нужно производить из 3ds max с помощью плагина panda soft
Разработка ведется одним человеком - мной :)

Пример простого приложения:
PHP код:

#include <string>
#include "c3dengine.h"
using namespace std;
int main()
{
    
Init(1024,768);
    
CameraSetPosition(0,20,-30);
    
CameraSetTarget(0,0,0);
    
int mesh LoadMesh("tiny\\tiny.x");
    
int node CreateNode();
    
NodeAttachMesh(nodemesh);
    while(
Loop())
    {
        
Cls();
        if(
IsKeyDown(KEY_ESCAPE)) break;
        
Render();        
        
Flip();
    }
    
Drop();
    return 
0;


добавил работу с физикой convex, trimesh, и функции для настройки параметров body
скелетная анимация
оптимизировал всяческие вычисления

СКАЧАТЬ СЕЙЧАС в архиве демо и документация

Mr_F_ 03.03.2012 14:05

Ответ: C3D Engine
 
Молодец, но в чём будут отличия от ксорса? По описанию ты делаешь то же самое :)

pozitiffcat 03.03.2012 15:46

Ответ: C3D Engine
 
Ну тут заточено на шейдерах, будет свой формат с редактором. Я не собираюсь догонять ксорс по крутости, я делаю нечто другое, хоть и похожее. Здесь нет материалов, тут всем рулят файлы эффектов. И хочу добиться плотной интеграции с физическим движком. Формат сцен будет свой, а формат сетки будет X. Редактор сцен будет поддерживать импорта разных форматов, но выходной всегда будет един.
Конечно планы еще размытые, много еще стоит передумать... незнаю что получится.

4yBa4Ok 03.03.2012 19:02

Ответ: C3D Engine
 
Цитата:

Сообщение от pozitiffcat (Сообщение 221406)
И хочу добиться плотной интеграции с физическим движком.


А ты можешь юзать физический двиг либо Havok либо PhysX?

pozitiffcat 03.03.2012 19:06

Ответ: C3D Engine
 
Цитата:

Сообщение от 4yBa4Ok (Сообщение 221431)

А ты можешь юзать физический двиг либо Havok либо PhysX?

только bullet из-за его легковесности

4yBa4Ok 03.03.2012 19:14

Ответ: C3D Engine
 
Цитата:

Сообщение от pozitiffcat (Сообщение 221432)
только bullet из-за его легковесности


Печалька....

HolyDel 04.03.2012 01:24

Ответ: C3D Engine
 
дружище, почему инт?

кто мешает делать так:
Код:

NodeAttachMesh(mesh,node);

pozitiffcat 04.03.2012 01:44

Ответ: C3D Engine
 
Цитата:

Сообщение от HolyDel (Сообщение 221478)
дружище, почему инт?

кто мешает делать так:
Код:

NodeAttachMesh(mesh,node);

для интеграции с другими ЯП

pozitiffcat 15.03.2012 11:30

Ответ: C3D Engine
 
Доступно обновление.
[101 - 15.03.2012]
Добавлена поддержка пост-эффектов
Добавлена физика trimesh, capsule, box, convex
Изменена работа камеры, теперь она является узлом сцены
Исправлены баги команды Drop.
Мелкие фиксы

pozitiffcat 16.03.2012 16:47

Ответ: C3D Engine
 
[102 - 16.03.2012]
Создание нескольких камер
Рендер в текстуру с определенной камеры
7 источников освещения
Контроллер FPS
Определение скорости мыши
Оптимизация стандартного шейдера
Перемещение мыши в определенную точку на экране
Работа с контроллерами
Узнавание поворота объекта
Рендер заднего буффера в текстуру
Оптимизация анимированных узлов
Определения объекта коллизии
Выбор объектов мышью

pozitiffcat 16.05.2012 12:59

Ответ: C3D Engine
 
Проект жив. Вы не думайте! Я изучал как работает анимация, и 3ds max SDK
Движок переписывается с нуля. Что готово на данный момент.
  1. Свой формат моделей (*.cg3d и *.cg3dm скрипт материала к ним)
  2. Экспортер из 3ds max (пока что скомпилировал для 2010 версии)
  3. Анимация, морф, скелет (в конечном итоге все преобразуется в морф. Для скорости, ведь это же Casual Engine...)
  4. Шейдеры (пока только стандартный, каким отрисовывается)
  5. Семантики
Что в планах. Вкратце.
Использование звукового движка (пока не определился какого). Использование физики physx по умолчанию. SDK - возможность написания плагинов (пока не думал над тем как будет работать). Сделать много семантик на все случаи жизни и запилить попиксельное освещение с тенями в стандартном шейдере.
В конечном итоге будет dll. Движок процедурный, потому что мне так нравится и это удобно (Blitz3D way). Почему я выбрал процедурность, а не объектность? Потому что большинство не хочет разбираться с ООП движком. Взять в пример Ogre3D не сложнее блица, но все же юзверов у него меньше, чем у того же блица, потому что блиц тупо удобней.

Mr_F_ 16.05.2012 13:13

Ответ: C3D Engine
 
Цитата:

Анимация, морф, скелет (в конечном итоге все преобразуется в морф. Для скорости, ведь это же Casual Engine...)
а как считаешь морф?

pozitiffcat 16.05.2012 13:26

Ответ: C3D Engine
 
В максе пробегаю по всем кадрам и извлекаю положение вершин помноженое на матрицу объекта. Этим методом неважно каким модификатором в максе сделана анимация, тем самым можно экспортировать совершенно любую анимацию

HolyDel 16.05.2012 13:48

Ответ: C3D Engine
 
не гибко же. и по памяти - пипец.

pozitiffcat 16.05.2012 14:02

Ответ: C3D Engine
 
насчет памяти - модель можно оптимизировать исключив каждый энный кадр. Анимация хуже не становится, памяти жрет меньше. Также можно хранить одну анимацию для энного кол-ва объектов, а не на каждый объект по анимации - тоже оптимизация.

ЗЫ если не ошибаюсь блиц конвертирует внутри себя в морф, а в файле модели лежит скелет. Это сделано для быстродействия анимации


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

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