在 Unity 上绘制 3D 对象

问题描述 投票:0回答:1

我正在开发一个 Unity 项目,我需要在立方体的每个面上独立绘制。然而,当我在一个面上绘制时,变化会同时反映在立方体的所有六个面上。

我使用 Drawer 脚本实现了绘图功能。该脚本管理鼠标单击之间的绘图点,并对它们进行插值以创建平滑的线条。然而,插值逻辑似乎导致绘制的线条出现在立方体的所有面上。

这是我的抽屉脚本的相关部分:

// Relevant code snippet from the Drawer script
private void SetPixelsBetweenDrawPoints()
{
    while (drawPoints.Count > 1)
    {
        Vector2Int startPos = drawPoints.Dequeue();
        Vector2Int endPos = drawPoints.Peek();
        InterpolateDrawPositions(startPos, endPos);
    }
}

IEnumerator DrawToCanvas()
{
    while(true)
    {
        SetPixelsBetweenDrawPoints();
        yield return new WaitForSeconds(drawInterval);
    }
}

void InterpolateDrawPositions(Vector2Int startPos, Vector2Int endPos)
{
    int dx = endPos.x - startPos.x;
    int dy = endPos.y - startPos.y;
    float xinc, yinc, x, y;
    int steps = (Math.Abs(dx) > Math.Abs(dy)) ? Math.Abs(dx) : Math.Abs(dy);
    xinc = ((float)dx / steps) * interpolationPixelCount;
    yinc = ((float)dy / steps) * interpolationPixelCount;
    x = startPos.x;
    y = startPos.y;

    for(int k=0; k < steps; k += interpolationPixelCount)
    {
        canvasDrawOrEraseAt((int)Math.Round(x), (int)Math.Round(y));
        x += xinc;
        y += yinc;
    }
    canvasDrawOrEraseAt(endPos.x, endPos.y);
}

void AddDrawPositions(Vector2Int newDrawPos)
{
    drawPoints.Enqueue(newDrawPos);
}

我想修改这个脚本,以便当我在立方体的一个面上绘制时,更改仅限于该特定面。我怎样才能实现这个目标?我应该修改插值逻辑还是有更好的方法来处理立方体各个面上的绘图?

任何见解或建议将不胜感激。谢谢!

c# unity-game-engine unityscript
1个回答
0
投票

我认为这更像是UV问题而不是脚本问题。您正在使用以这种方式进行 UV 处理的统一立方体对象(每一面都与其他面重叠)。在 Blender 等 3D 程序中创建一个立方体并将其导入,您将得到如下所示的内容: 所以当你在一侧绘图时,它不会显示在另一侧

© www.soinside.com 2019 - 2024. All rights reserved.