问题标签 [shading]

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 回答
142 浏览

opengl - 编译 OpenGL 4 Shading Language Cookbook,第 3 版的示例时出错

我从PacktPublishing github下载了 OpenGL 4 Shading Language Cookbook, 3rd Edition 的源代码

我已经下载了glm源代码版本glm-0.9.9.3,我已经下载了glfw源代码版本glfw-3.2.1。我使用“cmake”成功编译、构建和安装了 glm 和 glfw。

为了找到 GLFW 安装,我在 src (examples) 文件夹中执行了以下命令

cmake -D CMAKE_PREFIX_PATH=e:\mysrcpath\glfw-3.2.1\src 。

我收到以下错误

glfw3Config.cmake 有代码

“CMAKE_CURRENT_LIST_DIR”是

但是 glfw3Targets.cmake 位于

“cmake”构建无法在正确的路径中找到 glfw3Targets.cmake。

如何解决这个问题?

0 投票
1 回答
27 浏览

graphics - 带有平方衰减的阴影总是使一切变黑

我最近尝试改变我在 RayTracer 中计算漫反射照明的当前方式。以前是这样计算的:

其中 coef 是一个衰减系数,从每个像素的 1 开始,然后针对这条线生成的每个反射光线进行衰减:

这运作良好。

但我决定尝试一些更现实的东西并实现了这个:

其中 LIGHT_FALLOFF 它是一个常数值:

长度是从点光源中心到相交点的向量的长度:

问题是,这一切都只会产生黑屏!罪魁祸首是作为 light_intensity.set 中除数的长度。它使最终的颜色值成为某个值^ -5。但是,即使我将其替换为一个(破坏了我实现真实光衰减的目标),我仍然会得到接近于零的颜色值,因此是黑色图像。

我尝试在更靠近对象的位置添加另一个光源,但是要着色的模型由具有不同坐标的多个多边形组成,因此很难为它们确定一个好的位置。

所以我问。这对您来说似乎很正常,或者这似乎是一个错误?对我来说,理论对我来说并不奇怪,因为衰减是二次的。

似乎没有,有一些关于在哪里放置光源的提示,或者任何可以获得不是全黑的图像的东西?

感谢您阅读这一切!

PS:Intensity 被注释掉了,因为在我用来编写代码的示例中,它是一个

0 投票
1 回答
549 浏览

c++ - 带有 phong 着色和光线追踪溢出的“镜面”颜色

我在光线追踪器上实现了 phong 着色。不幸的是,我在运行它时收到了分段错误。可能的原因与“specular_color”Vec3f 变量有关(其中是由三个浮点数组成的对象)。当我打印它的值时,我收到:

specular_color: inf inf inf

找出原因并不复杂:

它是这样计算的:

其中 mat.ns 是镜面反射指数,它展示了预期值。

reflect*camera_dir 是原因,因为它总是以一个很大的值结束。在我的四个测试用例中,有三个是一个五位数的值。另一个是六位数的值(接近七)。因此,任何不接近 1 的指数的五位或六位数值都可能会溢出浮点变量。

现在的问题是为什么这些价值如此之大,如果它们可以或不能那样。如果他们不能,那么之前的代码中可能存在错误。如果可以的话,所缺少的只是对反射向量进行归一化(camera_dir 已经是单一的)

反射矢量是这样计算的:

其中 light_ray_dir 计算为:

current 是光源的名称,intersection 是光线与三角形的交点。

当它只漫射光时,它总是工作得很好。

然而,hit_normal 是新代码,计算方式如下:

u 和 v 是重心坐标,vertX 是三角形的顶点。

那么什么看起来更有可能呢?上述代码中可能存在更复杂的错误,或者只是缺少对反射向量的规范化。或者也许是别的什么?谢谢你的时间。

0 投票
1 回答
1212 浏览

javascript - 如何在 WebGl 中使用漫反射照明进行 Gouraud 着色?

我坚持实施 Gouraud 平滑着色。我错过了一些东西,我需要帮助。

首先是漫射照明。为了获得漫射光,我使用这个公式:

ID * Kd * 最大值(点(N,L),0.0)

我应该得到我的漫反射颜色,并将它添加到我的环境颜色中。

下一个阴影。Gouraud 着色是每个顶点的着色。我在这个讲座中发现了 Gouraud 着色算法

据我了解这个算法:

  1. 确定每个多边形顶点的法线
  1. 将光照模型应用于每个顶点以计算顶点强度
  1. 在曲面多边形上线性插值顶点强度

