Jump to content

Canardia

Developers
  • Posts

    4,127
  • Joined

  • Last visited

Posts posted by Canardia

  1. #include "UltraEngine.h"
    
    using namespace UltraEngine;
    
    int main(int argc, const char* argv[])
    {
        // Get the displays
        auto displays = GetDisplays();
    
        // Create a window
        auto window = CreateWindow("Ultra Engine", 0, 0, 1280 * displays[0]->scale, 720 * displays[0]->scale, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR);
    
        // Create a framebuffer
        auto framebuffer = CreateFramebuffer(window);
    
        // Create a world
        auto world = CreateWorld();
    
        // Let there be light and a ship
        auto camera = CreateCamera(world);
        camera->Move(0, 20, -20);
        camera->Turn(30, 0, 0);
        auto ship = CreateBoxBrush(world, 10, 10, 10);
        auto light = CreatePointLight(world, 100);
        light->Move(0, 20, 0);
    
        // Slice the dice
        Plane plane = Plane(0,0,1,0);
        auto A = CreateBrush(world);
        auto B = CreateBrush(world);
        // comment the next line out if you don't want a crash
        ship->Move(0, 0, 50);           // cash me ousside howbow dah
        ship->Slice(plane, A, B);
        ship = B->Copy(world, false, false)->As<Brush>();
    
        // Move the sliced result right
        ship->Move(20, 0, 0);
    
        // Main loop
        while (!window->Closed() and !window->KeyDown(KEY_ESCAPE))
        {
            world->Update();
            world->Render(framebuffer);
        }
        return 0;
    }

     

  2. Ok, problem fixed, but I still wonder why this worked with CopyTo:

    Factory::Factory(A<World> world)
    {
    	//world = world;	// works only with CopyTo
    	this->world = world;	// works
    }

    Anyway, case closed.

    • Like 1
  3. I made an example and now it works. Something wrong in my Factory class must be.

    #include "UltraEngine.h"
    #include "ComponentSystem.h"
    
    using namespace UltraEngine;
    
    int main(int argc, const char* argv[])
    {
        // Get the displays
        auto displays = GetDisplays();
    
        // Create a window
        auto window = CreateWindow("Ultra Engine", 0, 0, 1280 * displays[0]->scale, 720 * displays[0]->scale, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR);
    
        // Create a framebuffer
        auto framebuffer = CreateFramebuffer(window);
    
        // Create a world
        auto world = CreateWorld();
    
        // Let there be light and a ship
        auto camera = CreateCamera(world);
        camera->Move(0, 20, -20);
        camera->Turn(30, 0, 0);
        auto ship = CreateBoxBrush(world, 10, 10, 10);
        auto light = CreatePointLight(world, 100);
        light->Move(0, 20, 0);
    
        // Slice the dice
        auto pivot = CreatePivot(world);
        pivot->Turn(0, -60, 45);
        Vec3 normal = pivot->rotation.Normalize();
        Plane plane = Plane(normal.x, normal.y, normal.z, 4);
        auto A = CreateBrush(world);
        auto B = CreateBrush(world);
        ship->Slice(plane, A, B);
        //B->CopyTo(ship, 0);         // Works beautifully!
        ship = B->Copy(world,false,false)->As<Brush>();
        
        // Let's slice again like we did last summer
        pivot = CreatePivot(world);
        pivot->Turn(-60, -60, -45);
        normal = pivot->rotation.Normalize();
        plane = Plane(normal.x, normal.y, normal.z, 4);
        A = CreateBrush(world);
        B = CreateBrush(world);
        ship->Slice(plane, A, B);
        //B->CopyTo(ship, 0);
        ship = B->Copy(world,false,false)->As<Brush>(); // Now this works too, hmm back to the drawingboard
    
        // Move the sliced result right
        ship->Move(20, 0, 0);
    
        // Main loop
        while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false)
        {
            world->Update();
            world->Render(framebuffer);
        }
        return 0;
    }

    image.png.5f3f3b7a4612fee2abc876bd54feba6a.png

    • Thanks 1
  4. #include "PreComp.h"
    #include "Factory.h"
    Factory::Factory(A<World> world)
    {
    	world = world;
    	ship = CreateBoxBrush(world, 10, 10, 10);
    	ship->Move(0, 0, 0);
    }
    
    void Factory::Cut(double x, double y, double z)
    {
    	auto pivot = CreatePivot(world);
    	pivot->Turn(x,y,z);
    	Vec3 normal = pivot->rotation.Normalize();
    	Plane plane = Plane(normal.x, normal.y, normal.z, 4);
    	A<Brush> A, B;
    	A = CreateBrush(world);
    	B = CreateBrush(world);
    	ship->Slice(plane, A, B);
    	B->CopyTo(ship, 0);
    	//ship = B->Copy(world,false,false)->As<Brush>();
    }

    Then in Application.cpp (main.cpp):

    Factory factory(world);
    factory.Cut(0, -60, -45);
    factory.Cut(-60, -60, -45);
    ship = factory.ship;

     

  5. 45 minutes ago, Josh said:

    Don't use CopyTo. That's actually supposed to be a private method. Use Entity::Copy() and cast the result to a brush.

    But this doesn't work:

    //B->CopyTo(ship, 0);					// works
    ship = B->Copy(world,false,false)->As<Brush>();		// doesn't work

     

  6. ship = CreateBoxBrush(world, 10, 10, 10);
    ship->Move(0, 0, 0);
    auto pivot = CreatePivot(world);
    pivot->Turn(0, -60, -45);
    Vec3 normal = pivot->rotation.Normalize();
    Plane plane = Plane(normal.x, normal.y, normal.z, 4);
    auto A = CreateBrush(world);
    auto B = CreateBrush(world);
    ship->Slice(plane, A, B);
    ship = B;
    
    pivot->Turn(0, 1, 0);
    normal = pivot->rotation.Normalize();
    plane = Plane(normal.x, normal.y, normal.z, 4);
    ship->Slice(plane, A, B);		// Crash: Assert failed.

    image.png.b8b81ae940f6bcc968e5e86125c37c0e.png

×
×
  • Create New...