问题标签 [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 投票
0 回答
346 浏览

c# - Dynamically change color of a VBO in Opengl

I am developing a tilemapping game engine and I have a CPU handled lighting like minecraft not smooth lightning (on the left):

not smooth/smooth

I need to change the color of each tile when light updates or when light is updated. Right now, I am using this to to color and translate the vbo:

GL.Color3 (equivalent to glColor3f) and the game performance is getting from 1000 fps to 830 fps. How can I change the color of the tiles dynamically?

There isn't a vbo for each tile of the map. Each tile image has it's vbo and texture and the map is an int[,]. The value of the map in the location is used in a array of tiles:

I already tried using GL.SubBufferData but doing it 4 times each drawcall for rendering a tile decreased the fps to 74. I would not like to use GL.ColorPointer because there isn't a vbo for each tile being drawn.

0 投票
2 回答
95 浏览

c++ - 不支持 512 字节长度的顶点着色器

我正在开发一个基于着色器的简单游戏,随着我的顶点着色器文件的增长,它的大小达到 512 字节,我现在无法在 c++ 中加载它。我认为这不是一个常见问题,但我猜想它来自我的自定义着色器加载器,而不是来自 opengl 限制。这里是我的简单顶点着色器的代码(它应该将笛卡尔坐标映射到球形坐标,它的大小是 583 字节):

以及加载器的代码:

当我将大小减小到 512bytes(2^9...)(511 及以下)以下时效果很好。我正在使用 GLFW3 加载 openGL。你见过这样的问题吗?

0 投票
0 回答
586 浏览

three.js - 用 MTLLoader 加载的 MTL 材料似乎不起作用

我正在使用three.js 开发一个项目。我有一个简单的模型(标准茶壶),其中包含我使用 obj 导出器从 3DS Max 导出的简单材料。

我可以使用 OBJLoader 很好地加载模型,它显示没有任何问题,但是当我尝试加载相关 MTL 文件以获取材质和纹理时,我只得到白色。

我几乎从 OBJ-MTL 导入示例(带有纹理人的那个)中复制粘贴了代码,并且我还尝试了其他方法(例如,遍历 Object3D 到达网格以手动应用材料)。

这是设置:

在此处输入图像描述

我没有设置资源的路径,因为它们位于根文件夹中(并且设置它并没有改变任何东西)。我正在从 3DS Max 导出,会不会是不兼容?我从材质编辑器中将材质设置为 Phong,因为我知道 three.js 有一个 Phong 材质,但我也尝试了默认选项(Blinn),但它不起作用。我记录了材料的内容,并且似乎用文件中的数据正确填充。

0 投票
1 回答
462 浏览

3dsmax - 3ds max:wavefront .obj 导出导致着色伪影

我正在尝试将 3ds max 场景导出为 .obj 格式,不幸的是,当我在使用默认导出设置导出后导入 .obj 文件时,导入的模型在多边形的一小部分(特别是图像中显示的模型的前窗)。事实证明,原始模型有一些开放的边缘,这些边缘导致了 .obj 导出时的着色伪影。

请看下图: 有和没有工件的示例模型

在以 0.0 的阈值对导入的 .obj 网格应用顶点焊接后,着色伪影消失了。但是,我想一起防止着色伪影(即使原始网格中存在开放边缘),因为在执行 .obj 导出后我无法应用上述顶点焊接修改器,而无需重新导出。

使用的导出设置: 导出设置 注意:选中/取消选中“优化:顶点”复选框对平滑工件的创建没有影响。

示例模型的 .max 和 .obj 文件: https ://mega.nz/#F!CglwhYCD!UoG7cxPn5Rkmv-GC2H6cDA

任何关于我做错了什么/导致问题的原因/如何防止问题的建议将不胜感激。非常感谢!

0 投票
1 回答
143 浏览

c++ - OpenGL法线没有出现在三角形中

我正在使用普通数组来呈现普通数据集,如下所示:

我的顶点呈现如下:

为了这个例子,我按如下方式填充我的 nArray(正确计算法线时仍然会出现错误):

在哪里randomNumber()返回一个介于 0 和 1 之间的随机浮点数。

我希望它nArray应该填充 0 到 1 之间的随机浮点数,并且这些应该完全随机地显示在我生成的表面上。

当我渲染输出时,“法线”显示如下。我不在乎它没有计算出正确的法线,但似乎两个并排三角形的法线是相同的。

不在三角形中的法线图片

下面是表面的线框,用于显示单独的三角形: 上图的线框图

我使用的阴影方法是:glShadeModel(GL_FLAT);

我希望每个单独的三角形都有完全不同的灰度值,但事实并非如此。感谢您对我出错的地方的任何帮助。

0 投票
2 回答
109 浏览

ms-word - 在 Word 中查找阴影单元格

我正在寻求一些帮助来提出一个宏,该宏将帮助我在 Word 中找到所有阴影单元格,而不管阴影颜色如何,然后将阴影的颜色更改为一种颜色,以保持一致性。从我迄今为止的所有研究来看,如果不将颜色信息实际放入宏中,这似乎是不可能的。任何帮助都感激不尽!谢谢!

0 投票
1 回答
4995 浏览

javascript - Phong 和 Gouraud 着色 WebGL

我在 Gouraud Shading 中读到过,片段的颜色是在顶点着色器中计算的。而在 Phong Shading 中,片段的颜色是在片段着色器中计算的。

在这个实现中,我们使用了哪些?

我不明白它们之间的确切区别。谁能帮助我?谢谢

0 投票
1 回答
920 浏览

html - 切换 Gouraud 和 Phong 着色

我正在编写一个需要切换这两种着色技术的应用程序。

程序开始应用 Gouraud 着色,没有问题。

当我单击按钮切换阴影时,我的对象(一个旋转的立方体)变成了紫色,就像没有光一样。有没有人看到问题?

高洛着色 Phong 阴影

这是代码:

JavaScript

HTML

0 投票
0 回答
505 浏览

c++ - 带有朗伯着色的简单光线追踪,混淆

我没有看到另一个与我的问题类似的帖子,所以希望这不是多余的。

我一直在阅读一本关于计算机图形学基础的书(第三版),并且我一直在根据我从中学到的原理实现一个基本的光线追踪程序。我在实现平行投影和透视投影时遇到了一点麻烦,但是在使用 Lambertian 和 Blinn-Phong 着色之后,我遇到了一个我自己无法解决的问题。

我相信我的问题与我如何计算射线球交点和相机/灯光的矢量有关。我附上了一张当我运行没有阴影的简单透视投影时输出的图片。

透视输出

然而,当我尝试使用朗伯着色的相同场景时,球体消失了。

空白输出

在尝试自己调试时,我注意到如果我否定计算为命中点的 x、y、z 坐标,球体会再次出现。而且我相信光线来自我预期的相反方向。

朗伯式,无效的生命值

我通过将投影方向矢量和由射线-球体相交公式计算的t值的乘积加到原点(我的“相机”为 0,0,0)或只是e +来计算命中点td _

从命中点到灯光的向量l,我设置为灯光的位置减去命中点的位置(所以命中点的坐标减去灯光的坐标)。

v,从命中点到相机的向量,我通过简单地否定投影视图向量得到;

我得到的表面法线是命中点减去球体的位置。

我认为所有这些都是正确的。但是,在逐步浏览计算表面法线的部分时,我注意到一些我认为很奇怪的东西。当从球体的位置中减去命中点的位置以获得从球体中心到命中点的向量时,我相信我应该期望得到一个向量,其中所有值都在 (-r,r) 范围内;但这并没有发生。

这是逐步执行我的代码的示例:
计算的命中点:(-0.9971, 0.1255, -7.8284)
球体中心:(0, 0, 8)(半径为 1)

减去后,我得到一个 z 值为 -15.8284 的向量。这对我来说似乎是错误的;但我不知道是什么原因造成的。-15.8284 的 z 值是否不意味着球体中心和命中位置在 z 平面上彼此相距约 16 个单位?显然,这两个数字在绝对值方面彼此相差 1,这就是让我认为我的问题与此有关的原因。

这是主要的光线追踪循环:

GetNormalAt 很简单:

我的球体位于 (0, 0, 8) 和 (-1.5, -1, 6) 处,rad 1.0f。我的光在 (-3, -3, 0) 处,强度为 1.0f;

我忽略了t不大于 0 的任何交集,所以我不认为这是导致此问题的原因。

我认为在将位置和向量保持在同一坐标系中(相同的变换?)时,我可能会犯某种错误,但我仍在学习并且承认不太了解。如果视图方向总是在-w方向,为什么我们将场景对象定位在正w方向?

非常感谢任何帮助或智慧。到目前为止,我都是在自学这些,我对自己学到的东西很满意,但是我的直觉告诉我这是一个相对简单的错误。

以防万一它有任何用处,这里是 TestViewRay 函数:

编辑:

我很高兴报告我发现了我的问题。

在和我姐姐坐下来看这个时,我注意到在我的射线球命中检测中我有这个:

这是不正确的。d应该是负数。它应该是:

(我重命名了几个变量)以前我有一个零向量,所以我可以将 - d表示为 (zero_vector - d ),我已经删除了它,因为我实现了一个成员函数来否定任何给定的向量;但我忘了回去打电话给d。修复该问题并将我的球体移动到负 z 平面后,我的 Lambertian 和 Blinn-Phong 着色实现工作正常。

Lambertian + Blinn-Phong

0 投票
1 回答
509 浏览

c++ - Opengl平滑着色生成的对象

我使用柏林噪声生成了一个 3d 形状。我正在尝试平滑阴影,为此我计算了每个三角形的面法线,然后通过平均它们所属的面的法线并对最终结果进行归一化来计算每个三角形顶点的法线。最终结果看起来很像平面阴影(见附件截图)

在此处输入图像描述 在此处输入图像描述

法线在我看来是正确的。我不能使用着色器,必须使用旧的不推荐使用的渲染方式。

形状生成器:

我用两个向量之间的简单叉积计算人脸法线:

每个顶点法线(初始化为 0):

最后是绘图部分: