2

QT でアイソメトリック グリッドを描画するのに苦労しています。せん断操作だけでスケーリングも正しいですが、最後に回転を追加するとすぐに、グリッドが参照と一致しなくなります: http://vector.tutsplus.com/tutorials/designing/quick-tip -等尺性グリッドを 2 分以内に作成する方法/

QTransformが間違った結果を生成する理由を誰かが理解するのを手伝ってくれますか?

void drawForeground(QPainter * painter, const QRectF& rect) //Draw isometric grid
{
    if(!CurrentActiveMap)return;

    QColor Col(0, 0, 0, 128);
    QPen G(Col);
    G.setDashPattern(QVector<qreal>() << 2 << 2);
    painter->setPen(G);

    int mx = CurrentActiveMap->MapTilesWidth;  //128
    int my = CurrentActiveMap->MapTilesHeight; //128
    int px = CurrentActiveMap->TilePixelSizeX; //32
    int py = CurrentActiveMap->TilePixelSizeY; //32

    int tx = mx * px; //Total pixels x
    int ty = my * py; //Total pixels y

    int XOrigin = 0;
    int YOrigin = 0;

    for(int x = 0; x <= tx; x += px)
    for(int y = 0; y <= ty; y += py)
    {
        int XAdder = px;
        int YAdder = py;

        if(x + px > tx)XAdder = 0; //Prevent overdraw
        if(y + py > ty)YAdder = 0; //Prevent overdraw

        QTransform TF = QTransform()/*.scale(1.0, 0.86062)*/.shear(-0.523598776, 0).rotate(30.0, Qt::ZAxis); //Make isometric matrix to transform gridlines
        painter->setTransform(TF);

        painter->drawLine(XOrigin + x, YOrigin + y, XOrigin + x + XAdder, YOrigin + y);
        painter->drawLine(XOrigin + x, YOrigin + y, XOrigin + x, YOrigin + y + YAdder);
    }
}

ここに画像の説明を入力

4

0 に答える 0