Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >光线追踪器,阴影光线产生黑色圆圈?

光线追踪器,阴影光线产生黑色圆圈?
EN

Stack Overflow用户
提问于 2020-03-09 06:18:33
回答 1查看 67关注 0票数 1

正如你在图像中看到的,我在球体的顶部看到了一个黑色的圆圈,图像看起来像颗粒状的。它应该更锐利,但是有这些小的黑白斑点。

这是阴影光线的代码

代码语言:javascript
运行
AI代码解释
复制
int pos = 0;

float intersect(const ray &r, vector<unique_ptr<object>> &obj)
{
    //gives closest object hit point and position;
    float closest = numeric_limits<float>::max();
    for(int j = 0; j < obj.size(); j++)
    {
        float t = obj[j]->intersect(r);
        if(t > 1e-6 && t < closest)
        {
            closest = t;
            pos = j;
        }
    }
    return closest;
}
vec color(const ray& r, vector<unique_ptr<object>> &shape,  vector<unique_ptr<Light>> &lighting, int depth)
{   
    vec background_color( .678, .847, .902);
    vec total{0.0, 0.0, 0.0};
    vec ambient{0.125, 0.125, 0.125};

    float t_near = intersect(r, shape);

    if(t_near == numeric_limits<float>::max())
            return background_color;
    else
    {
        total += ambient;
        for(int i = 0; i < lighting.size(); i++){
        total += shape[pos]->shade(lighting[i]->position(), t_near, r);//gives specular + diffuse
        vec shadow_dir = unit_vector(lighting[i]->position() - r.p_at_par(t_near));
        ray shadowRay(r.p_at_par(t_near), shadow_dir);
        float dist = shadow_dir.lenght();
        float a = intersect(shadowRay, shape);
        if(a != numeric_limits<float>::max())
                return vec(0.0, 0.0, 0.0);
        }
        return total;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-03-09 09:00:45

好的,明白了。

对于黑色的圆,您必须测试阴影光线的距离是否小于点与光源之间的距离。此外,对于距离,shadow_dir不应该被标准化。为了处理黑白点,这是dude到阴影交叉点,您必须将N*偏置添加到命中点,其中偏置是例如1e-4。偏差不应该太小

代码语言:javascript
运行
AI代码解释
复制
        vec shadow_dir = lighting[i]->position() - r.p_at_par(t_near);
        float dist = shadow_dir.lenght();
        vec N = unit_vector(shape[pos]->normal(r, t_near));
        shadow_dir = unit_vector(shadow_dir);
        ray shadowRay(r.p_at_par(t_near) + N*1e-4, shadow_dir);
        float a = intersect(shadowRay, shape);
        if(a != numeric_limits<float>::max()){
            float m = shadowRay.p_at_par(a).lenght();
            if(a < dist)
                return vec(0.0, 0.0, 0.0);
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60595516

复制
相关文章
对抗蠕虫 —— 如何让按钮不被 JS 自动点击
作者: EtherDream www.cnblogs.com/index-html/p/anti_xss_worm.html 前言 XSS 自动点按钮有什么危害? 在社交网络里,很多操作都是通过点击按钮发起的,例如发表留言。假如留言系统有 XSS,用户中招后除了基本攻击外,还能进行传播 —— XSS 自动填入留言内容,并模拟点击发表按钮,于是就能发布带有恶意代码的留言。好友看了中招后,又传播给他们的好友。。。从而形成蠕虫扩散。 那么有没有一种机制,让「发表留言」必须通过用户的「真实点击」按钮才能完成,而无
前端教程
2018/03/05
9.3K0
对抗蠕虫 —— 如何让按钮不被 JS 自动点击
JS后退, JS返回上一页, JS返回下一页
1. history.go(-1), 返回两个页面: history.go(-2);
全栈程序员站长
2022/09/15
5.1K0
JS后退一页, JS返回上一页, JS返回下一页代码[通俗易懂]
1.history.go(-1), 返回两个页面: history.go(-2);
全栈程序员站长
2022/09/15
3.5K0
js下一页_不解压查看gz文件
ZK Developer’s Reference文档,章节为Minimize Number of JavaScript Files to Load,按照文档步骤执行,最后需在
全栈程序员站长
2022/09/20
1.7K0
js下一页_不解压查看gz文件
phpcms首页列表页动态调用点击数浏览量
本方法调用的JS必须是在loop内,如果有10篇文章,那么就必须调用10次。 JS调用目前就这一种方法,因为要统计该篇文章的浏览次数,所以必须取得该篇文章的ID值,所以只能在loop循环内调用JS文件。 新建一个count_list.php,内容如下,上传到api目录中
李维亮
2021/07/09
2.5K0
爬虫遇到js动态渲染问题
scrapy爬虫与传统爬虫一样,都是通过访问服务器端的网页,获取网页内容,最终都是通过对于网页内容的分析来获取数据,这样的弊端就在于他更适用于静态网页的爬取,而面对js渲染的动态网页就有点力不从心了,因为通过js渲染出来的动态网页的内容与网页文件内容是不一样的。
全栈程序员站长
2022/09/19
2K0
爬虫遇到js动态渲染问题
nginx使用autoindex实现目录浏览页
有时候我们想提供文件遍历或目录遍历的能力,比如提供文件下载,那么就可以使用nginx的autoindex能力,快速构建文件系统遍历的网页 样例 目录文件页 配置 autoindex是nginx内置
十毛
2021/07/14
3.2K0
nginx使用autoindex实现目录浏览页
浏览器遇到大数据:预测下一个点击
每一个在海底捞有过就餐经历的人均对其服务都赞不绝口,服务员细心观察你的每一个动作,为你送上最贴心服务:眼镜布、水果等。等候大厅设有擦鞋、美甲、水果、瓜子等服务。如果是常客还可能被提供更个性化的惊喜服务。实际上,互联网产品早已在提供海底捞式的极致服务。海底捞是发挥员工主观能动性依靠个人智慧去预测和沟通用户需求并提供精细化服务,而互联网产品则凭借着技术和产品的创新不断去预测用户需求,将体验做到极致。 亚马逊: “一键下单”到“预约发货” 尽管可从模式、战略、广告、价格等诸多维度来分析亚马逊的成功,但在硅谷的观
罗超频道
2018/04/25
1.2K0
Ajax+PHP实现点击加载更多无刷新加载下一页
先添加按钮: <a id="load-more-button" type="button">MORE</a> 然后在JS中定义初始页和每页显示数量并进行Ajax请求: var currentPage = 1; var perPage = 4; function loadMore() { $.ajax({ //请求方式 type: 'get',
岳泽以
2023/04/27
9700
js监听手机端点击物理返回键或js监听pc端点击浏览器返回键
之前在项目中遇到一个问题,就是在微信网页上面本来是有返回按钮的,但是大多数人都为了方便,会使用安卓手机自带的物理返回键,这个返回键按下后,就会按照你浏览器的栈存储的路径来一层一层返回,就不执行你页面上的那个返回按钮的操作了,但是这个物理返回键的监听好像没有直接的办法进行,所以有人就想到了曲线的办法
lin_zone
2018/08/15
9.5K0
如何隐藏 "浏览器访问路径"
所以,如果你的网站要在某些平台上线,那平台会对网站安全进行检测,其中路径信息就是其中的一块,如下图:
用户9914333
2022/07/22
1.5K0
如何隐藏 "浏览器访问路径"
vim下一页
整页翻页 ctrl-f ctrl-b f就是forword b就是backward
全栈程序员站长
2022/08/22
7790
Flutter实战 | 从 0 搭建「网易云音乐」APP(二、Splash Page、登录页、发现页)
本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来。
Flutter笔记
2019/10/16
2K0
爬虫课堂(二十三)|使用Splash爬取动态页面(1)
在之前的章节中,爬取的都是静态页面中的信息,随着越来越多的网站开始用JS在客户端浏览器动态渲染网站,导致很多需要的数据并不能在原始的HTML中获取,再加上Scrapy本身并不提供JS渲染解析的功能,那么如何通过Scrapy爬取动态网站的数据呢?这一章节我们将学习这些知识。 通常对这类网站数据的爬取采用如下两种方法: 通过分析网站,找到对应数据的接口,模拟接口去获取需要的数据(一般也推荐这种方式,毕竟这种方式的效率最高),但是很多网站的接口隐藏的很深,或者接口的加密非常复杂,导致无法获取到它们的数据接口,此
黄小怪
2018/05/21
2.4K0
爬虫系列(15)Splash 的使用。
> Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库。利用它,我们同样可以实现动态渲染页面的抓取
野原测试开发
2019/07/10
1.8K0
阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页
最近为了更好地接触移动Web 开发狠心购买了一台ipad mini(之前一直都是借同学的,借多了就不好意思了)。拿来调试DeveMobile 与EaseMobile 主题 时候发现了不少问题,现在在一个个解决中。其中一个就是这个iOS Web APP中点击链接跳转到Safari 浏览器新标签页(窗口)的问题。 问题说明 iOS 上的Safari 浏览器中有一个“发送到屏幕”的功能(虽然很多小白用户都不知道这个),用户是可以把网站的URL以一个快捷方式的形式添加到主屏幕的,展示形式跟原生的应用是一样并最大限度
Jeff
2018/01/19
9.1K0
阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页
【干货】JS如何判断用户是否点击浏览器“退回”按钮返回上一个界面?
通过window的popstate事件可以监听history的变化,但是,popstate会在浏览器前进后退操作、history.go/back/forward调用、hashchange的时候被触发,它是一个复合事件,你根本判断不了到底是哪种情况引起的popstate。更难理解的是,我不知道为什么要把forward也设计为popstate,pop这个词的意思不就是从stack顶把最上面的一个从栈中移除么?forward明显是push的行为,怎么也放到popstate里面。这个事件有设计缺陷。回到题目,我们怎么去判断用户是点击了“退回”按钮?
否子戈
2022/04/28
6.8K0
阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页
iOS 上的Safari 浏览器中有一个“发送到屏幕”的功能(虽然很多小白用户都不知道这个),用户是可以把网站的URL以一个快捷方式的形式添加到主屏幕的,展示形式跟原生的应用是一样并最大限度地模拟本地APP 的效果(当然,需要开发者本身做一些代码层面的设置,见《将你的网站打造成一个iOS Web App》、《iOS / Android 移动设备中的 Touch Icons》这两篇文章)。此所谓 Web APP 是也。 DeveMobile 与EaseMobile 主题 也有这个功能。不过,现在发现了个问题,就是通过主屏幕上点击进入Web APP 形式的网页时候,点击任何一个链接就会跳转到Safari 浏览器并新建一标签页打开所属链接——这个功能真心恶心,如果这样的话还是Web APP吗?真不知苹果怎么想的,人家安卓的也不会这样啊。
wuweixiang
2019/12/19
1.3K0
jekyll如何使用中文路径
最近在使用jekyll在本地预览自己写的博客无法正常打开,而提交到github上却可以正常解析。看了一下发现是文件写的博客有什么变化,原来是因为博客的markdown文件使用了中文文件名,jekyll无法正常解析出现乱码。
付威
2018/12/05
2.1K1
点击加载更多

相似问题

如何在Angular JS中用gridOption-enableRowselection动态改变ui-grid

27

如何在angular.js ui-grid中动态更改子网格url

10

动态输入添加Angular.js

12

滚动到end to grid UI-Grid Angular js

21

如何动态更新angular ui-grid列的columnDef

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档