首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >法线贴图和逐顶点法线

法线贴图和逐顶点法线
EN

Stack Overflow用户
提问于 2011-05-12 18:01:30
回答 3查看 1.6K关注 0票数 1

我是opengl编程的新手,我一直在努力为我的3d形状获得顶点法线计算,这总是取决于我如何绘制和计算三角形,所以我想知道我是否可以通过使用法线贴图来避免法线计算?

任何帮助和/或参考资料都将不胜感激

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-12 19:51:05

不,如果使用法线贴图,则无法避免法线计算。实际上,你必须为每个顶点计算两个额外的向量,切线和二法线,以使法线贴图工作。

然而,我看不出你有什么问题。计算法线大约是最容易做的事情。每面和每顶点法线计算的伪代码:

代码语言:javascript
运行
复制
foreach face in model.faces:
    face.normal = crossproduct(
                       model.vertices[face.vertindex[1]].pos - model.vertices[face.vertindex[0]].pos, 
                       model.vertices[face.vertindex[2]].pos - model.vertices[face.vertindex[0]].pos )
    foreach v in face.vertindex:
        model.vertices[v].in_faces.append(face)

foreach vertex in model.vertices:
    vertex.normal = (0,0,0)
    for face in vertex.in_faces:
        vertex.normal += face.normal
    vertex.normal = vertex.normal / length(vertex.normal)

crossproduct(v0, v1):
    return (
        v0.y * v1.z - v0.z * v1.y,
        v0.z * v1.x - v0.x * v1.z,
        v0.x * v1.y - v0.y * v1.x,
    )
票数 3
EN

Stack Overflow用户

发布于 2011-05-12 18:09:02

法线贴图允许指定要在像素着色器中使用的每像素法线。但是这些每像素法线通常只干扰插值法线,所以无论如何你都需要计算它们。只有将顶点法线备份到纹理中时,才能消除顶点法线。

票数 0
EN

Stack Overflow用户

发布于 2011-05-12 23:35:13

是的,你可以:使用对象空间法线贴图。

切向空间有很大的好处,但它需要使用normal+tangent对或四元数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5976349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档