问题标签 [specular]

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 投票
1 回答
54 浏览

r - 从比较两列的数据框中删除列交叉信息的行

当我试图根据配对基因条件合并不同的基因表达结果时,这是我特别的噩梦之一,这是我合并的数据框:

关键是我不想删除重复的行,当然没有,我想删除那些在 knowngene1 和 knongene2 中也改变了 knowngene 访问器的行。让我举个例子,第一个是我要保留的行

这些下一行对我来说是相同的,实际上第一行是我想要保留的那个的镜面图像,尽管它的表达式值或多或少在相同的范围内

所以这个想法是只保留我看到的第一个并删除下一个。你有什么想法?

0 投票
4 回答
3387 浏览

opengl - 增加镜面反射会减少 OpenGL 中的光照

我在我的 opengl 4.3 着色器中更改镜面反射功率分量时遇到问题。当我使用介于 0-10 之间的光泽度值时,高光效果很好,但是,随着该值的增加以使材质更发光,光照强度会降低。这是我的代码:

因此,如果将 shininess 值增加到 50 左右,则根本没有光照。顺便说一句,在这段代码中,我只显示镜面反射来调试问题。

[编辑] 很抱歉解释中缺乏细节,我附上了一些将镜面反射值从 1 更改为 7 的结果的屏幕截图。如您所见,随着镜面高光尺寸的减小(这就是我想要的),灯光也会变暗(这不是我想要的)。大约 10 分钟后,它会完全变黑。

顺便说一句,我完全在像素/片段着色器中执行此操作。

我还添加了来自我的 directx 11 测试引擎的屏幕截图,使用完全相同的代码进行镜面光照,但光泽系数为 100。

specLighting = pow(max(dot(N.xyz, h), 0.0),1.0);

specLighting = pow(max(dot(N.xyz, h), 0.0),2.0);

specLighting = pow(max(dot(N.xyz, h), 0.0),3.0);

specLighting = pow(max(dot(N.xyz, h), 0.0),5.0);

specLighting = pow(max(dot(N.xyz, h), 0.0),7.0);

directx 11 高光

直连 11:

0 投票
1 回答
1965 浏览

opengl-es-2.0 - opengl es 2.0 镜面光照

这是我在这里的第一篇文章,但我正在努力解决这个问题。下面的代码是我的片段着色器,用于一个非常简单的 Opengl es 2.0 应用程序。顶点着色器正在做所有的日常工作。问题在于镜面高光,它执行的计算似乎是基于每个顶点,而不是每个片段。如果有人能向我解释为什么会发生这种情况,我将不胜感激。谢谢。

顺便说一句,我很抱歉代码效率低下,我只是回到照明的基础知识来尝试跟踪这个问题。

0 投票
1 回答
1796 浏览

three.js - 如何在三个 js 中的自定义着色器上使用高光贴图创建高光?

我正在使用 Three.JS 在 WebGL 中创建一个地球,到目前为止,我有一个具有昼夜纹理和大气的地球。现在要完成它,我想在我的地球上添加一个仅在水部分显示的高光。现在,我已经有了一个高光贴图,但我似乎无法将它全部拼凑起来。

由于地球/夜晚/大气的原因,我在自定义着色器中做所有事情,并且我读到我还必须在这个等式中包含镜面反射计算,因为 Three.JS 不能堆叠多个着色器。

这是我的着色器,我只停留在镜面反射部分:

到目前为止,它只是将高光贴图添加为地球上的纹理,但就像我提到的,我想使用这张 BW 图像来显示某种高光。谁能指出我正确的方向?

编辑:

好吧,我用以下代码实现了整个映射:

现在剩下的唯一事情是如何使高光点变小......对此有什么想法吗?

编辑2:

好的,我终于通过调整一些参数来实现它:

作为参考,我的 sunDirection 是 -2, 0.8, 1,我的 specularDirection 是 -15, 10, 22.5。

0 投票
1 回答
2928 浏览

opengl - 来自 GLSL phong 着色器的奇怪镜面反射结果

我正在尝试在 GLSL 中实现 phong 着色,但镜面反射组件存在一些问题。

奇怪的镜面效果

绿光是镜面反射分量。光(点光)在平面上方的圆圈中传播。镜面高光总是向内指向 Y 轴,光线围绕 Y 轴旋转,并向图像中看到的漫反射扇形散开。它似乎完全不受相机位置的影响,我不确定我哪里出错了。

顶点着色器代码:

片段着色器代码:

请注意,在顶点着色器中看到的 normalTransformMatrix 是模型视图矩阵的逆转置。

我正在设置一个从顶点位置到灯光、到相机和反射矢量的矢量,所有这些都在相机空间中。对于漫反射计算,我采用光矢量和法线矢量的点积,对于镜面反射分量,我采用反射矢量和视图矢量的点积。也许我对算法有一些基本的误解?

