コード例 #1
0
ファイル: renderer.c プロジェクト: jkoenen/paperbomb
static void page_create( Page* pPage, int width, int height )
{
    SYS_VERIFY( rendertarget_create( &pPage->bgTarget, width, height, PixelFormat_R8G8B8A8 ) );
    SYS_VERIFY( rendertarget_create( &pPage->fgTarget, width, height, PixelFormat_R8G8B8A8 ) );
    SYS_VERIFY( rendertarget_create( &pPage->burnTarget, width, height, PixelFormat_R8G8B8A8 ) );

    // render into render target:
    graphics_setRenderTarget( &pPage->bgTarget );   
    graphics_setBlendMode( BlendMode_Disabled );

    // render paper:
    graphics_setShader( &s_renderer.paperShader );    
    graphics_setFp4f( 0u, float_rand(), float_rand(), 2.0f / width, 2.0f / height );
    graphics_setVp4f( 0u, 32.0f, 18.0f, 0.4f, 0.3f );    
    graphics_setFsTexture(0,s_renderer.noiseTarget.id,SamplerState_MirrorU_MirrorV_Bilinear);
    graphics_drawFullscreenQuad();
   
    // clear fg+burn target:
    graphics_setShader( 0 );

    graphics_setRenderTarget( &pPage->fgTarget );
    graphics_clear( 0.0f, 0.0f, 0.0f, 0.0f );

    graphics_setRenderTarget( &pPage->burnTarget );
    graphics_clear( 0.0f, 0.0f, 0.0f, 0.0f );
}
コード例 #2
0
int pickFrom2(int A, int probA, int B, int probB)
   {
   float R = float_rand() * (probA + probB);
   if (R < probA)
      return A;
   else
      return B;
   }
コード例 #3
0
ファイル: monte_carlo_pi.c プロジェクト: silasjmatson/hacks
float calc_pi(unsigned long points) {
  unsigned long int z = 0, inside = 0;
  float x, y, rootxy, calculated_pi;

  while(z < points) {
    x = float_rand();
    y = float_rand();

    rootxy = sqrt(pow(x, 2) + pow(y, 2));

    if (rootxy <= 1.0) inside++;
    z++;
  }

  calculated_pi = 4 * (float)inside / points;
  return calculated_pi;
}
コード例 #4
0
int pickFrom3(int A, int probA, int B, int probB, int C, int probC)
   {
   float R = float_rand() * (probA + probB + probC);
   if (R < probA)
      return A;
   else if (R < probA + probB)
      return B;
   else
      return C;
   }
コード例 #5
0
int pickFrom4(int A, int probA, int B, int probB, int C, int probC, int D, int probD)
   {
   float R = float_rand() * (probA + probB + probC + probD);
   if (R < probA)
      return A;
   else if (R < probA + probB)
      return B;
   else if (R < probA + probB + probC)
      return C;
   else
      return D;
   }
コード例 #6
0
int SpiffRand(int min, int max) //returns a random integer min to max inclusive
   {
   return ((int)(float_rand() * (max + 1 - min))) + min;
   }
