首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过程性纹理uv误差

过程性纹理uv误差
EN

Stack Overflow用户
提问于 2018-04-02 23:08:20
回答 1查看 78关注 0票数 1

我正在创建一个程序生成平面和紫外线的游戏,它的工作大多很好,但有一个地方,紫外线似乎扭曲在一个非常混乱的方式。

简介: uv被映射到“全局”的uv坐标中,而不是局部的,因为纹理必须与相邻的平面对齐。每个纹理都有一个2*2的平铺,我引入了一个2的uv标度,这意味着每个平面"v“坐标将垂直地映射在纹理的0,0.5范围内,以确保水平"u”坐标不会超出0,1的范围。(水平噪声在某种程度上是不可预测的)。代码:

代码语言:javascript
复制
     Vector2[] CalculateU(float[] leftXMap, float[] rightXMap) {
         int length = leftXMap.Length;
         float totalHeight = (length - 1) * 1;       // distance between two vertices vertically is 1
         float uvheight = totalHeight * uvScale;     // uvScale is 2, purpose is to map a plane's v(vertically), into a range of [0, 0.5]..
         Vector2[] UMap = new Vector2[length * 2];
         for(int i = 0; i < length; i++) {
             float left = leftXMap[i];
             float right = rightXMap[i];
             // make left and right positive.
             while (left < 0) {
                 left += uvheight;
             }
             while(right < 0) {
                 right += uvheight;
             }
             float leftu = (left % uvheight) / uvheight;
             float leftv = (i / (float)(length-1)) / uvScale;
             float rightu = (right % uvheight) / uvheight;
             float rightv = leftv; //(i / (float)length) / 2f;
             UMap[i * 2] = new Vector2(leftu, leftv);
             UMap[i * 2 + 1] = new Vector2(rightu, rightv);

         }
     }

解释:函数的参数,是生成平面的噪声图。噪音是x坐标。而y坐标是0,1,2,.的简单值。(长度-1)

扭曲的纹理:

放大:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 20:19:47

我设法解决了这个问题,当左噪声映射值为负值,右噪声映射为正值时,UV地图就会变得混乱。

因为我总是尝试将所有的负值映射到正值,所以左噪声映射,也就是我的左顶点x坐标,将被映射到正值。但是,它将大于正确的噪声映射(右顶点x坐标)。然后它搞砸了紫外线。

我解决了它完全没有映射,并突然意识到,紫外线的地图值可能是负的,我根本不需要地图!

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

https://stackoverflow.com/questions/49619992

复制
相关文章

相似问题

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