问题标签 [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 回答
704 浏览

c++ - Directx9 高光贴图

我将如何实现加载纹理以用作一块几何的高光贴图并使用 C++ 在 Directx9 中渲染它?

有什么教程或基本示例可以参考吗?

0 投票
2 回答
847 浏览

directx - 如何将信息发送到 DirectX 10 中的 HLSL 效果?

我想将我的视图向量发送到 ID3D10Effect 变量以计算镜面反射光照。如何从正在运行的 DirectX 程序向 HLSL 发送向量甚至标量值?我想做类似的事情

0 投票
1 回答
2952 浏览

opengl - GLSL/OpenGL 2.1:使用制服的镜面光照

因此,我开始寻求在不使用 OpenGL 照明系统的情况下实现出色的照明。我已经成功实现了 Phong 漫反射照明。镜面反射给我带来了麻烦。

我需要知道我正在使用的 OpenGL 常量占据了哪些空间,因为它们似乎被错误转换,并且会导致照明故障。

通过成功加载和运行 Phong 漫反射着色器,我已经确认我的 C++ 代码没有问题。然而,C++ 代码可能会将无效数据传递给着色器,这是我担心的事情之一。我将粘贴带有注释的着色器以及与着色器直接相关的所有 C++ 代码(尽管我 90% 确定问题出在着色器中)。

在这些图像中,光源是大点,并显示了轴。灯在 y = 0 处围绕 icosphere 旋转。

这是漫反射,所以你知道模型是什么...... 注意我还没有完成每像素... 注意我还没有完成每像素......

这是菲涅耳照明,如源代码所示... 注意被照亮的面是如何面对灯光的,而不是在灯光和相机之间的某个地方 注意被照亮的面是如何面对光线的,而不是在光线和相机之间的某个地方

这是 Blinn-Phong,我必须将其乘以 30... 再次注意被照亮的面是如何指向光源的 再次注意被照亮的面如何指向光源,以及我必须将镜面反射因子 (S) 乘以 30 才能实现这一点

顶点着色器源(从“dirlight.vs”加载)

片段着色器源(从“dirlight.fs”加载)

摘自 C++ 主要初始化...

摘自 C++ 主循环...

0 投票
1 回答
634 浏览

opengl - 如何在OpenGL中获得镜面颜色?

我的代码适用于镜面反射分量以外的所有内容。

似乎忽略了高光,但颜色、纹理坐标、位置等都完全没问题。

这不是使用灯光和材料。固定顶点管道。不幸的是,此时着色器不是一个选项。

glGetError() 在任何时候都不会报告错误。

0 投票
0 回答
1607 浏览

android - 处理 glsl 中的未定义、NaN 或 Inf 值。思考数学错误

我仍然没有摆脱我的 glsl 着色器(GL 2.0)中的一些烦人的错误......我已经搜索了超过 3 周的这个问题的解决方案,但我没有得到任何解决方案。谷歌上有很多例子和解释,但没有一个真正有效。

首先,这是我的片段着色器代码。之后,我将解释究竟是什么问题:

有给出以下变量值,其中:

  • pl_ 是点光值,
  • dl_ 是方向光值,
  • mat_diff 是材质的漫反射值,
  • 还有 mat_spec、mat_elum、mat_shine 用于材质镜面反射、发光和光泽度,
  • N = 正常,
  • V = 视图向量到顶点,
  • L = 光向量到顶点,
  • R = 反射向量,
  • D = 光距,
  • DF = 混合光的距离因子,
  • S = 计算的镜面反射系数,
  • F = L,N 的点积
  • 和 diff,计算出的漫反射/规格矢量的规格矢量和。

现在出现以下问题: Pointlights 本身运行完美。定向灯本身也运行完美。但是它们在一起不会很好地工作。我将解决这个问题:我最多有 4 个点光源和 4 个定向光源。为了测试,我使用了 4 个点光源和 1 个定向光源。

  • 如果我注释掉定向灯的for循环计算,我得到以下结果: 禁用定向灯,启用点灯
  • 如果我注释掉点光源的 for 循环,我会得到以下结果: 点光源被禁用,方向灯被启用
  • 如果我启用了两个 for 循环,则会发生以下情况: 两种光源类型均已启用

定向光似乎完全被忽略了。汽车仅由点灯照明。

所以,我发现:如果我改变 for 循环的顺序,点灯 -> 定向灯,而不是 dirlights -> 点灯,效果会交换:点灯被忽略,定向灯被计算。

我也发现,这个问题一定是:pow() 函数或除以零,但是:如果我注释掉以下代码行:

我可以得到以下结果:

spec += 注释掉的行

-> 漫反射颜色通常为点光源和定向光源计算!

所以我想到了如何消除这个问题,因为我认为 0 power by 0 会导致数学错误。也除以零....如何避免未定义的值?

isnan() 或 isinf() 函数似乎在 android-glsl 中不存在。

安迪解决方案或提示我可以做得更好,这会奏效吗?如果它可以帮助一点点,我会很高兴任何答案。这让我很生气,因为 3 周。非常感谢帮手!:)

