问题标签 [npr]

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.

0 投票
3 回答
2536 浏览

glsl - NPR GLSL 教程

任何人都有关于使用 GLSL 进行非照片真实感渲染的教程列表吗?我看过关于 GLSL 的书籍和 NPR 的书籍,但很少有关于使用 GLSL 进行 NPR 的书籍/教程。(我想用 GLSL 来做,因为我想要实时)。

谢谢!

0 投票
2 回答
1644 浏览

java - 数组中字符的组合与java中的公式nPr

有人可以告诉我如何使用公式 nPr 实现存储在数组中的字符值的组合。例如,如果我有一组 {a,b,v,f} 并且我想一次选择 2 个,那么答案应该是 {a,b} {a,v} {a,f} {b,v} {b,f} {v,f}。

或任何链接,如果此问题在网络上有解决方案。谢谢。

0 投票
1 回答
1259 浏览

npr - 如何计算 3D 网格中的主曲率方向?

在非真实感渲染中,线条方向对效果很重要。为了达到良好的效果,我想将纹理旋转到主曲率方向。

我有 3D 网格模型(由三角形集组成)。我想估计模型中每个顶点的主曲率方向。你可以回答这个问题或者告诉我在哪里可以找到方法(比如发论文)。

0 投票
1 回答
1209 浏览

opengl - 使用 GLSL 着色器绘制线条,如何在片段着色器中进行绘制?

我读过一些论文,上面说他们可以检测轮廓、边缘、脊并使用 GLSL 着色器画一条线。但是在实现中,他们说他们“访问”了相邻的像素并做了一些事情。这怎么可能?

这是有问题的论文 http://www.google.co.th/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CDEQFjAC&url=http%3A%2F%2Fcg.postech.ac.kr% 2Fresearch%2Fline_drawings_via_abstracted_shading%2Fline-drawing-s07.pdf&ei=I5GeUO-pMcKzrAf8_4DICw&usg=AFQjCNE7D9nMVKWvYwvNUaHo5S1ZfrG10A&sig2=CmnD6hbD6-0EYkvv-Bj3LQ

它在第 3 节,渲染线。他们最初说的是 GLSL 着色器,但后来他们突然谈到对像素组进行采样。

我正在研究渲染后没有图像处理的非真实感渲染。因此,如果在 GLSL 着色器中完成,GPU 的使用可能是最佳的。

0 投票
1 回答
95 浏览

c++ - 奇怪格式的 GLbyte 数据——NPR 技术

我正在研究 NPR 技术的边缘检测算法。我计划只使用高斯差来找到边缘。

我想我会复制当前屏幕,然后分析像素并重新着色,以便我有一张地图来绘制边缘。

到目前为止,这是我的屏幕复制逻辑:

看到我只是抓住了所有东西,我认为没有必要复制 alpha 组件。rd 是我的渲染设备,数据输出如下:

我不知道如何处理。我尝试使用 读取如下所示的值,float color但这并没有真正帮助我,因为我真的不知道这意味着什么。我正在读取的每种颜色是像素的强度值,还是需要连续读取三个数据点才能获取所有通道?

有什么好的方法来获取屏幕上显示的数据,修改它,然后重绘它?

0 投票
0 回答
1726 浏览

three.js - 使用自定义着色器进行 NPR 边缘检测

我正在尝试在着色器中实现边缘检测,以在 Three.js 中实现非逼真的“轮廓”效果,遵循以下方法:http: //ar3f.in/goochShading.html。我主要对深色轮廓感兴趣,而不是 Gooch 阴影。我了解此代码中采用的方法,即首先使用对象空间法线渲染模型,然后对该图像使用 Canny 边缘检测(经过一些过滤),最后反转以获得轮廓图像。然后将该轮廓图像与场景的常规(“漫反射”)渲染相乘。

然而,在这个例子中,为了实现两种渲染(一种用于边缘,一种用于漫反射图像),作者复制了主要几何图形并在两个不同的场景中创建了两个网格,以便分别应用两种不同的材质(一种用于仅基于法线进行渲染,以及使用 Gooch 着色进行渲染)。这种方法在我的应用程序中并不是很有吸引力,因为几何图形非常大并且动态更新。没关系,我想我只需要使用 aoverrideMaterialRenderPass绘制所有带有 a 的对象NormalShader(如下)。不幸的是,这不起作用,因为我的一些对象是THREE.Lines 或其他任何东西并且没有正常属性,产生如下错误:

render我尝试在每次调用之前使用这样的代码隐藏这些对象:

但我不断收到同样的错误,我不知道如何追踪导致它们的对象。

所以这是我的问题:是否有一种好方法可以过滤掉没有特定属性(例如法线)的对象,即使某些对象是MeshesGeometry而不是BufferGeometry

谢谢你的帮助!

编辑:我已经删除了关于替代方法的内容,并在这里开始了一个单独的问题:使用自定义着色器渲染“硬”边缘


NormalShader的代码,供参考: