问题标签 [gouraud]

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 投票
2 回答
5480 浏览

algorithm - 从三角形集计算顶点法线以进行 Gouraud 着色的最有效算法

我们得到一组三角形。每个三角形是三个点。每个点都是实数的三元组。我们可以计算每个三角形的表面法线。然而,对于 Gouraud 着色,我们需要顶点法线。因此我们必须访问每个顶点并查看共享该顶点的三角形,平均它们的表面法线,我们得到顶点法线。

实现这一目标的最有效算法和数据结构是什么?

一个天真的方法是这样的(伪python代码):

有没有更有效的方法?

0 投票
2 回答
8744 浏览

c++ - 无法让 OpenGL 中的 Gouraud 着色工作

我正在尝试使形状由于光源而具有一些阴影,但我希望形状都是一种颜色。

我的问题是,无论我多么努力,我似乎​​都无法在单一颜色模型上获得任何阴影。我已将模型简化为单个三角形,以使此示例更清晰:

我对OpenGL真的很陌生,所以我希望它很简单。因为我记得设置我的法线,所以我不确定还有什么问题。

最终目标是为我的课程使用 Gouraud 着色(然后是纹理)渲染一张脸,但是我们几乎只能自己弄清楚 OpenGL(1.4 - 课程要求),而且我们不允许使用着色器。我正在尝试创建类似于这张图片的东西(取自谷歌): 在此处输入图像描述

和我的三角形。

0 投票
1 回答
92 浏览

opengl - 组成 ADS (Phong/Gourang) 组件

我有下面的 Phong 光照模型的基本着色器代码。我已经测试了漫反射、环境光和镜面光,它们产生了正确的结果。当谈到在最后一行中组合它们时,我不断得到一种看起来像环境照明的效果。有人知道它有什么问题吗?

0 投票
1 回答
194 浏览

opengl - GLSL 1.5 无法获得颜色输入

我只想在我的对象上使用一些不同的颜色做一个简单的 Gouraud 着色。基本上我的问题是,我无法将颜色值输入着色器,它只会呈现黑色。如果我在着色器中定义一个向量作为整个对象的颜色,它就可以正常工作。

主程序:

着色器:

顶点

分段

0 投票
2 回答
1352 浏览

opengl - 在 gouraud shading 中,什么是 T-junction 问题以及如何用 OpenGL 演示它

我在 Gouraud 着色部分注意到这里,它说“具有相邻多边形的 T 形路口有时会导致视觉异常。一般而言,应避免使用 T 形路口”。

看起来T-junction是下图中的三个表面共享边缘,并且点A可能具有不同的法向量,因为它属于不同的表面。

在此处输入图像描述

但是当T-junction发生时会产生什么影响以及如何使用OpenGL来实现呢?我尝试为每个矩形的每个顶点设置不同的法线,并在场景中放一盏灯,但是,在连接点 A 处我没有看到任何奇怪的东西。

这是我的代码:

点光源在 (0, 0, 10) 以及相机中。我认为下面的结果没有视觉异常。也许法线应该有点特别?

我做错了什么吗?谁能给我一些提示来实现这一点?

在此处输入图像描述

0 投票
1 回答
514 浏览

graphics - 通过示例了解小规模 Gouraud 着色

我正在上计算机图形学课程,刚刚通过了关于 Phong 和 Gouraud 着色的讲座。我真的不明白在说什么,所以我转向教科书进行澄清,并找到了一个可能对我有所帮助的可行示例。我想和大家讨论这个例子。

该示例说:

顶点具有以下 RGB 颜色:

点 (a.) (30,30) 和点 (b.) (45, 30) 的 RGB 颜色是什么?

为一个)

我假设 A 和 B 的 R 和 B 值 - 它们是相同的,然后,因为 30 正好在 10 和 50 之间……取 A 和 B 对 G 的颜色值的平均值。

所以 (25, 135, 30) 是点的颜色值。我将在下一个问题中使用这个值——所以我们称之为 M 点。

对于 (b)

