问题标签 [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 回答
556 浏览

c# - 将法线添加到顶点列表

我在 C# 中使用 DirectX 9
我将所有顶点存储在一个列表(不是数组)中,因为我使用动态 LOD 算法,所以所有内容都是按帧计算的,所以我的顶点可能每帧都不同。

一切正常,直到我尝试添加法线和照明。
我发现一旦将顶点添加到列表中,就无法编辑法线,因为它是结构而不是类的列表。所以它只会给出一个错误,比如“无法修改 blablaba 的返回值,因为它不是变量”
例如,如果我尝试这样做,它将不起作用 -

将顶点放入列表时必须添加法线,但在拥有完整网格之前无法计算法线。

所以我做了一个新的自定义顶点类型,而不是把它变成一个结构,我把它变成了一个类。这也不起作用,因为directx不会接受它,除非它是一个结构......

因此,我尝试使其与数组而不是顶点列表一起使用。这导致每秒少于一帧。我不得不使用 Array.Resize 每帧将数组的大小更改几百次,我猜它不喜欢那样。

你可能在想我应该把最终的列表变成一个数组,然后从那里计算法线。这不起作用,因为顶点不是以任何特定顺序添加的,所以我不知道哪些顶点靠近给定顶点以便能够计算法线。

那么,如何在构建网格后以一种可以给它们法线的方式存储顶点?

0 投票
1 回答
2382 浏览

c# - 计算以接缝结束的 2 个网格之间的法线

我的任务

我目前正在为 Unity3D 创建一个地形,该地形专门用于正在运行的应用程序内存不足的移动设备。允许大小为 15.000 x 15.000 公里、高度从 -1.000 米到 10.000 米的地形,唯一的限制是硬盘上的空间。

情况

现在一切都运行良好,除了不同网格之间的法线(每个网格都有一个细分级别)没有正确计算。这里有两张图片可以可视化问题:

带有显示三角形的网格 仅具有法线的网格

该问题仅发生在从一个细分级别过渡到另一个细分级别时。如果两个网格具有相同的级别,则效果很好。我最初以为在计算法线时我会错过一些面孔,但似乎它们都包含在计算中。

一些代码

每个面的法线计算:

在计算顶点周围每个面的法线后,我将所有面法线添加到顶点法线并对其进行归一化。结果显示在图片中,正如您在背景和网格本身中看到的那样,只要没有不同的细分级别,它就可以工作。

更多代码

计算当前网格的每个法线:

-GetNormal方法:

-CalculateNormal方法:

-AddFaceNormal方法:

-FindFaces方法:

-TransformPoint方法:

最后是TranslationHandler-delegate 和 2 个示例处理程序:

问题

问题很简单:为什么它不适用于不同的级别,我的计算中是否遗漏了什么?

0 投票
1 回答
2941 浏览

android - Android openGL ES 法线

所以昨天我写了 WaveFront .obj 3D 模型加载器,它现在工作正常(不支持一切)所以我写了简单的测试来在屏幕上绘制任何 3D 模型,在我为场景添加照明之前一切正常。灯光出现了,但法线似乎仍处于默认状态。我非常不确定在为法线生成缓冲区(如 GL_NORMAL_ARRAY、GL_ARRAY_BUFFER 等)时应该使用什么作为目标,因为我找不到任何关于使用缓冲区对象的教程:

在此处输入图像描述

因此,默认法线是 0、0、-1 或 0、0、1,默认相机正在查看 -5,并且随着模型旋转,光线就像没有法线时一样消失,我已经得到了与计算机类似的东西,但我没有使用 VBO 等,所以我无法比较代码,我很确定上传普通缓冲区或绑定它有问题!:( 帮我! :(

0 投票
2 回答
1548 浏览

opengl - OpenGL在给定点列表的情况下计算正确的法线

对于我遇到的问题:a)点的有序列表 b)构成每个多边形的点列表

例如

=> polygon1 是一个三角形,可以是模型外部的一部分。

我需要在 OpenGL 中计算正确的光照法线。

我知道我可以从给定的点计算平面上的向量,并通过叉积得到平面法线,但是 OpenGL 要求法线指向正确的方向(即向外)。

这个过程需要自动化,因为我有很多多边形。

如果我在平面上选择两个向量,我无法确定如何确定法线我计算出的点在正确的照明方向上(即在模型的外部。)

我想我可以将计算出的法线添加到平面上的一个点,看看它是否离原点更远,看看它是否正确,但是模型非常复杂,一些法线可能需要指向原点(ish)

如果有帮助,事实证明所有多边形都是三角形(虽然看不出它有什么帮助,应该能够为任何多边形抽象)

0 投票
1 回答
3313 浏览

opengl-es-2.0 - 我可以在 OpenGL ES 中指定每个面法线并实现非平滑/平坦着色吗?

我想在 OpenGL ES 2.0 中显示网格模型,它清楚地显示了实际的网格,所以我不想在每个基元/三角形上进行平滑着色。我能想到的唯一两个选择是

  1. 每个三角形都有自己的一组法线,都垂直于三角形表面(但我想我不能用这个选项在三角形之间共享顶点)
  2. 使用黑线表示三角形/原始边,并坚持使用共享顶点的法线方式,每个顶点都有一个法线

一定要这样吗?为什么我不能简单地读取图元并且不指定任何法线并以某种方式让 OpenGL ES 2.0 在每个面上制作平坦的阴影?

类似的问题类似的 Stackoverflow 问题,但没有解决方案的建议

0 投票
1 回答
1513 浏览

opengl - 法线贴图中不正确的光照

我的 OpenGL 游戏引擎中有一个法线贴图,我意识到我的法线贴图着色器(以及视差贴图着色器)的光照有问题。不管光在哪里,光总是从右边来。我正在使用切线空间着色器,但我不确定我传入的内容是否正确。

这是我正在使用的法线贴图: 我正在使用的法线贴图

这是渲染:

渲染图像

灯光似乎来自坐标 3,0,3,但它的实际位置是 -3,0,3

有任何想法吗。

着色器:

[垂直]

[碎片]

0 投票
1 回答
436 浏览

webgl - WebGL 法线和索引 / 定向照明 / X3D / Blender

我在 html 中提出了一个问题,因为我认为有图像来提出问题会有所帮助。 http://www.jamestrusler.co.uk/files/webglquestion/question1.html

这是在 html 页面中也可以看到的覆盖问题:

  1. 您能否在不旋转/缩放顶点的情况下旋转/缩放法线(已经进行了翻译) - 因为这可能是一个问题的答案。
  2. 关于为什么 Blender(x3d 导出)给我的法线、索引和顶点的任何想法似乎都不能正确渲染多色对象。(请参考网站问题)
0 投票
2 回答
4626 浏览

opengl - 如何计算圆柱的顶点法线?

我有以下圆柱体,我在 opengl 中绘制一条蠕虫,我想计算顶点法线。

在此处输入图像描述

0 投票
0 回答
1633 浏览

opengl - VBO verses Vertex Array,VBO 中的顶点法线问题

我不知道这里出了什么问题,除了正常情况外,一切正常。当我使用顶点数组时,模型看起来很完美,但是当我切换到 VBO 时,由于顶点法线,模型看起来更糟。我花了很多时间来修复它,但不知道出了什么问题。VBO 一代似乎很完美。但还是不知道。任何想法?

接下来是渲染代码。VBO + 顶点数组顶点数组工作完美。我可以看到具有顶点法线的模型的完美形状,但是对于 VBO,顶点法线存在一些问题。我认为我在 BUFFER_OFFSET(12) 上做错了什么。

}

