如何在Gideros中创建三维网格顶点

我第一次使用Lua,当然需要查找学习如何实现某些代码。

Gideros中创建一个顶点的代码如下:

 mesh:setVertex(index, x, y)

然而,我也想使用z坐标。 我一直在查找,但没有找到任何帮助。有人知道Gideros是否有这种方法,或者如何设置z坐标的技巧吗?

点赞
用户2858170
用户2858170

首先,这些功能不是由 Lua 提供的,而是由 Gideros Lua API 提供的。原生 Lua 中没有网格或其它类似的东西。

参考 Gideros Lua API 参考手册会给你一些有价值的提示:

http://docs.giderosmobile.com/reference/gideros/Mesh#Mesh

Mesh 可以是 2D 或 3D,后者在它的顶点中期望有一个额外的 Z 坐标。

http://docs.giderosmobile.com/reference/gideros/Mesh/new

Mesh.new([is3d])

参数:

is3d:(布尔值)指定这个网格在其顶点数组中期望有 Z 坐标,因此是一个 3D 网格。

因此,要创建一个 3D 网格,你需要这样做:

local myMesh = Mesh.new(true)

虽然手册中没有说你可以在 setVertex 中使用 z 坐标

http://docs.giderosmobile.com/reference/gideros/Mesh/setVertex

但很有可能可以这样做。

因此,让我们看一下 Gideros 源代码:

https://github.com/gideros/gideros/blob/1d4894fb5d39ef6c2375e7e3819cfc836da7672b/luabinding/meshbinder.cpp#L96-L109

int MeshBinder::setVertex(lua_State *L)
{
    Binder binder(L);
    GMesh *mesh = static_cast<GMesh*>(binder.getInstance("Mesh", 1));

    int i = luaL_checkinteger(L, 2) - 1;
    float x = luaL_checknumber(L, 3);
    float y = luaL_checknumber(L, 4);
    float z = luaL_optnumber(L, 5, 0.0);

    mesh->setVertex(i, x, y, z);

    return 0;
}

在这里,你可以看到你确实可以提供一个 z 坐标并将其使用。

因此,

local myMesh = Mesh.new(true)
myMesh:SetVertex(1, 100, 20, 40)

应该可以工作得很好。

顺便说一下,你可以简单地尝试一下。它是免费的,不会有害的,而且是最好的学习方式!

2018-04-10 08:29:06