有关代码的更多信息: https ://github.com/Chrise55/Llama3D

克里斯

0 投票
1 回答
2300 浏览

glsl - glsl (lwjgl) 中的 Phong 镜面反射光照

我目前正在尝试使用 glsl 和使用 Phong 模型在球体上制作镜面光照。

这就是我的片段着色器的样子:

sunPosition 没有移动并设置为值 (2.0f, 3.0f, -1.0f)。

问题是如果镜面反射计算正确,图像看起来什么都不是。

这是它的样子:http: //i.imgur.com/Na2C6.png

我在此代码中没有任何环境光/发射光/消散光的原因是因为我想让镜面光部分首先工作。

感谢您的帮助!

编辑:@Darcy Rayner 那不死者帮助了很多艰难,它似乎仍然是不正确的东西......

当前代码如下所示:

顶点着色器:

片段着色器:

球体看起来像这样:

-->图片链接<--

太阳位置: sunPosition = new Vector(12.0f, 15.0f, -1.0f);

0 投票
1 回答
1327 浏览

macos - Mac OS X 10.6 中的 OpenGL 对象有光泽/有光泽,但不是 10.5。为什么?

我为 Mac OS X 10.5 及更高版本编写了一个 OpenGL 屏幕保护程序,它显示了一个使用行进立方体构建的旋转心脏。它在我运行 Snow Leopard (10.6) 的黑色 13.3" 开发 Macbook 上运行良好,美观且有光泽。

但是当我在运行 leopard (10.5) 的较新的 Macbook Pro 上试用它时,心脏并不光滑。它看起来好像只用环境光/漫射光照亮,但没有镜面光。就好像我将光的镜面反射分量设置为 0。较新的 Macbook 有一个 Nvidia 显卡。运行 10.6 的较旧版本具有 Intel XMA3100。

这是我的 OpenGL 初始化代码。心脏是使用行进立方体创建的,我也在计算法线向量。

实际的绘图代码如下所示:

任何想法为什么镜面照明差异?某些显卡根本不支持镜面照明吗?任何指针都非常感谢。

0 投票
1 回答
2606 浏览

opengl - 为什么我的漫反射/镜面照明不起作用?

我有一个 OpenGL 程序正在运行,它显示几何图形,但它都是“平坦的”,一种灰色调,没有漫反射阴影或镜面反射:

没有阴影的托里

图中是三个花环,每个花环由四边条制成。我们应该看到阴影,但我们没有。我究竟做错了什么?

这是我设置顶点和法线的代码(draw_torus()调用以构建显示列表):

顶点的顺序有问题吗?

这是构建显示列表的 init 函数部分:

setMaterial() 只是在哪里:

这是在初始化期间也完成的照明:

这是在绘制函数中调用显示列表的地方:

这个“glx hack”的完整 .c 源文件在这里。万一有所不同,此代码位于xscreensaver的上下文中。

0 投票
1 回答
5066 浏览

performance - Matlab计算向量的反射

我必须计算图像的镜面高光(phong)。给出了法线向量和“光向量”。现在我必须计算光反射 - 是否有一个有效的 matlab 函数可以将光矢量翻转到法线矢量上以获得反射光矢量?

I规格= k s * I * (r * v) p

其中: l是光向量
n是表面的法线向量
r是反射向量
v是从反射点到观察者的向量
p是光泽度

0 投票
1 回答
1450 浏览

three.js - 导出凹凸贴图和高光贴图

我已经看到了新的 MeshPhongMaterial Bump 和 Specular 高光,迫不及待地想将它们加入我的游戏引擎。目前我正在使用 python 转换器将 OBJ 文件转换为 .js 文件。然而,51 版出口商似乎无法处理这些材料。

我还担心我的大多数网格都有 2 种或更多材料,并且正在使用 MeshFaceMaterial。

更改为 MeshPhongMaterial 会破坏多个纹理吗?我应该使用不同的出口商来实现这一目标吗?使用凹凸贴图和高光贴图从 .3ds 文件转换的最佳工作流程是什么?我应该等待一段时间让这个话题平静下来吗?