コード例 #7
0
ファイル: World.cpp プロジェクト: aleios/3dapp
void World::OnUpdate(const sf::Time& dt)
{
    // Update the camera.
    cam.Update();

    // Move the camera.
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
    {
        cam.Move(Vector3(0.0f, 0.0f, -5.0f * dt.asSeconds()));
    }
    else if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
    {
        cam.Move(Vector3(0.0f, 0.0f, 5.0f * dt.asSeconds()));
    }

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
    {
        cam.Move(Vector3(-5.0f * dt.asSeconds()));
    }
    else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    {
        cam.Move(Vector3(5.0f * dt.asSeconds()));
    }

    // Rotate camera via mouse.
    sf::Vector2i mpos = sf::Mouse::getPosition(window);
    if(mouseEnabled) sf::Mouse::setPosition(sf::Vector2i(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2), window);
    sf::Vector2i deltaPos = sf::Mouse::getPosition(window) - mpos;
    cam.Rotate(deltaPos.x * 1.5f * dt.asSeconds(), deltaPos.y * 1.5f * dt.asSeconds(), 0.0f);

    // Sound Spatialization
    //std::cout << "Pos: " << cam.GetPosition() << "\n";
    sf::Listener::setPosition(cam.GetPosition().ToSFMLVec());
    sf::Listener::setDirection(cam.GetDirection().ToSFMLVec());
    sf::Listener::setUpVector(cam.GetUp().ToSFMLVec());

   // if (sndExplode.getStatus() == sf::Sound::Stopped)
        //sndExplode.play();

    // Move light up and down.
    Vector3 lcpos = pointLights[0].GetPosition();

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
        exposure -= 1.0f * dt.asSeconds();
    else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
        exposure += 1.0f * dt.asSeconds();

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
    {
        const Color& col = pointLights[0].GetColor();
        pointLights[0].SetColor(Color(col.R(), col.G(), col.B() + 1.0f * dt.asSeconds()));
        std::cout << col.B() << "\n";
    }
    else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
    {
        const Color& col = pointLights[0].GetColor();
        pointLights[0].SetColor(Color(col.R(), col.G(), col.B() - 1.0f * dt.asSeconds()));
        std::cout << col.B() << "\n";
    }

    // Randomize Attenuations.
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::I))
    {
        for (auto& l : pointLights)
        {
            float catt = ((float)rand() / (float)RAND_MAX);
            float latt = ((float)rand() / (float)RAND_MAX);
            float eatt = ((float)rand() / (float)RAND_MAX);

            l.SetAttenuationConstant(catt);
            l.SetAttenuationLinear(latt);
            l.SetAttenuationExponential(eatt);

            const Color& c = l.GetColor();
            float mc = fmax(fmax((float)c.R(), (float)c.G()), (float)c.B());
            float ret = (-latt + sqrtf(latt * latt - 4 * eatt * (eatt - 256 * mc * l.GetDiffuseIntensity()))) / 2 * eatt;

            l.SetScale(Vector3(ret, ret, ret));
        }
    }

    // Randomize intensity.
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::K))
    {
        for (auto& l : pointLights)
        {
            float ambient = ((float)rand() / (float)RAND_MAX);
            float diff = ((float)rand() / (float)RAND_MAX);

            l.SetAmbientIntensity(ambient);
            l.SetDiffuseIntensity(diff);

            // Generate Color
            float r = float_rand(0.0f, maxCol);
            float g = float_rand(0.0f, maxCol);
            float b = float_rand(0.0f, maxCol);
            l.SetColor(Color(r, g, b, 1.0f));
        }
    }

    // Uniforms
    mv += 0.2f * dt.asSeconds();
    pointLights[0].SetPosition(Matrix::GetVectorTransform(Matrix::CreateYRotation(mv), spherePos));

    if (terrainMove)
        tv += 0.1f * dt.asSeconds();

    /*if (exposure >= 10.0f)
        exposureVar = -1.0f;
    else if (exposureVar <= 0.0f)
        exposureVar = 1.0f;

    exposure += exposureVar * dt.asSeconds();*/
}
コード例 #8
0
ファイル: World.cpp プロジェクト: aleios/3dapp
World::World(sf::RenderWindow& inWindow)
: window(inWindow), gbuffer(WINDOW_WIDTH, WINDOW_HEIGHT), hdrDownsampleTexture(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, true), hdrBlurTexture(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, true), hdrDownsample2Texture(WINDOW_WIDTH / 4, WINDOW_HEIGHT / 4, true), hdrBlur2Texture(WINDOW_WIDTH / 4, WINDOW_HEIGHT / 4, true), fullscreenQuad(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT), aaTexture(WINDOW_WIDTH, WINDOW_HEIGHT)
{
    // OpenGL State
    glBlendEquation(GL_FUNC_ADD);
    glBlendFunc(GL_ONE, GL_ONE);
    glStencilOpSeparate(GL_BACK, GL_KEEP, GL_INCR_WRAP, GL_KEEP);
    glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_DECR_WRAP, GL_KEEP);

    // Seed the PRNG.
    srand(static_cast<unsigned int>(time(0)));

    // Load light meshes.
    pointLightMesh.LoadFromFile("Models/pointlightMesh.obj");
    spotLightMesh.LoadFromFile("Models/spotlightMesh.obj");
    directionalLightMesh.LoadFromFile("Models/directionalMesh.obj");

    // Lighting Shaders.
    pointLightShader.LoadFromFile("Shaders/lightShader.vert", "Shaders/pointlightShader.frag");
    spotLightShader.LoadFromFile("Shaders/lightShader.vert", "Shaders/spotlightShader.frag");
    directionalLightShader.LoadFromFile("Shaders/lightShader.vert", "Shaders/directionalShader.frag");

    // HDR Shaders.
    hdrDownsample.LoadFromFile("Shaders/fsquad.vert", "Shaders/hdrDownsample.frag");
    hdrTonemap.LoadFromFile("Shaders/fsquad.vert", "Shaders/hdrTonemap.frag");
    hdrBlur.LoadFromFile("Shaders/fsquad.vert", "Shaders/hdrBlur.frag");
    hdrBrightness.LoadFromFile("Shaders/fsquad.vert", "Shaders/hdrBrightness.frag");

    // Load Models.
    mdl2.LoadFromFile("Models/sphere.obj");
    mdl.LoadFromFile("Models/floor.obj");
    mdl3.LoadFromFile("Models/sphere.obj");
    quadMesh.LoadFromFile("Models/quad.obj");

    // Load Shaders
    basicShader.LoadFromFile("Shaders/basic.vert", "Shaders/basic.frag");
    pass1Shader.LoadFromFile("Shaders/drpass1.vert", "Shaders/drpass1.frag");
    pass2Shader.LoadFromFile("Shaders/drpass2.vert", "Shaders/drpass2.frag");
    pass2ShaderDirectional.LoadFromFile("Shaders/empty.vert", "Shaders/drpass2directional.frag");
    quadShader.LoadFromFile("Shaders/fsquad.vert", "Shaders/hdrTonemap.frag");
    terrainShader.LoadFromFile("Shaders/terrainshader.vert", "Shaders/terrainshader.frag");
    flatShader.LoadFromFile("Shaders/basic.vert", "Shaders/flatshade.frag");
    emptyShader.LoadFromFile("Shaders/empty.vert", "Shaders/empty.frag");
    sphereShader.LoadFromFile("Shaders/sphere.vert", "Shaders/sphere.frag");

    // Anti-Aliasing Shaders
