问题标签 [raytracing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 将指针数组固定在内存中
我目前正在将 C# 中的光线追踪器作为一个爱好项目。我试图通过从 c++ 实现中实现一些技巧来实现不错的渲染速度,但遇到了麻烦。
光线追踪器渲染的场景中的对象存储在 KdTree 结构中,而树的节点又存储在数组中。我遇到问题的优化是在尝试将尽可能多的树节点放入缓存行时。这样做的一种方法是让节点只包含指向左子节点的指针。然后隐含的是,右孩子紧跟在数组中的左孩子之后。
节点是结构,在树构造期间,它们被静态内存管理器类成功放入数组中。当我开始遍历树时,起初它似乎工作得很好。然后在渲染早期的某个点(每次大约在同一个地方),根节点的左子指针突然指向一个空指针。我得出的结论是,当数组位于堆上时,垃圾收集器已经移动了结构。
我已经尝试了几种方法来将地址固定在内存中,但它们似乎都不能像我需要的那样持续整个应用程序的生命周期。'fixed' 关键字似乎只在单个方法调用期间有帮助,并且声明 'fixed' 数组只能在节点不是的简单类型上完成。有没有一个好的方法可以做到这一点,或者我只是在 C# 不适合的东西的道路上走得太远了。
顺便说一句,改用 c++ 虽然可能是高性能程序的更好选择,但不是一种选择。
cuda - 使用 CUDA 进行光线追踪
我目前正在实施光线追踪器。由于光线追踪的计算量非常大,而且无论如何我都会研究 CUDA 编程,所以我想知道是否有人有将两者结合的经验。我真的无法判断计算模型是否匹配,我想知道会发生什么。我的印象是,这并不完全是天作之合,但有一个不错的速度增加总比没有好。
java - 是否有基于 Java 的光线追踪模型可以适用于水下声学?
我正在寻找一种基于 Java 的开源光线追踪系统,适用于对基于水下光线的声学进行建模。这样的软件包可能类似于带有高斯射线束 (GRAB) 的综合声学系统仿真 (CASS),但我更喜欢可以在演示文稿中使用的开源、免费使用或免费修改模型到一个开放的论坛(例如,JavaOne)。
满足我需求的最佳模型将提供基于环境模型、水深测量(也称为海底地形)和发射器频谱的射线路径建模。注意:多路径效果(包括反射和折射)是我的主要兴趣点,所以最好的包会提供开箱即用的效果。
稍微不太理想的是标准的基于 Java 的光线跟踪包(光学或声学),它可以处理通过介质的变化速度。另一种说法是折射率在整个介质中以连续的方式变化(尽管它的一阶导数可能不是连续的)。
graphics - 多个像素的 alpha 混合公式是什么?
我有许多 RGBA 像素,每个像素都有一个 alpha 分量。
所以我有一个像素列表:(p0 p1 p2 p3 p4 ... pn)其中 p_0_ 是前面的像素, p_n_ 是最远的(在后面)。
最后一个(或任何)像素不一定是不透明的,因此生成的混合像素也可以是透明的。我从列表的开头到结尾进行混合,反之亦然(是的,它是光线追踪)。因此,如果结果在任何时候变得足够不透明,我可以以足够正确的结果停止。我将以这种方式应用混合算法: (((( p0 @ p1 ) @ p2 ) @ p3 ) ... )
谁能建议我一个正确的混合配方,不仅适用于 R、G 和 B,而且适用于 A 成分?
UPD:我想知道对于确定的混合颜色过程,我们怎么可能有很多公式?这是某种近似吗?对我来说,这看起来很疯狂:公式并没有太大的不同,以至于我们真正获得了效率或优化。任何人都可以澄清这一点吗?
algorithm - 计算在基于瓦片的游戏中哪些瓦片被点亮(“光线追踪”)
我正在编写一个基于图块的小游戏,我想为此支持光源。但是我的算法fu太弱了,所以我来找你帮忙。
情况是这样的:有一个基于瓦片的地图(以 2D 数组的形式保存),其中包含一个光源和几个站在周围的物品。我想计算哪些瓷砖被光源照亮,哪些在阴影中。
大概的样子的视觉帮助。L 是光源,X 是阻挡光线的物品,0 是点亮的瓷砖,-s 是阴影中的瓷砖。
当然,分数系统会更好,其中由于部分被遮挡,瓷砖可能处于半阴影中。该算法不必是完美的——只是没有明显错误并且相当快。
(当然,会有多个光源,但这只是一个循环。)
有接盘侠吗?
graphics - 没有强烈失真的纹理球体
我在几场比赛中看到了纹理良好的球、行星和其他球形物体,最后一次是在 UFO:后果中。如果您只是将纹理飞溅到纬度/经度中,作为 u 和 w 坐标,您会在极点上得到很多难看的纹理失真。
我可以认为自己是实现具有最小失真的球形贴图的一种方法。通过映射三角形而不是正方形。但我不知道任何算法。如何为这些球体生成顶点和纹理坐标?
另外,我看不到从简单的平面方形地图生成完整球形地图的方法。有没有一些直观的方法可以在没有真正麻烦的情况下绘制这样的地图?
但是,是否有其他算法可以在没有失真或失真最小的情况下渲染球体?
光线追踪和光栅化算法都很有趣。
algorithm - 找到射线和多边形之间交点的最快方法是什么?
和问题所问的差不多。最好用伪代码回答并引用。正确的答案应该重视速度而不是简单。
c# - C# 中的 RayTracer 项目
当我在大学时,我学习了光线追踪(图形合成)的课程,我们有机会用 C++ 编写了一个 3D 光线追踪器。这很有趣,除了我很久以前在“04”的硬盘驱动器崩溃中丢失了我的代码......许多文件丢失了......
是否有我可以在 C# 中使用的不是一行编写的 RayTracer?以正确的面向对象编写的东西,以便我可以扩展它?
任何帮助表示赞赏。
language-agnostic - 编写光线追踪器的文献和教程
我有兴趣找到关于编写光线追踪器的书籍的建议、可以在网络上看到的简单而清晰的光线追踪实现以及关于介绍性光线追踪的在线资源。
理想情况下,该方法将是增量式和教程式的,并从基础开始解释编程技术和基础数学。
programming-languages - 计算机图形学:光线追踪和编程 3D 渲染
我注意到一些顶尖大学正在开设课程,让学生在其 CS 专业中学习与计算机图形相关的科目。可悲的是,这是我的大学没有提供的东西,我真的很想在未来几年的某个时候进入。
我从一些大学找到的一些项目很棒,尽管我最感兴趣的是两件事:
- 光线追踪:
- 我想在未来两年内编写一个 Raytracer。我需要知道什么?我还不是一个出色的程序员(Java、C 和 Prolog 是我今天的主要语言),但我每天都在慢慢学习。此外,我的数学背景并不是那么好,所以任何关于阅读书籍的指针或关于编写这样一个程序的建议都会很棒。我倾向于很快拿起这些东西,所以请随意向我扔参考。
- 编程 3D 渲染模型
- 我看过几个项目,学生们开发了模型并在游戏中使用它们。我用光栅图像制作了几个 2D 游戏,但从未使用 3D 模型。在编程这些模型方面我需要学习什么?如果它有帮助的话,我以前对 3D Studio Max 和 Cinema4D 没问题(尽管每门课程似乎都使用 Maya),但大约四年没有碰过它。
很抱歉发布了如此含糊的问题,说实话,愚蠢的问题。这只是我一段时间以来一直想做的事情,而且作为一个大型项目,我可以在自己的时间里进行开发。