小编Tel*_*kis的帖子

如何正确处理光线追踪中的折射

我目前正在研究光线跟踪器,只是为了好玩而且我在折射处理方面遇到了麻烦.

整个光线跟踪器的代码源可以在Github上找到.

这是渲染的图像:

折射bug

右侧球体的折射率为1.5(玻璃).

在折射的基础上,我想处理一个"透明度"系数,其定义如下:

  • 0 - >对象是100%不透明的
  • 1 - >对象是100%透明(没有原始对象颜色的痕迹)

该球体的透明度为1.

这是处理折射部分的代码.它可以在github上找到.

Color handleTransparency(const Scene& scene,
                         const Ray& ray,
                         const IntersectionData& data,
                         uint8 depth)
{
  Ray refracted(RayType::Transparency, data.point, ray.getDirection());
  Float_t eta = data.material->getRefraction();

  if (eta != 1 && eta > Globals::Epsilon)
    refracted.setDirection(Tools::Refract(ray.getDirection(), data.normal, eta));
  refracted.setOrigin(data.point + Globals::Epsilon * refracted.getDirection());
  return inter(scene, refracted, depth + 1);
}

// http://graphics.stanford.edu/courses/cs148-10-summer/docs/2006--degreve--reflection_refraction.pdf
Float_t getFresnelReflectance(const IntersectionData& data, const Ray& ray)
{
  Float_t n = data.material->getRefraction();
  Float_t cosI = -Tools::DotProduct(ray.getDirection(), data.normal); …
Run Code Online (Sandbox Code Playgroud)

c++ raytracing

22
推荐指数
2
解决办法
2869
查看次数

如何扩展NodeJS有状态应用程序

我目前正在开发基于网络的MMORPG游戏,并希望设置基于Docker和DigitalOcean水滴的自动缩放策略.

但是,我想知道如何才能做到这一点:

我的游戏服务器必须可以跨不同的Docker容器进行拆分但是每个游戏服务器实例应该就好像它只是一个巨大的游戏服务器.这意味着在一个(角色移动)中发生的每个修改也应该在每个其他游戏服务器中进行镜像.

我试图让它工作(至少在概念上),但无法找到一种方法来正确同步我的所有实例.我应该只使用主设备广播活动还是有替代方案?

我想知道我的MySQL数据库是一样的:因为每个游戏服务器都必须从/向数据库读取/写入,当游戏变得越来越大时,我将如何使其正确扩展?我能想到的最好的解决方案是将数据库保存在一台非常强大的服务器上.

据我所知,如果所有游戏服务器都不必"共享"他们的状态,这可能很容易,但这主要是因为我可以在活动突然激增的情况下快速扩展.

(将有不同的"全球"游戏服务器,如A,B,C ......但是这些全球游戏服务器中的每一个都应该在幕后由运行"真实"游戏服务器的1-X docker容器组成,以便"全球"游戏服务器只是一个概念)

scalability node.js docker docker-swarm

11
推荐指数
1
解决办法
998
查看次数

C++:用于检查表达式是否编译的模板

在使用SFINAE编写模板专业化时,您经常会因为一个小的不存在的成员或函数而需要编写一个全新的特化.我想把这个选择打包成一个小的声明,比如orElse<T a,T b>.

小例子:

template<typename T> int get(T& v){
    return orElse<v.get(),0>();
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

c++ templates partial-specialization specialization sfinae

6
推荐指数
1
解决办法
445
查看次数

如果404,服务器渲染react-router v4 passthrough

在react-router v3中,我们可以知道服务器端呈现何时与当前url不匹配.这允许我将请求传递给我的express.static中间件,而不是发送渲染的应用程序.

在react-router v4中,我们必须使用

    const htmlData = renderToString(
        <StaticRouter
            location={req.url}
            context={context}
        >
            <App/>
        </StaticRouter>
    );
Run Code Online (Sandbox Code Playgroud)

为了在服务器端呈现.但是,它会自动将所有内容重定向到/.为什么这种行为甚至存在?难道我们不能像我们期望的那样错误地默默地失败吗?

我怎么知道没有任何东西匹配,以便我可以打电话next()让其他快递的路线完成这项工作?

这是我想要使用的整个功能:

app.get('*', (req, res, next) => {
    const context = {};
    const htmlData = renderToString(
        <StaticRouter
            location={req.url}
            context={context}
        >
            <App/>
        </StaticRouter>
    );

    console.log(JSON.stringify(context, null, 4)); // empty object
    if (context.url) { // <------------------------ Doesn't work (taken from example and thought it would contain the unmatched url)
        winston.info(`Passing ${req.url} along`);
        next(); // <--------------- Never called even if no …
Run Code Online (Sandbox Code Playgroud)

node.js express reactjs react-router isomorphic-javascript

5
推荐指数
1
解决办法
558
查看次数