首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InitializeGrid中的错误在哪里?它返回错误的索引

InitializeGrid中的错误在哪里?它返回错误的索引
EN

Stack Overflow用户
提问于 2019-04-05 15:06:12
回答 1查看 36关注 0票数 1

好了,我正在尝试编写一个矩形,其中包含多个连接在一起的三角形条带。根据:http://www.corehtml5.com/trianglestripfundamentals.php

当您有多行时,您需要处理环绕的三角形。然而,在我的代码示例中使用建议的算法,我得到了不正确的indice结果。

下面是我的示例,其中包含输出。

我尝试了复制/粘贴建议的算法,但它似乎没有返回正确的结果。

代码语言:javascript
复制
// Create the Index Points for the buffer array.
var rows=2;
var cols=3;
var grid = rows*cols;
var offset;
var pos = [];
var index = 0;
var mpOffset = 1;
for (var row = 0; row <= rows; ++row)
{
  offsetY = row * (mpOffset / rows);
  for (var col = 0; col <= cols; ++col)
  {
    offsetX = col * (mpOffset / cols);

    pos[index+0] = (offsetX);
    pos[index+1] = (offsetY);
    index+=2;
  }
}
log.info("pos="+JSON.stringify(pos)); //  <-- Correct working good.
log.info("pos.length="+pos.length);

function initializeGrid(cols,rows)
{
    var trianglestrip = [];
    var RCvertices=2*cols*(rows-1);
    var TSvertices=2*cols*(rows-1)+2*(rows-2);
    var numVertices=TSvertices;
    var j=0;
    for(var i = 1; i <= RCvertices; i += 2)
    {
        trianglestrip[ j ] = (1 +i)/2;
        trianglestrip[ j +1 ] = (cols*2 + i + 1) / 2;
        if( trianglestrip[ j +1 ] % cols == 0) 
        {
            if( trianglestrip[ j +1 ] != cols && trianglestrip[ j +1 ] != cols*rows )
            {
                trianglestrip[ j +2 ] = trianglestrip[ j +1 ];
                trianglestrip[ j +3 ] = (1 + i + 2) / 2;
                j += 2; 
            }
        }
        j += 2;
    }
    return trianglestrip;
}

var triStrip = initializeGrid(cols,rows);
log.info("triStrip="+JSON.stringify(triStrip)); // <-- Bad Not working.
log.info("triStrip.length="+triStrip.length);

// Generating the actual Point strip.
var actualStrip = [];
for (var i = 0 ; i < triStrip.length; ++i)
{
    actualStrip.push(pos[(triStrip[i]-1)*2+0]);
    actualStrip.push(pos[(triStrip[i]-1)*2+1]);
}
log.info("actualStrip="+JSON.stringify(actualStrip));
log.info("actualStrip.length="+actualStrip.length);

指标应为: 1,5,2,6,3,7,4,8,8,5,5,9,6,10,7,11,8,12

EN

回答 1

Stack Overflow用户

发布于 2019-04-05 20:28:57

我最终重新创建了计算三角形条带指数的函数。还没有完全测试它,但它可以在网站上的示例中重新创建3x2网格。

代码如下:

代码语言:javascript
复制
// This calculates the triangle points in a rectangular triangle strip.
// Used for 3D Webgl texture mapping.
// Copyright Joshua Langley 2019.
var rows=2;
var cols=3;
var grid = rows*cols;
var offset;
var pos = [];
var index = 0;
var mpOffset = 1;
var offsetX, offsetY;
for (var row = 0; row <= rows; ++row)
{
  offsetY = row * (mpOffset / rows);
  for (var col = 0; col <= cols; ++col)
  {
    offsetX = col * (mpOffset / cols);

    pos[index+0] = (offsetX);
    pos[index+1] = (offsetY);
    index+=2;
  }
}
log.info("pos="+JSON.stringify(pos));
log.info("pos.length="+pos.length);

var rows=rows+1,cols=cols+1; // Important this counting Points not Squares.
var grid = rows*cols;
var offset;
var indices = [];
var indice = 0;
var offset;
var doublePoints = false;
var tPoint, bPoint;
for (var row = 0; row < rows; ++row)
{ 
  for (var col = 0; col < (cols-1); ++col)
  {
      offset = row * rows + col;
      tPoint = offset+1;
      bPoint = offset+cols+1;

      if (bPoint > grid)
          continue;

      indices.push(tPoint);           
      indices.push(bPoint);
      if (offset > 0 && (bPoint+1) < grid && (offset+1) % cols == 0)
      {
          indices.push(bPoint);
          indices.push(tPoint+1);
      }                   
  }
}
log.info("indices="+JSON.stringify(indices)); // Expected Result
log.info("indices.length="+indices.length);

var actualStrip = [];
for (var i = 0 ; i < indices.length; ++i)
{
    actualStrip.push(pos[(indices[i]-1)*2+0]);
    actualStrip.push(pos[(indices[i]-1)*2+1]);
}
log.info("actualStrip="+JSON.stringify(actualStrip));
log.info("actualStrip.length="+actualStrip.length);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55529953

复制
相关文章

相似问题

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