Project

General

Profile

Download (3.82 KB) Statistics
| Branch: | Revision:

library / src / main / java / org / distorted / library / GridBitmap.java @ 6a06a912

1
package org.distorted.library;
2

    
3
import java.nio.ByteBuffer;
4
import java.nio.ByteOrder;
5

    
6
///////////////////////////////////////////////////////////////////////////////////////////////////
7

    
8
class GridBitmap extends GridObject
9
  {
10

    
11
///////////////////////////////////////////////////////////////////////////////////////////////////
12

    
13
  GridBitmap(int xLength, int yLength)
14
    {
15
    dataLength = 2*xLength*(yLength-1)+2*(yLength-2); // (yLength-1) strips, 2*xLength triangles in each, plus 2 degenerate triangles per each of (yLength-2) joins 
16
    final short[] indexData = new short[dataLength];
17
    
18
    int offset=0;    
19
    for(int y=0; y<yLength-1; y++) 
20
      {
21
      if (y>0) indexData[offset++] = (short) (y*xLength); // Degenerate begin: repeat first vertex
22

    
23
      for (int x = 0; x < xLength; x++) 
24
        {
25
        indexData[offset++] = (short) (( y   *xLength)+x);
26
        indexData[offset++] = (short) (((y+1)*xLength)+x);
27
        }
28

    
29
      if (y<yLength-2) indexData[offset++] = (short) (((y+1)*xLength) + (xLength-1)); // Degenerate end: repeat last vertex
30
      }
31

    
32
    // for(int g=0; g<dataLength; g++) Log.e(TAG_BACKGROUND, "index["+g+"]="+indexData[g]);
33

    
34
    float[] bufferData= new float[COLOR_DATA_SIZE*dataLength];
35

    
36
    offset=0;
37
    for(int i=0; i<dataLength; i++)
38
      {
39
      bufferData[offset++] = 1.0f; // r
40
      bufferData[offset++] = 1.0f; // g
41
      bufferData[offset++] = 1.0f; // b
42
      bufferData[offset++] = 1.0f; // a
43
      }
44
    mGridColors = ByteBuffer.allocateDirect(COLOR_DATA_SIZE*dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();                                                        
45
    mGridColors.put(bufferData).position(0); 
46

    
47
    bufferData = new float[NORMAL_DATA_SIZE*dataLength];
48

    
49
    offset=0;
50
    for(int i=0; i<dataLength; i++)
51
      {
52
      bufferData[offset++] = 0.0f; // x
53
      bufferData[offset++] = 0.0f; // y
54
      bufferData[offset++] = 1.0f; // z
55
      }
56
    mGridNormals = ByteBuffer.allocateDirect(NORMAL_DATA_SIZE*dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();                                                        
57
    mGridNormals.put(bufferData).position(0); 
58

    
59
    float tmpx,tmpy,tmpz;
60
    bufferData = new float[TEX_DATA_SIZE*dataLength];
61

    
62
    offset=0;
63
    for(int i=0; i<dataLength; i++)
64
      {
65
      tmpx = ((float)(indexData[offset/2]%xLength))/(xLength-1);
66
      tmpy = ((float)(indexData[offset/2]/xLength))/(yLength-1);
67

    
68
      bufferData[offset++] = tmpx; // s=x
69
      bufferData[offset++] = tmpy; // t=y
70
      }
71
    mGridTexture = ByteBuffer.allocateDirect(TEX_DATA_SIZE*dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();                                                        
72
    mGridTexture.put(bufferData).position(0); 
73

    
74
    //for(int g=0; g<dataLength; g++) Log.e(TAG_BACKGROUND, "tex["+g+"]=("+bufferData[2*g]+","+bufferData[2*g+1]+")");
75
    //Log.e(TAG, "regWidth="+(2*mRegW)+" regHeight="+(2*mRegH)+" xLength="+xLength+" yLength="+yLength);
76

    
77
    offset=0;
78
    bufferData= new float[POSITION_DATA_SIZE*dataLength];
79

    
80
    for(int i=0; i<dataLength; i++)
81
      {
82
      tmpx = ((float)(indexData[offset/3]%xLength))/(xLength-1);
83
      tmpy = ((float)(indexData[offset/3]/xLength))/(yLength-1);
84
      tmpz = 0;
85

    
86
      bufferData[offset++] = (tmpx-0.5f); // x
87
      bufferData[offset++] = (0.5f-tmpy); // y
88
      bufferData[offset++] =        tmpz; // z
89
      }
90
    mGridPositions = ByteBuffer.allocateDirect(POSITION_DATA_SIZE*dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();                                                        
91
    mGridPositions.put(bufferData).position(0); 
92

    
93
    //for(int g=0; g<dataLength; g++) android.util.Log.e("BACKGROUND", "pos["+g+"]=("+bufferData[3*g]+","+bufferData[3*g+1]+")");
94
    }
95
  };
96

    
97
///////////////////////////////////////////////////////////////////////////////////////////////////
(20-20/28)