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);
}
}