【问题标题】:UV mapping in Stage3D / AS3Stage3D / AS3 中的 UV 映射
【发布时间】:2013-04-21 16:14:29
【问题描述】:


我编写了一个小波前的 .obj 文件解析器(3d 模型格式),我能够正确显示几何图形,但在正确纹理化它时遇到问题。
我能够获得正确纹理的唯一方法是在我的 3d 编辑器中划分模型,以这种方式导出和解析它。即:我不再共享顶点数据,每个三角形都是独立的,所以我的 indexBuffer 的数组看起来像这样 [0,1,2,3,4,5,6...] 我想避免。

正确的纹理/低效的几何体(不重用顶点:36 个顶点): Correct http://imageshack.us/a/img29/2242/textureright.jpg
错误的纹理/正确的拓扑(共享数据:仅 8 个顶点 = 高效): Wrong http://imageshack.us/a/img443/6160/texturewrong.jpg

我想尝试将 UVs 缓冲区与发往顶点的 indexBuffer 分开,但没有找到方法;如果确实可行。
我也弄乱了 agal 代码,但没有取得任何结果。

理想的结果是能够将不同的 UV 坐标传递到正在绘制的三角形上下文中的同一顶点。
怎么办?
谢谢。 (我是 3d 编程新手)

【问题讨论】:

    标签: actionscript-3 textures texture-mapping stage3d uv-mapping


    【解决方案1】:

    您的模型的每个“顶点位置”似乎只需要一个顶点,但根据我对 .obj 解析器的理解,您需要围绕 FACES 定义顶点。这意味着您可能在某些位置有多个顶点 - 取决于与该位置相邻的面数 - 但回报是您可以在同一位置为这些顶点设置不同的 UV 坐标。
    我建议更改您的解析器以根据它们定义的面创建顶点,而不仅仅是它们的位置。我知道这会增加顶点的数量,但是根据我的阅读,如果您需要为同一顶点位置使用不同的 UV,这是不可避免的。
    所以,不幸的是,我很确定你的第一个选择是要走的路。

    【讨论】:

    • 我不敢相信这是唯一的选择。这并不只适用于 .obj 解析器:假设我想创建一个四边形,它是两个不同颜色的三角形,我相信这可以通过其他方式实现,而不是为这个单个四边形设置 6 个顶点。现有的 stage3d 游戏不可能以这种方式使它们的顶点数量呈指数级增长...感谢您的回答:)
    • 如果您向下滚动到标题为“使用顶点缓冲区和索引缓冲区定义几何图形”,则此页面上有信息...adobe.com/devnet/flashplayer/articles/how-stage3d-works.html 关于顶点缓冲区如何定义面的信息。
    【解决方案2】:

    看来您的焊接操作是错误的。对于焊接顶点,您必须确保位置、UV 坐标、法线和切线(如果需要)相等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-06
      • 2013-11-22
      • 2011-11-28
      • 2017-08-21
      • 2014-02-27
      • 2011-07-15
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多