2017-01-04 1 views
0

私は画面にクワッドの束をレンダリングしようとしていますが、正しくレンダリングすることができません。1次元配列の一部を2Dとしてレンダリングしますか?

Iの大きさが10000であり、1Dアレイ(100×100)を有し、テクスチャIDを保持する:

mapping = { 1, 22, 55, 28, 95, 105, ...} 

テクスチャファイルは、各画像の16×16画素と、512×512画素を含みます。つまり、合計32x32画像です。テクスチャIDは0から始まる左から右へ行くことによって対応:800×600ピクセルの画面解像度を考えると

0 1 2 3 ... 31 
32 33 34 35 ... 63 

............... 1023 

、「私はこの決議に収まる私の大腿四頭筋のサブセットのみをレンダリングしたいので、私はドン1Dアレイから10000個のクワッドを全て描画したい。これで

for (int j = 0; j < 37; j++) {  // 600/16 = 37 
    for(int i = 0; i < 50; i++) { // 800/16 = 50 
     int quadIndex = j*800/16 + i; 
     int textureID = mapping[quadIndex]; 
     int x = (textureID % 512) * 16; 
     int y = (textureID/512) * 16; 

     // Take image from texture starting at (x,y) and draw on screen at (i, j) 
     draw(i, j, x, y);  
    } 
} 

問題がquadIndexで正確ではありません。

(0,0)のタイルから描画するためには、これは私が持っているものです。最初の行は正しく描画されますが、2行目は実際の2行目ではなく最初の行の続きです。基本的には、最初の行が2番目の行にオーバーフローしています。

私はquadIndexを間違って計算することができると確信していますが、解決策がわかりません。

また、(0,0)から常にではなく、任意の(a、b)オフセットからレンダリングを指定するにはどうすればいいですか?つまり、私の1次元配列では、(4,4)から800x600の解像度に描画したいと思います。

答えて

0

幅はソース配列で、画面の幅ではありません。私が理解する限り、幅はmapping = 100ですか?

int quadIndex = j * 100 + i; 
関連する問題