首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在三维模型上绘制

如何在三维模型上绘制
EN

Computer Graphics用户
提问于 2020-09-16 20:55:20
回答 3查看 278关注 0票数 2

我搜索这个话题已经很长时间了,基本上没有发现任何相关的信息。

如果我们有一个带有紫外线布局的3d模型。用画笔在上述模型上进行3d绘画的基本技术是什么?笔画由连续排列的画笔像素数据/图像组成。那么,我们是否将每一个单独的画笔图像投影到物体的表面?(实际上,为了做到这一点,我们将把对象投影到图像空间上)。我以前曾设法将纹理投射到对象上。而投影每个单独的画图显然是可行的,但我不确定从性能的角度来看,它是否实用,以及是否有更好的技术。

EN

回答 3

Computer Graphics用户

回答已采纳

发布于 2020-09-18 08:18:03

我不能给你一个“更好的”方法,但我认为

将每个单独的画笔图像投影到对象的表面上。

如果使用GPU实现这一点,实际上并不是一个性能问题。特别是在编辑环境中,与电脑游戏相比,没有太多的事情发生。基本上,你想要做的就是在有限的纹理上渲染每帧一幅图像。如果我需要这个特性的话,我可以给你一个草稿,说明我将如何处理这个问题。然而,由于我自己还没有实现它,可能会有一些复杂的问题,我还没有想到,所以在评论中告诉我,如果某些事情不像预期的那样工作。

  1. 找到受影响的曲面
    • 使用笔刷纹理的角点,生成减少的笔刷投影结果。
    • 识别受笔刷影响的子表面/三角形

  2. 收集所有受影响的纹理。你应该知道每个被影响的表面,它所拥有的纹理。最优的情况是,你的整个物体只有一个紫外线纹理。
  3. 创建一个着色程序来渲染你的纹理。
    • 注意,顶点着色器必须计算归一化的UV坐标,并将它们作为顶点位置传递到管道中,因为它们是纹理中的位置。检查传递管道所需的附加信息。
    • 在片段着色器中,覆盖笔刷下的每个像素。您可能需要使用混合这里的非矩形刷。
    • 笔刷的位置有点棘手。你需要它的纹理,紫外线空间,在片段着色器,我不确定你是否可以计算它在顶点着色器。因此,您可能需要在片段着色器或几何图形着色器中这样做。我看到的问题是,画笔投影击中表面的角度无法在顶点着色器中计算,因此有必要确定覆盖面积。几何着色器有足够的信息来计算角度和覆盖面积。在碎片着色器中,你也不能计算角度,但是在那里你可以简单地检查它是否和它在笔刷投影的圆顶中的位置。

  4. 现在,只需渲染到您的纹理。
    • 把你的画笔纹理绑起来
    • 对于每个受影响的纹理
      • 将纹理绑定为呈现目标
      • 呈现所有受影响的对象,并让GPU排序哪些像素需要被覆盖。

  5. (可选)如果您想保存修改,您需要从GPU读取纹理并保存它。

由于主要的工作是由GPU完成,它应该是相当快的。但是,当画笔碰到部分重叠的多个对象/纹理时,我可以看到所描述的方法存在一些问题。整理出画笔的哪个像素会影响到哪个纹理/对象会变得凌乱。可能有一些模板/深度缓冲技巧可以应用,但我认为这是另一个问题的主题。

票数 1
EN

Computer Graphics用户

发布于 2020-09-18 08:13:41

只要不使用纹理上的像素两次,您就可以渲染几何图形并显示uv坐标(纹理坐标)。通常它们是红色和绿色(2d)的组合。当使用画笔时,你只需读出你所点击的紫外线坐标,并在所需颜色的位置(uv)对纹理进行着色。

提示:画到第二个纹理上,这样你就不会破坏原来的纹理颜色。

缺点:有时一个几何中不同三角形的纹理分辨率不同。因此,在某些面孔上,它会看起来很漂亮,而在另一些面孔上,它将被像素化。

如前所述,如果网格(几何图形)两次使用纹理的同一部分(两个面瞄准相同的纹理坐标),而您在其中一个上绘制,另一个也将被绘制。

票数 1
EN

Computer Graphics用户

发布于 2020-09-17 00:19:37

你可以用不同的方式来做。

但对我来说,最符合逻辑的方法是,沿着路径采样点,然后使用样条/苯尼尔曲线使其平滑(附加点可以插值),然后将其投影并保存在纹理上。因此,没有“每一个”点必须抽样。

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

https://computergraphics.stackexchange.com/questions/10231

复制
相关文章

相似问题

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