首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C opengl:我可以在gpu中计算法线吗?(CUDA)

C opengl:我可以在gpu中计算法线吗?(CUDA)
EN

Stack Overflow用户
提问于 2012-10-22 21:29:58
回答 2查看 610关注 0票数 1

我正在尝试访问内核中的上一个和下一个索引坐标。

例如: int idx = blockDim.x Idx.x*blockDim.x Dim.x+ threadIdx.x;

然后posidx.x,posidx.y,posidx.z会给出一个点的当前坐标。但不能访问其他两个。我正在尝试使用CUDA计算GPU级别的变化三角形的法线。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-16 07:25:22

在GPU上计算法线的难易程度取决于网格拓扑。

使用GPU三角形列表拓扑很容易计算网格的法线:每个三角形使用一个GPU线程。这将导致高度定期的读取和写入,并适用于CUDA中任何有效的块和线程配置。不幸的是,三角形列表拓扑不是很有用(对于初学者来说,除非采用一些额外的处理,否则它将是扁平阴影的)。

使用常用的三角形条形拓扑计算网格的法线要困难得多。问题是顶点在多个三角形中使用,因此您必须通过组合多条三角形法线来累积每个顶点法线的加权平均值。使用每个三角形一个GPU线程意味着多个顶点规范将“同时”受到多个GPU线程的影响。或者,使用每个顶点一个GPU线程意味着需要引用该顶点的三角形列表,然后需要读取三角形(成对的附加顶点),以便可以计算顶点范数...这很难,但也不是不可能。

最后,如果您的模型使用索引顶点,这将施加额外的半随机查找,这可能会导致问题。这个问题可以通过空间分区来解决。

票数 0
EN

Stack Overflow用户

发布于 2012-10-22 23:10:09

你仍然可以做idx+1,idx+2,可以访问所有的共享内存

为了获得最好的效率,你必须在如何将作业划分成块/线程等方面稍微小心一点,这样附近点的内存就在同一个内核上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13012518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档