这是输出图像

输出图像

我在这里想念什么?顶点着色器:

片段着色器:

0 投票
1 回答
63 浏览

raytracing - 如何解决光线追踪中的反光问题?

我正在使用python制作图像。但是朗伯着色不起作用。

起初图像是这样保存的。 在此处输入图像描述

但是当我反转球体的法线向量时,图像就这样保存了。在此处输入图像描述

这是我的着色代码。

list 是球体的列表,idx 是最近球体的编号。如果有人可以帮助我,我将不胜感激。我已经这样做了一个星期

0 投票
0 回答
73 浏览

c++ - 在光线追踪器上进行 phong 着色的奇怪颜色

我最近在 cpu 光线追踪器中添加了对 phong 着色的支持,颜色都搞砸了: 在此处输入图像描述

如果我只是扩散:在此处输入图像描述

一些相关代码:

一些可能相关的信息

最后四行是连续的,尽管最后一行发生在负责为每个灯光进行着色计算的 for 循环之外。

两条“hit_normal”行发生得更早,它们在上述循环开始之前。

前两个发生在光线追踪器的开头,在负责图像像素的两个 for 循环的前几行中。

如果我从

至:

图像仅略有变化:

在此处输入图像描述

如代码所示,所有三个分量向量(hit_normal、reflected、light_ray_dir、camera_dir)都被归一化。

因此,我寻求有关如何调试问题的建议,以及可能出错的建议。感谢您的关注。

0 投票
1 回答
1871 浏览

matlab - 如何在 Matlab 中将单个二维曲线绘制到颜色图上?

我用 Matlab 中现有的编译数据创建了一个平滑的颜色渐变二维等高线图。我将 x 轴、y 轴和 z 数据轮廓绘制为颜色图。我的目标是在颜色图上绘制一条二维曲线,表示单个 z 数据值,但我不知道如何。

有谁知道如何将 2-D 曲线绘制到 3-D 颜色图上?我提供了一个指向当前颜色图的链接,我希望在该颜色图上将单个 z 值绘制为曲线。

现有的颜色图

0 投票
1 回答
139 浏览

three.js - 在三个 js 中应用平滑着色来渲染对象

我尝试应用平滑阴影来渲染我的对象,以便平滑(第一张图像)我的多面阴影(最后一张图像)。

我通过对所有相邻三角形法线求和,然后对其进行归一化来计算我的顶点法线。对于某些区域,它看起来不错,但在其他区域,结果不正确。

例如,如下图所示,围绕字母“R”(或其他带有大三角形的平面)我得到了一些奇怪的东西。

平滑

刻面

0 投票
1 回答
254 浏览

opengl - OpenGL 漫反射/镜面光不在多边形上渲染(仅环境光​​)

我已经根据我的理解设置了照明,但渲染的只是环境照明。它似乎适用于 glutSolidSphere 和 glutSolidCube 等内置形状,但不适用于我手动编码的多边形。

我花了几个小时查看教程和 StackOverflow,但我自己无法解决它。

我错过了什么?我正在使用 Netbeans (Windows)、C++、FreeGlut。

图片:3D 飞机

编辑:我编写了一个名为 calcNormal 的普通计算函数,并将我的 glVertex 调用转换为顶点的四边形数组......

...但它仍然没有渲染漫射光,即使我现在为每个多边形设置 glNormal。

我的多边形/顶点结构现在看起来像这样:

0 投票
1 回答
523 浏览

blender - 就新材料/BSDF 而言,开放着色语言 (OSL) 到底有哪些限制?

我正在研究 BRDF 描述和实现技术,而 OSL 是这样做的主要语言之一。我很好奇使用 OSL 实现新 BRDF 的方式,或者是否可以在不弄乱源代码的情况下这样做。

OSL 文档提供了一组任何渲染器都应该使用的材料。例如,Blender 提供了一组可在 OSL 中使用的扩展的已实现材质(这些材质实际上已作为 Cycles 中的节点提供)。我对创建新材料 (BRDF) 很感兴趣。根据这个线程,OSL 不应该像这样使用,而是用户应该利用已经可用的材料闭包(BSDF)来创建新材料。该线程中的 OP 试图实现 BRDF 但无法取得进展,因为他找不到获得所需某些向量的方法。

最后,我的问题是:为了创建用于 OSL 的新材料(BRDF),是否有必要先在 C++ 中实现它们并重新编译 OSL,才能最终使它们可用?我无法找到这个问题的明确答案。