问题标签 [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.
three.js - 带 alpha 通道的threejs specColor
我需要在我的场景中使用三个.js 导入一些几何图形,每个几何图形都指定一个 RGBA 颜色和一个 RGBA 镜面反射颜色。在threejs中存在一个问题,因为它似乎只处理RGB颜色,整个对象都有一个alpha属性。但我需要两个单独的 alpha 值:一个用于颜色,一个用于高光颜色。
c++ - 镜面光是点还是方向?
镜面光是否将一个点或方向作为光?如果是方向,则应该计算诸如LightPosition - VertexPosition吗?或者就像手动指定的 LightDirection 一样?
opengl - 半透明物体的镜面高光 - OpenGL
我正在为我的计算机图形学课程做最后的项目。这一切都在 OpenGL 中完成。我的项目是创建水下气泡的模拟。这不应该是现实的,但是,我已经完成了我的项目提案中的所有要求,所以我想做一些更高级的东西。
现在,我的泡泡不现实。它们是半透明的,每个周围都有一个半透明的白色圆圈。使用 GL_LIGHT_MODEL_TWO_SIDE、glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 和 GL_POLYGON_SMOOTH 计算光照。这给出了明显的气泡外观。
我无法得到的一件事是镜面高光!它们在那里,但它们是半透明的白色,而不是闪亮表面上真正的镜面高光的不透明白色。
如果我将我的 alpha 设置为全 1,那么会有很好的白色镜面高光,但是我的对象不再是半透明的。
我玩过 GL_SHININESS,但收效甚微。
这是我的照明和材料代码:
谁能建议一种在半透明物体上获得明亮的白色镜面高光的方法?
opengl-es - opengl es中立方体上的镜面光
在一些介绍光照的教程中,人们会从一个球体的例子开始,它由所有三种类型的光照亮:环境光、漫反射光和镜面反射光。然后可以很容易地看到,例如通过关闭单个灯光,环境光负责物体的均匀照明,漫反射光来自特定方向,并且由于镜面光,我们可以观察到表面上的亮点.
我尝试用一个更简单的例子重复相同的步骤,一个用户可以任意旋转的立方体。我实际上期望看到的是类似的画面:我假设OpenGL应该在一定程度上遵循几何光学的规则,如果光源和相机的位置都指定了,那么其中一个应该只有一个亮点立方体面,将光源直接反射到相机上的面。
但是,我只能获得均匀照明的面孔,而不能获得亮点。所以,我的问题是,真的有可能得到它吗?忘了提一下,我使用了最简单的三角剖分——每个面 2 个三角形。另一件事,我使用的是 OpenGL ES 1.1,所以没有着色器。
opengl - 镜面高光取决于相机距离
我只是尝试实现镜面高光。问题是当远离表面时,高光变得越来越强,高光的边缘变得非常刺眼。当移动太靠近表面时,高光会完全消失。
这是我的片段着色器的相关部分。所有计算都在视图空间中。我使用定向太阳光。
这是我的照明缓冲区的屏幕截图。你可以看到最前面的桶根本没有镜面高光,而远处的桶则过于强烈。中间的枪管根据需要点亮。
我究竟做错了什么?
opengl - 不那么平滑的阴影
Blinn-phong 阴影...?
所以我遇到的问题,如上图所示,我似乎无法让镜面高光平滑地着色。问题是沿面边缘的突然切断,这不应该发生。漫反射照明似乎工作得很好,它使用相同的插值。这是 blinn-phong 高光的代码:
lightDirection
是恒定的,它是无限远的(即太阳)。至于 viewRay,它是在顶点着色器中计算的,使用投影矩阵:
我正在使用延迟渲染,这是 UV 值的来源(渲染到全屏纹理)。
我唯一能想到的是正常的插值不够平滑。但如果是这样的话,我将如何解决它?(我将法线存储为 16 位浮点数,但将其提高到 32 位并没有什么不同)。
c++ - OpenGL中的镜面光照问题
我的镜面光照有一些问题,我有环境光和漫反射,但我现在正在研究镜面光以尝试制作一个漂亮的模型。
我的 vertexShader 中有以下内容:
然后在我的 main.cpp 中,我有一些代码可以尝试让它一起工作,镜面光肯定在做一些事情,只是,它并没有让模型看起来有光泽,它似乎将光增强到我可以的程度'看不到任何细节。
我创建以下变量:
renderSceneCallBack()
然后我在主要调用的函数中设置我的变量:
然后我创建一个initLights()
我想处理所有照明的函数,这也被主要调用:
谁能看到我可能做错了什么,我可能有一些计算错误,我只是没有看到。环境/漫射照明都正常工作。这张照片说明了当前发生的情况,左侧为环境,中间为漫反射,右侧为强度设置为 30 的镜面反射。
回答
我忘了把这个值传递给主:
使用所选答案现在一切正常
directx - 高光照明在原点中断 (0, 0, 0)
我有问题让镜面照明工作。看起来我的应用程序中有某种我无法追踪的错误。
光线来自前面(屏幕截图显示相机朝向 -z 方向,左侧是 -x)。
一个简单的镜面反射输出显示以下故障:
使用的代码:
为了检查可能的变量错误,我检查了 input.VertexWorldSpace:
为了检查光方向和法线,我检查了漫反射项:
对我来说,所有部分看起来都很好,但镜面反射在原点(0,0,0)处仍然变黑并且垂直于光的方向。
我还制作了一个 gif,显示在 origin(0, 0, 0) 处的视图方向向量会发生什么
另一个 gif 显示相机位置和高光变黑的位置:http: //i.imgur.com/ajUaekA.gifv
我是否对 v 使用了错误的计算?
directx-11 - 为什么我的着色器会产生不正确的镜面反射结果?[DX11]
我目前正在尝试使用 HLSL 和 DirectX 11 在纹理立方体上实现 Phong 着色和照明。我相信我的环境和漫反射照明计算是正确的,并且在视觉上它们会产生预期的结果。然而,当我应用镜面光照时,我得到了奇怪的结果(见链接)
漫反射、环境光和镜面反射:https ://i.gyazo.com/f7700d758e05227e27be91ab0cfdf64e.png
仅镜面反射:https ://i.gyazo.com/27bbfa0efce5c60748f61f54365cc042.png
我的 .fx 文件:
请原谅任何混乱的代码或变量名,我试图使用各种教程和教科书来让它工作,每个教程和教科书都有自己的命名约定,所以我的现在有点混乱。
编辑:使用答案和其他一些信息来源,我重新设计了我的着色器并让它工作。我的一个问题是常量缓冲区中的填充不正确。我还添加了切线空间计算并将凹凸法线正确转换为 -1 到 +1 范围