更新1: 我认为你在谈论InitVBO ..我当时错了。这个怎么样......但它也不起作用......实际上是它的问题......在很多方面我试图在InitVBO()中绑定顶点法线......但结果每次都一样。

更新2: 好的......我不绑定顶点法线(vboNormID)。我正在丢弃它。现在好吗?现在它应该可以工作了..实际上我已经以这种方式完成了所有工作..将顶点法线与 vboVertID 和 vboNormID 等绑定在一起。但并非每个方法都在工作..通过分析此代码给我任何建议。

更新 3:

我不知道谁告诉我使用 BUFFER_OFFSET()... 只是废话.. 我现在已经修复了它,现在没有这个愚蠢的 BUFFER_OFFSET() 可以正常工作.. 现在修复代码非常简单,如下所示:

现在,请大家指导我如何实时更新这些缓冲区。我的意思是说我需要实时更新整个数据,包括法线、顶点、三角形。例如:在细分三角形后,我还需要用顶点和法线更新三角形缓冲区。另一件事是,在模型的切割模拟过程中,我需要更新顶点位置和法线,所以我需要更新那个时候的缓冲区也是如此。所以告诉我该怎么解决这种问题?我该如何弥补?我需要删除缓冲区并重新生成吗?如果是,那怎么办?

0 投票
2 回答
2790 浏览

android - 每个顶点超过 1 个法线

我对从搅拌机导出到 .obj 文件的法线有点困惑我正在制作一个 win 应用程序,将 obj 文件拆分为 2 个文件,1 个带有顶点,另一个带有索引,所以 opengl 的工作更少。正如我在面孔中看到的那样,我可以找到相同的面孔,但具有不同的法线,例如面孔 24/24/20 和 24/24/19,也许更多是这样吗?在搅拌机项目中只有 1 个光源谢谢