标签: raytracing

光线追踪光泽反射:采样光线方向

我正在为 iPad 编写光线追踪器。现在我正在尝试为对象添加光泽反射。我该如何实施?我在网上阅读了一些文档:

http://www.cs.cmu.edu/afs/cs/academic/class/15462-s09/www/lec/13/lec13.pdf http://www.cs.cornell.edu/courses/cs4620/2012fa /讲座/37raytracing.pdf

如果我理解正确而不是像标准反射那样跟踪单条光线,我必须在随机方向上跟踪 n 条光线。我如何为每条射线获得这个随机方向?我如何生成这些样本?

raytracing

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

光线跟踪盒交叉点

所以我回来了另一个光线追踪问题.我的代码渲染球体都很好,花花公子,但立方体并没有真正起作用.我正在使用此代码来测试交叉点:http://pastebin.com/qgm6vpdx(这是一个递归函数,t是到交点的距离)边界框定义为:

Cube* c1 = new Cube;      
c1->Corner1 = Vec3(100, 100, 100);      
c1->Corner2 = Vec3(200, 200, 200);
Run Code Online (Sandbox Code Playgroud)

我已经确认相机不在立方体内.现在,唯一的问题是整个屏幕显示为绿色(指定给立方体的颜色)

我不认为我正在做正确的立方体交叉点,任何人都可以证明我的代码?

c++ raytracing cubes vector-graphics

0
推荐指数
1
解决办法
1万
查看次数

2D屏幕坐标到3D位置Directx 9/Box选择

我想在3d世界中实现盒子选择.基本上,单击,按住鼠标,然后取消鼠标,获取一个框,然后选择框.首先,我想弄清楚如何获得3d中点击的坐标.

我有raypicking,那是没有得到正确的坐标(得到起源和方向).无论屏幕的X/Y是什么(尽管方向不同),它都会保持返回相同的原点.

我也尝试过:

D3DXVECTOR3 ori = D3DXVECTOR3(sx, sy, 0.0f);
D3DXVECTOR3 out;
D3DXVec3Unproject(&out, &ori, &viewPort, &projectionMat, &viewMat, &worldMat);
Run Code Online (Sandbox Code Playgroud)

它得到了同样的东西,无论坐标是什么,坐标都非常接近(并且是错误的).这几乎就像是回归眼睛,而不是真实的世界坐标.

如何使用directx 9c将2D屏幕坐标转换为3d?

directx 3d graphics raytracing projection-matrix

0
推荐指数
1
解决办法
3845
查看次数

函数式编程中的构造性实体几何

我正在一个haskell程序中实现CSG.当我在OOP lahguage中做到这一点时,我受到了复合赞助人的启发.

我有一个抽象类"对象",一些具体对象(球体,平面等),以及一个具体的类"CompositeObject",其中包含一个运算符和两个指向Object的指针.

为了在Haskell中以这种方式实现CSG树,我正在考虑递归数据类型:

data Shape = Sphere (..some types here..)
           | ..other primitive objects..
           | Composite Shape Op Shape 
Run Code Online (Sandbox Code Playgroud)

然后我通过模式匹配在对象上定义函数.这里的问题是所有对象都必须在此模块中.所有物体都集中在整体中.

我认为有一个对象的类型类是一个好主意:

class Shape a where
  intersection :: Ray   -> a -> [Points]
  normal       :: Point -> a -> Vector
  ...
Run Code Online (Sandbox Code Playgroud)

现在我为Sphere,plane,cilinder等定义实例.

但复合对象呢?如何创建一个由两种类型构造的类型,类函数取决于构造函数,或类似的东西?

haskell functional-programming raytracing typeclass algebraic-data-types

0
推荐指数
1
解决办法
332
查看次数

光线追踪器根据相机角度扭曲立方体?

本质上,发生的情况是我的光线追踪器渲染的 3D 立方体出现了一些奇怪的扭曲,随着相机向上移动,这种扭曲会继续恶化,即使立方体位于屏幕上的同一位置。

代码位于http://pastebin.com/HucgjRtx

这是输出的图片:

http://postimg.org/image/5rnfrlkej/

编辑:问题解决了,因为我只是错误地计算了向量的角度。我发现的最好方法是根据 FOV (Z) 当前像素 X 和当前像素 Y 创建一个向量,然后对该向量进行归一化。

java raytracing

0
推荐指数
1
解决办法
123
查看次数

一个周末的光线追踪 - 折射问题

我目前正在一个周末通过光线追踪来熟悉 Rust。添加介电材料(玻璃)让我有些头痛:我的折射没有上下翻转! 1

这是我用于 Vector 结构的代码:

impl Vec3 {
    pub fn new(x: f64, y: f64, z: f64) -> Vec3 { Vec3 {x, y, z} }
    pub fn x(&self) -> f64 { self.x }
    pub fn y(&self) -> f64 { self.y }
    pub fn z(&self) -> f64 { self.z }
    pub fn length_squared(&self) -> f64 {
        self.x * self.x + self.y * self.y + self.z * self.z
    }
    pub fn length(&self) -> f64 { self.distance(&Vec3::default()) }
    pub fn unit_vector(&self) -> …
Run Code Online (Sandbox Code Playgroud)

raytracing rust

0
推荐指数
1
解决办法
787
查看次数

C++ 中的光线追踪错误颜色计算

我正在实现光线追踪框架,但遇到一些错误 在此输入图像描述

图像应该看起来像这样,但在我的例子中看起来像: 在此输入图像描述

正如您所看到的,球体有一些黑点并且不光滑。知道这个错误可能来自哪里吗?

计算颜色,在这里我创建了所有光线的反弹。我将 epsilon 应用于光线:

vec3 ComputeColor(const Ray& ray, const world& scene, int depth, float pH, float pW) {
    if (depth > scene.maxDepth)
        return vec3(0.0f);

    const Object* hitObject;
    vec3 hitPoint;
    if (!Intersection(ray, scene, hitObject, &hitPoint))
        return vec3(0.0f);

    vec3 color = hitObject->materials.ambient + hitObject->materials.emission;

    for (const PointLightSource& light : scene.lights) {
        Ray lightRay;
        if (light.type == PointLightSource::point) {
            lightRay = Ray(light.pos, glm::normalize(hitPoint - light.pos));
        }
        else {
            lightRay = Ray(light.pos,glm::normalize(- lightRay.direction));
        }
        const float epsilon = 1e-4;
        lightRay.o = lightRay.o …
Run Code Online (Sandbox Code Playgroud)

c++ raytracing

0
推荐指数
1
解决办法
85
查看次数

使用javascript进行自定义目的

我正在写一个光线跟踪器作为我的完整3D引擎的一部分.我打算使用javascript作为脚本语言而不是编写自己的脚本语言.问题是我该如何使用它?顺便说一下,光线跟踪器和UI是用C#编写的.

javascript c# 3d raytracing

-1
推荐指数
1
解决办法
591
查看次数