我们唯一拥有 30 作为 y 坐标的点是 C。点 M 位于 (30,30)。所以,因为 (30,30) 和 (60,30) 具有相同的 R 和 B 值......我假设它们对于 (45, 30) 是相同的。同样,我们只是平均 G 值,因为 45 正好在 30 到 60 之间。

所以答案是 (25, 125, 30)。

所以我的问题是 - 这是正确的吗?如果是这样 - 这就是插值的意思吗 - 这种......平均?Phong 着色与此有何不同?

0 投票
1 回答
599 浏览

graphics - 如何进行高卢着色?

有人可以向我解释 Gouraud 阴影吗?我可以继续谷歌“gouraud shading”,但这对我来说没有多大意义。我有 3 个具有 (x, y) 位置和 int[r,g,b] 颜色的顶点。我想线性插值(不确定这意味着什么)顶点的颜色以在三角形中着色。这样做的逻辑是什么?

0 投票
1 回答
120 浏览

opengl - How are colour-values interpolated in a Gouraud-shaderscript?

The gouraud-shader computes lighting at the corners of each triangle and linearly interpolates the resulting colours for each pixel covered by the triangle.

How would you program this certain interpolation (in GLSL-code) ?

Do you even have to code this yourself or does OpenGL interpolate (internally) single-handedly ?

0 投票
2 回答
1139 浏览

c++ - OpenGL:在给定包含总光的叉积的情况下,如何渲染单个 RGB 值?

我一直在自己实现 Gouraud 风格的着色模型,我已经让它的其余部分按照我想要的方式工作,但我遇到的问题是它只显示白光。calc_color 函数是执行此操作的地方。颜色变量表示该给定位置的 R、G 和 B 值的总光。我一直将颜色分配给所有三个数组,只是为了正确实现阴影,但现在已经完成,我想找出一种从总光值中提取 R、G 和 B 值的方法。

我尝试了几种不同的方法,例如获取总光,并获取一定百分比的 Light1r 等值,但它总是看起来很奇怪或太亮。

0 投票
0 回答
234 浏览

three.js - 为什么three.js关于gouraud插值不一致?

我想THREE.BoxBufferGeometry用一个简单的THREE.MeshLambertMaterial. 该材质应该使用 Lambert 照明模型来选择每个顶点的颜色(确实如此),然后使用 Gouraud 着色在每个面上产生平滑的渐变。

Gouraud 部分没有发生。相反,立方体的每个面都用一种单一的纯色着色。

我尝试了各种其他BufferGeometry的,并得到不一致的结果。

例如,如果我改为制作IcosahedronBufferGeometry,我会遇到同样的问题:每张脸都是一个单一的纯色。

另一方面,如果我制作SphereBufferGeometry,则 Gouraud 存在。

但是,如果我使用 a 制作立方体PolyhedronBufferGeometry,则不会出现 Gouraud 阴影,除非我将细节设置为0.

我知道BufferGeometry方法computeFaceNormals()computeVertexNormals(). 法线在这里非常重要,因为它们分别用于确定每个面和顶点的颜色。但是,虽然它们对 有帮助,但Icosahedron它们对 没有影响Box,无论它们是否存在,只有一个存在,或者两者都存在于两个可能的顺序中。

这是我希望工作的代码:

我应该得到一个立方体,其面(真实的三角形)用渐变着色。首先,应该计算面法线,然后通过平均由它们形成的面的法线来计算顶点法线。这是一个三角形双锥,其上应用了正确的 Gouraud 着色:

正确的阴影

但是上面的代码却产生了这个:

不正确的阴影

three.js 绝不会将任何错误或警告记录到控制台。

那么这里发生了什么?我能想到的唯一解释是,Box它实际上由 24 个顶点组成,立方体的每个角有 3 个,并且它们形成的面使得每个顶点的计算法线是最多两个指向同一方向的面的平均值。但是我在任何地方都找不到写下来的内容,并且该解释不适用于Polyhedron代码中明确指定的顶点和面。