问题标签 [normals]

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

opengl - 从顶点数据中获取像素法线

对于照明,我需要片段着色器中的法线向量。我阅读的教程要求我提供法线数据以及模型的顶点。但是顶点指定的面不是已经给出了法线吗?

为了计算法线,我需要三角形的所有三个顶点。但据我所知,我们只能在顶点着色器的每个通道中访问一个顶点。

如何根据顶点数据计算每个像素的法线向量?我想在那之后应用法线贴图,但那是后来的,与这个问题并没有真正的关系。

0 投票
2 回答
11369 浏览

glsl - 在着色器中旋转法线

我有一个场景,其中包含多个具有单独位置和旋转的模型。给定法线,着色器对每个像素应用简单的双向光照。

那是我的顶点着色器。

这是片段着色器。

对于没有旋转的对象,这很好用。但是对于旋转模型,照明也会旋转,当然,情况不应该如此。

原因是法线没有旋转。我已经尝试过f_normal = model * normal;,但这会将旋转和变换都应用于法线。

那么在将法线发送到片段着色器进行照明之前,如何在顶点着色器中旋转法线?什么是常用方法?

0 投票
3 回答
4914 浏览

3d - 将世界空间法线转换为屏幕空间法线

将世界空间中定义的表面法线转换为屏幕空间中的法线的正确方法是什么?我不认为它们可以简单地乘以投影矩阵,因为透视分割将事物转换为剪辑空间,据我所知,在这个空间中,与图像平面共面的平面保持共面。

但是我正在寻找的转换应该导致转换的法线,这样图形 A 中描绘的蓝色世界法线应该导致不同的屏幕空间法线(因为,即使它们的平面与图像平面共面,它们也不面向相机) - 另一方面,图形 B 中描绘的法线在转换后应该(或多或少)相等,因为它们的表面面向相机。

在此处输入图像描述

我在寻找什么转变?怎么计算呢?

我需要它来获得一些屏幕空间效果。

0 投票
2 回答
4188 浏览

c++ - 加载 OBJ 文件,如何使用法线 (#vertices < #normals)

我有一个 obj 文件,并且在没有使用给定法线的情况下成功地将对象加载到 opengl。
这是它的外观:
没有法线的树
文件的格式是:

网格的显示功能是这样的:

结果是这样的:
在此处输入图像描述

我读过由于 OpenGL 用于照明方程的默认法线向量,该对象可能看起来很平坦。
这可以用法线解决。给定的法线是 780,顶点是 155。

我在每次调用 glVertex3f 之前都尝试过使用 glNorm,但 obj 看起来很奇怪(线条等)。

我应该怎么办?

编辑#1: 这就是我读取文件的方式:

这就是我展示它的方式:

函数 displayMesh 在 openGL 的 Render 函数中调用,loader 函数在 Setup OpenGL 函数中调用,并且网格树对象是一个全局变量。

编辑#2: 这是树与法线的外观:
有法线的树也是 OpenGL 设置函数的代码

0 投票
1 回答
444 浏览

flash - Flash 和 AGAL:如何正确插入法线向量

我正在尝试编写一组着色器来绘制曲面的边缘(不是多边形!),就像在游戏Echochrome中一样。

根据我对图形编程的记忆,这样做的技术是进行多通道渲染。第一遍应该将面部法线向量和深度编码为 RGBA 颜色并将它们绘制到纹理上。如果当前片段的法线或深度信息与周围纹素的法线或深度有显着差异,则第二遍应查找纹理中的值并绘制边缘。

(注意:如果有更简单的方法,请告诉我,特别是如果在 Flash 中很容易做到。但是,我的具体问题如下。)

我在编写第一遍时遇到了障碍。根据我在使用 DirectX 9.0c 进行 3D 游戏编程的介绍:Frank D. Luna 的着色器方法中读到的内容,“插入”法线向量的正确方法是对三角形顶点的法线向量求平均,然后使用它表面上每个片段的值。但是,我的片段着色器改为对法线向量进行插值,这导致为表面绘制渐变而不是纯色。

如何让 AGAL 进行必要的平均而不是插值?

0 投票
1 回答
4550 浏览

c++ - 从 kinect 深度图像进行积分图像法线估计

我正在执行以下操作以尝试从 Kinect 深度图像生成的点云中估计表面法线:

并收到以下错误:

[1;31m[pcl::OrganizedNeighbor::radiusSearch] 输入数据集不是来自投影设备!残差 (MSE) 0.053184,使用 1406 个有效点 [0;m

我不确定如何继续,或者从原始 kinect 深度图像(有效)计算法线的正确方法是什么?

0 投票
1 回答
1118 浏览

c++ - 正常估计曲率场返回 NAN

我正在计算有组织的点云的表面法线,如下所示:

当我遍历法线时,所有点的曲率场都设置为 NAN。我在计算中做错了吗?

0 投票
2 回答
7899 浏览

c++ - 计算顶点法线

我已经在谷歌搜索了很多小时没有很好解释的答案,我正在使用照明,我需要顶点法线,假设我们有这个顶点缓冲区(它是一个立方体):

那么,如何计算顶点法线?就这样。谢谢

0 投票
1 回答
2885 浏览

opengl - 来自高度贴图神器的法线贴图

我正在从高度图的片段着色器上烘焙法线贴图。高度图看起来很棒并且看起来很平滑。然而,当我生成法线贴图时,我得到了非常奇怪的结果。

这是显示问题的两张渲染图像,一张包含所有照明计算,第二张将法线贴图图像应用于网格顶部。 标准地图

在此处输入图像描述

我烘焙法线贴图的方法是在片段着色器上对相邻像素进行采样。

网格为 32x32,法线贴图和高度贴图为 64x64。这是对相邻像素进行采样的片段着色器代码:

texturePos 在顶点着色器上计算为 vertexPosition.x / 128(128,因为顶点之间的距离是 4 像素。所以 32 * 4 = 128)。

为什么我的结果如此奇怪?

0 投票
1 回答
119 浏览

java - OpenGL法线误解?

我试图让我的照明在 OpenGL 中工作,使用 LWJGL 作为实现库。我认为我遇到的问题是我没有正确设置我的法线,因此照明在某些角度不起作用。这是我正在测试的多维数据集的代码: