首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >玛雅阿皮中的顶点和法线如何对齐?

玛雅阿皮中的顶点和法线如何对齐?
EN

Stack Overflow用户
提问于 2015-07-16 12:29:45
回答 1查看 946关注 0票数 3

我想复制一个形状在开放GL与玛雅阿皮,包括法线。让我们以一个立方体作为源形状。

玛雅的MFnMesh::getPoint将返回8分。

玛雅的MFnMesh::getNormals将返回24个法线(每个顶点3个法线,或每个面每个顶点一个法线)。

glDrawElements要求顶点列表和法线列表相对应,这里不是这样的。如何使两个列表对齐,以便glDrawElement正确地将法线分配给顶点?

我认为顶点列表中的顶点需要重复才能变成24点,而MFnMesh::getPolygonVertices需要指向重复的顶点。有什么办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 18:38:17

顶点法线不是1:1与顶点:它们只是1:1与顶点面顶点。显示硬边要求玛雅对每个定义边界的顶点都有两个法线值。进入给定顶点的硬边越多,顶点可能支持的法线就越多:它总是至少有一个,但每个传入边最多可以有一个法线。你的24个法线反映了它们每个立方体顶点都有3个硬边。

要正确地获得正常值,您应该使用顶点面顶点,而不是普通顶点。

代码语言:javascript
复制
from maya.api.OpenMaya import MFnMesh, MGlobal, MSpace, MVector
mobj = MGlobal.getSelectionListByName('pCubeShape1').getDagPath(0)
mesh = MFnMesh(mobj)
space = MSpace.kWorld

def vertices_and_normals(mesh_fn, face, space):
    '''
    mesh_fn = an MFnMesh, face = an integer, space = an MSpace enum valu
    '''
    normals = [MVector(m) for m in mesh_fn.getFaceVertexNormals(face, space=space)]
    verts = [mesh_fn.getPoint(f, space=space) for f in mesh_fn.getPolygonVertices(face)]
    return zip(verts, normals)

for f in range(6):    
    for v, n in  vertices_and_normals(mesh,f, space):
        print "v", v, "n", n


v (-0.5, -0.5, 0.5, 1) n (0, 0, 1)
v (0.5, -0.5, 0.5, 1) n (0, 0, 1)
v (0.5, 0.5, 0.5, 1) n (0, 0, 1)
v (-0.5, 0.5, 0.5, 1) n (0, 0, 1)
v (-0.5, 0.5, 0.5, 1) n (0, 1, 0)
v (0.5, 0.5, 0.5, 1) n (0, 1, 0)
v (0.5, 0.5, -0.5, 1) n (0, 1, 0)
v (-0.5, 0.5, -0.5, 1) n (0, 1, 0)
v (-0.5, 0.5, -0.5, 1) n (0, 0, -1)
v (0.5, 0.5, -0.5, 1) n (0, 0, -1)
v (0.5, -0.5, -0.5, 1) n (0, 0, -1)
v (-0.5, -0.5, -0.5, 1) n (0, 0, -1)
v (-0.5, -0.5, -0.5, 1) n (0, -1, 0)
v (0.5, -0.5, -0.5, 1) n (0, -1, 0)
v (0.5, -0.5, 0.5, 1) n (0, -1, 0)
v (-0.5, -0.5, 0.5, 1) n (0, -1, 0)
v (0.5, -0.5, 0.5, 1) n (1, 0, 0)
v (0.5, -0.5, -0.5, 1) n (1, 0, 0)
v (0.5, 0.5, -0.5, 1) n (1, 0, 0)
v (0.5, 0.5, 0.5, 1) n (1, 0, 0)
v (-0.5, -0.5, -0.5, 1) n (-1, 0, 0)
v (-0.5, -0.5, 0.5, 1) n (-1, 0, 0)
v (-0.5, 0.5, 0.5, 1) n (-1, 0, 0)
v (-0.5, 0.5, -0.5, 1) n (-1, 0, 0)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31454205

复制
相关文章

相似问题

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