起初我以为问题可能是我没有对插值后进入片段着色器的法线进行归一化,但是添加一条线进行归一化并不会影响图像。我不知道在哪里看。

我知道网站上有很多 phong shading 问题,但每个人似乎都有一个有点不同的问题。如果有人能看出我哪里出错了,请告诉我。任何帮助表示赞赏。

编辑:好的,现在可以工作了!正如 jozxyqk 下面建议的那样,我需要对我的顶点位置进行 mat4*vec4 操作,否则会丢失翻译信息。当我第一次进行更改时,我得到了奇怪的结果,直到我意识到我在将 lightPosition_cameraSpace 传递给着色器之前在我的 OpenGL 代码中犯了同样的错误(错误是我将视图矩阵转换为 mat3用于计算,而不是将光位置矢量设置为 vec4)。一旦我编辑了这些行,着色器似乎工作正常!感谢您的帮助,jozxqk!

0 投票
1 回答
2330 浏览

opengl - OpenGL 闪烁像素神器

我正在尝试在基于体素的网格上实现环境遮挡,并在面部边缘获取这些闪烁的白色像素:

闪烁的像素

这是我的片段着色器:

light如果我从中删除,gl_FragColor vec4那么工件就会消失。该light值是根据环境光遮挡值 ( normal.w) 和镜面反射分量计算得出的。似乎是导致问题的镜面反射。为什么角落和边缘会突然像这样闪烁?当网格旋转时,白色像素会闪烁。但在较大的表面上,镜面高光看起来很正常,并跟随光源而不是闪烁。

0 投票
1 回答
2143 浏览

c++ - opengl shader 定向灯镜面反射随距离增加

标题说明了一切......使用内置照明系统的opengls,镜面光不会随着与对象的距离而增加或减少,但通过着色器实现会增加或减少。

顶点着色器:

片段着色器:

在此处输入图像描述 在此处输入图像描述

正如您从两张图像中看到的那样,镜面光占用的表面积越大,相机离飞机越远。在我使用opengls内置照明的测试中,这不会发生。有没有办法来解决这个问题?我是照明新手,这对于定向光源来说可能是正常的吗?谢谢您的帮助!

我还将我的 eyePos 制服设置为我的 cameraPos。我不知道这是否有帮助。

0 投票
1 回答
182 浏览

actionscript-3 - 用于 3D 镜面反射的反射光逻辑

我正在尝试向 Stage3D 游戏添加镜面反射,它几乎可以正常工作,但我认为我对实际反射阶段发生的数学运算没有足够好的把握。
我有一个入射光矢量,我的脸是法线;我知道如何处理生成的反射向量(归一化,然后用指向播放器“相机”的归一化向量进行点积)但是将原始光向量反射到面部的 AGAL 操作码是什么?我无法理解这一点。任何帮助表示赞赏...

0 投票
2 回答
3066 浏览

opengl - 镜面光照出现在物体的正面和背面

我正在编写一个 Phong 着色的小测试,并且正在将我的头撞在砖墙上,试图让镜面反射组件工作。它似乎可以正常工作,除了镜面光同时应用于对象的前部和后部。(对象本身是透明的,面在 CPU 端手动排序。)

请注意,漫反射组件工作得很好(仅显示在面向光源的一侧)——我认为这似乎排除了法线到达片段着色器的问题。

据我了解,镜面反射分量与眼睛矢量和反射光矢量之间的角度的余弦成正比。

为了让事情变得超级简单,我的测试代码尝试在世界空间中执行此操作。相机位置和光矢量分别被硬编码(对不起(0,0,4)(-0.707, 0, -0.707)。因此,眼向量为(0,0,4) - fragPosition

由于模型矩阵只执行旋转,顶点着色器只是简单地通过模型矩阵变换顶点法线。(注意:这不是很好的做法,因为许多类型的变换不保留法线正交性。通常对于法线矩阵,您应该使用模型矩阵左上角 3x3 的逆转置。)为了简单起见,片段着色器在单个浮点颜色通道上运行,并跳过镜面反射指数(/使用指数 1)。

顶点着色器:

片段着色器:

我在这里找不到错误;谁能解释为什么镜面反射分量出现在物体的背面和面向光的一侧?

非常感谢。

0 投票
1 回答
514 浏览

c++ - 镜面光出现在两侧

我有一个非常奇怪的高光(phong 光模型)光行为。它似乎出现在所有物体的两侧。有谁知道可能是什么问题?实际计算似乎没问题,因为我可以看到光线随着物体旋转而改变其位置。

顶点着色器

在此处输入图像描述