问题标签 [phong]
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.
opengl-es - Phong 着色器不起作用
我想使用 phong 着色来渲染。我使用 OpenGL ES 3.0 并实现了 gouraud 着色并且它有效。但是当我使用 phong 着色渲染对象时,它不起作用。我认为我的着色器代码有问题,但我找不到它在哪里。
这是顶点着色器
这是片段着色器
opengl - Phong Lighting 在我的地形的某些部分偶尔会太亮(OpenGL)
使用 Triangle_Strips 和高度图,我制作了山区地形,并使用 3D 平面投影进行纹理处理。对于 3D 平面投影,我遵循以下链接的第 1.5 节。 https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html
这是 Phong Lighting 之前的样子。Unitl贴图,没问题。
这就是它在 Phong Lighting 之后的样子。请注意,我假设了定向光,所以我假设光的方向朝向 -y 轴方向。我将其设置为shader.setVec3("light.direction", 0.0f, -0.1f, 0.0f);
地形的某些部分突然变得更亮了,好像只有那些部分的光线才变强。
我检查了法线向量是否正确。所以我通过几何着色器将它们可视化。这是结果。
如您所见,法线向量实际上是正确的。所以我的着色器程序一定有问题。这是代码。首先,顶点着色器。
这是我的片段着色器。
最后,这就是我设置所有制服的方式。
我不明白为什么我的地形的某些部分在 phong 照明后突然变得如此明亮。任何帮助,将不胜感激。提前致谢!
opengl - 使用 GL_FRAMEBUFFER_SRGB 进行 OpenGL 伽马校正
我正在编写 Blinn Phong(LearnOpenGL 教程)照明并尝试将经过伽马校正的颜色作为最终结果。
在我开始研究伽玛校正之前,我的照明看起来像这样:
然后我整天都在阅读有关 sRgb 颜色空间的内容,以及它的含义。我得出的结论是,经过伽马校正的颜色可以带来更好的照明质量。
我不想在片段着色器中手动调整伽玛。我可以通过启用 GL_FRAMEBUFFER_SRGB 并请求支持 sRgb 的帧缓冲区来让 opengl 做到这一点。(?)
这是启用 GL_FRAMEBUFFER_SRGB 和以 GL_RGB 格式加载的纹理:
这是预期的结果。颜色更亮,因为采样的纹理经过了两次颜色校正。(?)
这是启用 GL_FRAMEBUFFER_SRGB 和以 GL_SRGB 格式加载的纹理:
这是意想不到的结果。一切都太暗了,没有可见的漫反射颜色,只有镜面反射。
我的问题是:
为了让opengl自己做伽玛校正(根据LearnOpenGL教程),我需要:
• 具有支持 SRGB 的帧缓冲区;
• 加载带有 SRGB 标志的纹理;
我做错了什么,或者我错过了一些重要的事情?
更新:漫反射纹理以 GL_SRGB 格式加载,而镜面反射以 GL_RGB 格式加载。在上一张图像中,漫反射颜色似乎完全衰减(?),而镜面反射按预期采样。我的衰减函数是:
float attenuation = max(1.0 - distance / light.radius, 0.0);
webgl - Phong Shader:固定光镜面组件随相机旋转
我为 WebGL 编写了一个 Phong 着色器。我的场景支持使用欧拉角的相机旋转。灯光应固定在场景中。只要我旋转相机,物体上的镜面反射效果也会随之移动。平移似乎对镜面反射分量也有奇怪的影响。我(希望)确保在眼睛空间中进行计算。我首先想知道我的着色器是否正确。
这是我的代码:
顶点着色器
片段着色器
3d - 光线追踪:阴影光线输出问题
在将其标记为重复之前,我遇到了与提出此问题的人完全相同的问题。
不幸的是,它根本没有帮助的答案,所以希望这会引发更好的讨论。使用 C++,手头的任务是编写经典的光线追踪器。我正在使用 Phong 着色模型,并且能够准确地照亮我的场景,直到我需要投射阴影光线。
仅供参考,这是我到目前为止没有尝试阴影的图片:
遵循传统的光线追踪算法,在该算法中我寻找离我的针孔相机最近的物体,我调用以下函数来计算生成的像素颜色:
我尝试使用描述性变量/函数名称,以尽量减少伴随我的代码的解释。glm::vec3
只是 GLM 数学库中的一个数据结构,它包含一个 3D 向量,可以在其上进行矩阵/向量操作。
正如我上面链接的问题一样,这是我的场景在尝试阴影后的样子。
此场景的光源位置为 (0, 2.5, -7.75),表示为相机参考系(其原点为 (0,0,0),面向负 z 方向)。对于另一个场景,光源位于 (4, 6, -1),因此输出甚至与我尝试渲染的另一个场景的问题不一致,如您在此处看到的那样;它只有一条穿过场景顶部的细灰线,其他任何地方都没有阴影?我完全迷失了,仅在这个问题上就花了大约 10 个小时;任何建议都会很棒。
请让我知道是否还有其他信息可以提供,例如我如何计算距离和生命值?我不知道我是否应该研究这些,因为阴影部分工作得很好,或者你们认为它仍然会导致这个问题吗?深度等应该不是问题,因为物体在阴影之前看起来是正确的?
c++ - 光线追踪/Phong 模型漫反射组件
所以我在使用 Phong 模型时遇到了问题,特别是漫反射分量,并且使用了正确的法线向量和光向量的方向。这是一个学校项目,但我不在乎我是否没有完成它,只要有人能告诉我我做错了什么。我已经尝试了一些事情,我做的最好的就是让一半的较大球体遮蔽,但方向错误。最亮的强度位于半圆的外边缘,当它向中心移动时会变暗,而应该是相反的方向。当我看到看起来像在空圆圈中着色的模型时,它看起来像是在线条上对球体进行着色。
第二个球体的阴影可能很难看到。
相关结构:
unity3d - Unity 中的 ThreeJS 着色器
我正在 Unity 中开展一个项目,该项目使用 AR 将产品放置在现实世界中。这些产品(几何和材质)从 http 服务器下载并在 Unity 中转换为游戏对象。
这些产品最初是在ThreeJS中创建的(不要问为什么),并且与 Unity 几何/材质相比具有不同的几何/材质结构。
我得到了几何工作,但我遇到了材料问题。Unity 中的“标准”着色器不包含创建材质的所有参数(如:alpha 贴图、环境贴图、折射、置换贴图、粗糙度贴图、双面等)。
我查看了 Asset Store/GitHub 中的不同插件/库(如LUX、Bit2Good、Shader Sandwich或Simple Physical Shader),但似乎它们都缺少一些参数。我正在考虑自己编写 Phong/Physical 着色器,但这肯定需要我几个星期才能完成。
你们有什么建议吗?
java - 如何为 Phong 着色实现选择光源?
我正在尝试实现 Phong 着色模型,但不确定如何选择光源。更具体地说,我不明白光源应该是什么样子。它应该是vec3吗?或者也许是我在 Java 代码中定义的矩阵?另外,如果我们假设我希望相机成为光源,那么与不同的光源应该有什么不同,比如视图世界中的某个点?我真的很想得到一个解释,或者可能是一个关于我应该如何解决这样的事情而不仅仅是代码的指导。
到目前为止,这是我在顶点着色器中所拥有的:
这就是我的片段着色器目前的样子:
当我编译时出现黑屏,这当然是因为我仍然错过了环境光和最终发出的光,我需要为此设置一个光源。
python - 使用 numpy 进行 blinn-phong 着色
为了教育目的,我正在尝试在 numpy 中实现 blinn-phong 着色。但是,我几天来一直在调试参数正在做什么。
我的总体想法如下。由于方程是针对通道给出的。我将模型应用于每个颜色通道以获得通道中的相对像素强度,然后将通道重新组合在一起以获得所有图像。
我的朗伯系数似乎没有考虑到光的位置变化,但它确实改变了像素强度,但其他参数对输出几乎没有影响。任何帮助,将不胜感激。以下是代码的相关位(有兴趣的人可以在这里找到完整的代码):
谢谢