当前位置: 首页>>代码示例>>C++>>正文


C++ camera::get_ray方法代码示例

本文整理汇总了C++中camera::get_ray方法的典型用法代码示例。如果您正苦于以下问题:C++ camera::get_ray方法的具体用法?C++ camera::get_ray怎么用?C++ camera::get_ray使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在camera的用法示例。


在下文中一共展示了camera::get_ray方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: display

void display(hitable* world, camera& cam)
{
    CALL_GL_API(::glClearColor(0.0f, 0.5f, 1.0f, 1.0f));
    CALL_GL_API(::glClearDepthf(1.0f));
    CALL_GL_API(::glClearStencil(0));
    CALL_GL_API(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT));

    CALL_GL_API(::glUseProgram(g_program));

    GLfloat invScreen[4] = { 1.0f / WIDTH, 1.0f / HEIGHT, 0.0f, 0.0f };
    auto hInvScreen = GetHandle(g_program, "invScreen");
    CALL_GL_API(::glUniform4fv(hInvScreen, 1, invScreen));

    CALL_GL_API(::glActiveTexture(GL_TEXTURE0));

    CALL_GL_API(::glBindTexture(GL_TEXTURE_2D, g_tex));

    auto hImage = GetHandle(g_program, "image");
    CALL_GL_API(glUniform1i(hImage, 0));

    {
        int ns = 10;

#pragma omp for
        for (int j = ny - 1; j >= 0; j--) {
            for (int i = 0; i < nx; i++) {
                vec3 col(0, 0, 0);
                for (int s = 0; s < ns; s++) {
                    float u = float(i + drand48()) / float(nx);
                    float v = float(j + drand48()) / float(ny);

                    ray r = cam.get_ray(u, v);
                    col += color(r, world, 0);
                }

                col /= float(ns);

                col = vec3(
                    sqrt(col[0]), 
                    sqrt(col[1]), 
                    sqrt(col[2]));

                g_color[j][i][0] = int(255.99*col[0]);
                g_color[j][i][1] = int(255.99*col[1]);
                g_color[j][i][2] = int(255.99*col[2]);
                g_color[j][i][3] = 255;
            }
        }
    }

    CALL_GL_API(::glTexSubImage2D(
        GL_TEXTURE_2D,
        0,
        0, 0,
        WIDTH, HEIGHT,
        GL_RGBA,
        GL_UNSIGNED_BYTE,
        g_color));

    CALL_GL_API(::glDrawArrays(GL_TRIANGLE_STRIP, 0, 4));
}
开发者ID:nakdai,项目名称:samples,代码行数:61,代码来源:main.cpp


注:本文中的camera::get_ray方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。