问题标签 [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.
c++ - Directx9 高光贴图
我将如何实现加载纹理以用作一块几何的高光贴图并使用 C++ 在 Directx9 中渲染它?
有什么教程或基本示例可以参考吗?
directx - 如何将信息发送到 DirectX 10 中的 HLSL 效果?
我想将我的视图向量发送到 ID3D10Effect 变量以计算镜面反射光照。如何从正在运行的 DirectX 程序向 HLSL 发送向量甚至标量值?我想做类似的事情
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++ 主循环...
opengl - 如何在OpenGL中获得镜面颜色?
我的代码适用于镜面反射分量以外的所有内容。
似乎忽略了高光,但颜色、纹理坐标、位置等都完全没问题。
这不是使用灯光和材料。固定顶点管道。不幸的是,此时着色器不是一个选项。
glGetError() 在任何时候都不会报告错误。
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() 函数或除以零,但是:如果我注释掉以下代码行:
我可以得到以下结果:
-> 漫反射颜色通常为点光源和定向光源计算!
所以我想到了如何消除这个问题,因为我认为 0 power by 0 会导致数学错误。也除以零....如何避免未定义的值?
isnan() 或 isinf() 函数似乎在 android-glsl 中不存在。
安迪解决方案或提示我可以做得更好,这会奏效吗?如果它可以帮助一点点,我会很高兴任何答案。这让我很生气,因为 3 周。非常感谢帮手!:)
有关代码的更多信息: https ://github.com/Chrise55/Llama3D
克里斯
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);
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 初始化代码。心脏是使用行进立方体创建的,我也在计算法线向量。
实际的绘图代码如下所示:
任何想法为什么镜面照明差异?某些显卡根本不支持镜面照明吗?任何指针都非常感谢。
opengl - 为什么我的漫反射/镜面照明不起作用?
我有一个 OpenGL 程序正在运行,它显示几何图形,但它都是“平坦的”,一种灰色调,没有漫反射阴影或镜面反射:
图中是三个花环,每个花环由四边条制成。我们应该看到阴影,但我们没有。我究竟做错了什么?
这是我设置顶点和法线的代码(draw_torus()
调用以构建显示列表):
顶点的顺序有问题吗?
这是构建显示列表的 init 函数部分:
setMaterial() 只是在哪里:
这是在初始化期间也完成的照明:
这是在绘制函数中调用显示列表的地方:
这个“glx hack”的完整 .c 源文件在这里。万一有所不同,此代码位于xscreensaver的上下文中。
performance - Matlab计算向量的反射
我必须计算图像的镜面高光(phong)。给出了法线向量和“光向量”。现在我必须计算光反射 - 是否有一个有效的 matlab 函数可以将光矢量翻转到法线矢量上以获得反射光矢量?
I规格= k s * I * (r * v) p
其中:
l
是光向量
n
是表面的法线向量
r
是反射向量
v
是从反射点到观察者的向量
p
是光泽度
three.js - 导出凹凸贴图和高光贴图
我已经看到了新的 MeshPhongMaterial Bump 和 Specular 高光,迫不及待地想将它们加入我的游戏引擎。目前我正在使用 python 转换器将 OBJ 文件转换为 .js 文件。然而,51 版出口商似乎无法处理这些材料。
我还担心我的大多数网格都有 2 种或更多材料,并且正在使用 MeshFaceMaterial。
更改为 MeshPhongMaterial 会破坏多个纹理吗?我应该使用不同的出口商来实现这一目标吗?使用凹凸贴图和高光贴图从 .3ds 文件转换的最佳工作流程是什么?我应该等待一段时间让这个话题平静下来吗?