小编Jer*_*ert的帖子

Ray - Octree交叉算法

我正在寻找一种良好的光线八叉树交叉算法,它以迭代的方式为我提供了光线穿过的叶子.我打算在CPU上实现它,因为我还不想潜入CUDA :)

目前,我的Voxel raycaster只在XxYxZ体素的非分层阵列上执行3D DDA(Amanatides/Woo版本).你可以想象,当有很多空的空间时,这是非常昂贵的,如下图所示(更亮的红色=更多的工作:) :):

愚蠢3D DDA的工作量 - 红色=更多工作

我已经发现这个任务有两种算法:自下而上,从叶子向上运行,自上而下,这是基本的深度优先搜索.

我已经从2000年发现了Revelles的算法,称为八元遍历的高效参数算法,看起来很有趣,但是很老了.这是一种自上而下的算法.

最流行的自下而上的方法似乎是K. Sung,用于光线跟踪的DDA八叉树遍历算法,Eurographics'91,North Holland-Elsevier,ISBN 0444 89096 3,p.73-85.问题是大多数DDA八叉树遍历算法都期望八叉树具有相同的深度,这是我不想要的 - 空子树应该只是一个空指针或类似的东西.

在最近关于Sparse Voxel Octrees的文献中,我已经设法通读了(最值得注意的是Laine在SVO上的工作,它们似乎都基于某种GPU实现的DDA版本(Amanatides/Woo风格).

现在,这是我的问题:有没有人有任何实现基本的,没有多余的Ray-octree交叉算法的经验?你会推荐什么?

algorithm graphics traversal voxel octree

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

C++十六进制表示法和按位运算符性能

可能是一个愚蠢的问题,但我有一个C++应用程序,我经常这样做:

x & 0xff
Run Code Online (Sandbox Code Playgroud)

其中x是32位整数.将前导零也放入是否有任何性能优势,所以它是两个32位数之间的AND运算?

x & 0x000000ff
Run Code Online (Sandbox Code Playgroud)

我读到在评估操作之前,任何小于int的操作数都将被提升为int.我想这是一个优化编译器自动完成的,或者我是否通过将那些前导零置于那里来帮助MSVC?

c++ optimization bitwise-operators

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

将参数通过表单传递给Controller(CakePHP)

好的,所以我对CakePHP很新.这是设置:

我有一个Model(预订)和一个控制器(ReservationController).

我正在尝试提供一个简单的add()功能.

请求网址为:www.example.com/reservations/add/3

其中3是此预订所用事件的ID.到现在为止还挺好.问题是,表单的构造如下:

 <h2>Add reservation</h2>
<?php echo $form->create('Reservation');
echo $form->input('first_name');
echo $form->input('last_name');
echo $form->input('email');
echo $form->input('tickets_student'); echo $form->input('tickets_nstudent');
echo $form->end('Add');?>
Run Code Online (Sandbox Code Playgroud)

当我点击发送按钮时,请求网址变为www.example.com/reservations/add/,并且事件ID丢失.

我现在通过抓住控制器中的id来解决它,并将其提供给表单:

// make it available for the form
$this->set('event_id', $eventid);
Run Code Online (Sandbox Code Playgroud)

然后,在形式:

$form->create('Reservation',array('url' => array($event_id)));
Run Code Online (Sandbox Code Playgroud)

它有效,但它让我觉得有点难看.是不是有一种更简单的方法来确保将表单POST操作发送到当前url,而不是没有id的url?

php forms parameters cakephp

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