#include "kemena.h"
using namespace kemena;
int main()
{
// Create window and renderer
kWindow* window = createWindow(1024, 768, "Kemena3D Demo");
kRenderer* renderer = createRenderer(window);
renderer->setClearColor(vec4(0.4f, 0.6f, 0.8f, 1.0f));
// Create the asset manager, world and scene
kAssetManager* assetManager = createAssetManager();
kWorld* world = createWorld(assetManager);
kScene* scene = world->createScene("My Scene");
// Create a camera and a sun light
kCamera* camera = scene->addCamera(vec3(-20.0f, 5.0f, 20.0f), vec3(0.0f, 0.5f, 0.0f));
kLight* light_sun = scene->addSunLight(vec3(2.0f, 5.0f, 0.0f), vec3(0.2f, -1.0f, 0.0f), vec3(0.1f, 0.1f, 0.1f), vec3(1.0f, 1.0f, 1.0f));
// Create a shader and a material
kShader* shader = assetManager->createShader("path/mesh.vert", "path/mesh_phong.frag");
kMaterial* material = assetManager->createMaterial(shader);
// Apply textures to the material
kTexture2D* tex_albedo = assetManager->loadTexture2D("path/albedo.png", "albedoMap", TextureFormat::TEX_FORMAT_SRGBA);
kTexture2D* tex_normal = assetManager->loadTexture2D("path/normal.png", "normalMap", TextureFormat::TEX_FORMAT_RGBA);
kTexture2D* tex_spec = assetManager->loadTexture2D("path/specular.png", "specularMap", TextureFormat::TEX_FORMAT_RGBA);
material->addTexture2D(tex_albedo);
material->addTexture2D(tex_normal);
material->addTexture2D(tex_spec);
// Load a 3D model and apply the material to it
kMesh* mesh = scene->addMesh("path/model.fbx");
mesh->setMaterial(material);
// Game loop
while (window->getRunning())
{
if (eventTriggered(K_EVENT_QUIT))
{
window->setRunning(false);
}
renderer->clear();
renderer->render(scene, 0, 0, window->getWindowWidth(), window->getWindowHeight(), window->getTimer()->getDeltaTime());
window->swap();
}
// Clean up
renderer->destroy();
window->destroy();
return 0;
}