#if USE_FXAA == 1
    fxaaShader.LoadFromFile("Shaders/fxaa.vert", "Shaders/fxaa.frag");
#endif
    baseAAShader.LoadFromFile("Shaders/baseaa.vert", "Shaders/baseaa.frag");

    // Load textures.
    mdlTex.loadFromFile("Textures/test.png");
    terrainTexture.loadFromFile("Textures/terraintex.png");
    terrainWater.loadFromFile("Textures/terrainwater.png");

    // Main world directional light.
    DirectionalLight worldLight;
    worldLight.SetDirection(Vector3(-1.0f, 0.0f, 0.0f));
    worldLight.SetColor(Color(0.8f, 0.8f, 0.8f));
    worldLight.SetDiffuseIntensity(0.9f);
    worldLight.SetAmbientIntensity(0.4f);
    directionalLights.push_back(worldLight);

    // Lights
    const unsigned int numLights = 40;
    const float lightRadius = 2.0f;
    PointLight l;
    l.SetPosition(Vector3(10.0f, 2.0f, 10.0f));
    l.SetScale(Vector3(3.0f, 3.0f, 3.0f));
    l.SetColor(Color(0.0f, 0.0f, 1.4f, 1.0f));
    l.SetAttenuationConstant(0.4f);
    l.SetDiffuseIntensity(0.4f);
    l.SetAmbientIntensity(0.2f);
    pointLights.push_back(l);

    const int maxXZ = 15;
    const int minXZ = -15;
    const int maxY = 5;
    const float minRad = 0.3f;
    const float maxRad = 2.0f;
    for (int i = 0; i < numLights; i++)
    {
        PointLight l;
        
        // Generate position.
        int x = (rand() % (maxXZ - minXZ)) + minXZ;
        int y = (rand() % maxY);
        int z = (rand() % (maxXZ - minXZ)) + minXZ;
        l.SetPosition(Vector3(x, y, z));

        // Generate Scale
        float frand = ((float)rand() / (float)RAND_MAX);
        float fdiff = maxRad - minRad;

        //l.SetScale(Vector3(scale, scale, scale));

        // Generate Color
        float r = float_rand(0.0f, maxCol);
        float g = float_rand(0.0f, maxCol);
        float b = float_rand(0.0f, maxCol);
        l.SetColor(Color(r, g, b, 1.0f));

        float ambient = ((float)rand() / (float)RAND_MAX);
        float diff = ((float)rand() / (float)RAND_MAX);

        l.SetAmbientIntensity(ambient);
        l.SetDiffuseIntensity(diff);

        float catt = ((float)rand() / (float)RAND_MAX);
        float latt = ((float)rand() / (float)RAND_MAX);
        float eatt = ((float)rand() / (float)RAND_MAX);

        float mc = fmax(fmax((float)r, (float)g), (float)b);
        float ret = (-latt + sqrtf(latt * latt - 4 * eatt * (eatt - 256 * mc * diff))) / 2 * eatt;

        l.SetScale(Vector3(ret, ret, ret));

        l.SetAttenuationConstant(catt);
        l.SetAttenuationLinear(latt);
        l.SetAttenuationExponential(eatt);

        pointLights.push_back(l);
    }

    // Set the initial position of the sphere
    spherePos = Vector3(10.0f, 3.0f, 10.0f);

    // Setup the help text.
    defaultFont.loadFromFile("arial.ttf");
    helpText.setFont(defaultFont);
    helpText.setString("Controls:\n" \
                       "Mouse: Camera direction.\n" \
                       "WASD: Camera movement.\n" \
                       "I: Randomize light attenuations.\n" \
                       "K: Randomize light color and intensity.\n" \
                       "Insert: Disable mouse.\n" \
                       "Delete: Switch shown render target.\n" \
                       "Home: Disable/Enable terrain movement.\n"
                       );
    helpText.setCharacterSize(14);
    helpText.setColor(sf::Color(255, 0, 255, 255));

    targetText.setFont(defaultFont);
    targetText.setCharacterSize(14);
    targetText.setPosition(sf::Vector2f(0.0, window.getSize().y - 25));
    targetText.setString("Current Buffer: Final Output");
    targetText.setColor(sf::Color(255, 0, 255, 255));

    // Sounds
    sndExplodeBuffer.loadFromFile("explode.wav");
    sndExplode.setBuffer(sndExplodeBuffer);
    sndExplode.setAttenuation(10.0f);
    sndExplode.setMinDistance(60.0f);
    sndExplode.setPosition(sf::Vector3f(0.0f, 1.0f, 0.0f));
}