示例#1
0
 /**
  * Draws only the vertices of the given shape in white. Normals and indices are ignored. TODO:
  * negative W are possible, fix plx?
  *
  * @param shape
  * @param t
  */
 private void drawDotty(Shape shape, Matrix4f t) {
   float[] points = null, colors = null;
   for (VertexElement ve : shape.getVertexData().getElements()) {
     switch (ve.getSemantic()) {
       case POSITION:
         points = ve.getData();
         break;
       case COLOR:
         colors = ve.getData();
         break;
       case NORMAL:
         // DO NOT WANT
         break;
       case TEXCOORD:
         // DO NOT WANT
         break;
     }
   }
   for (int i = 0; i < points.length; i += 3) {
     Point4f v = new Point4f(points[i], points[i + 1], points[i + 2], 1);
     Color3f c = new Color3f(colors[i], colors[i + 1], colors[i + 2]);
     t.transform(v);
     int x = Math.round(v.x / v.w);
     int y = Math.round(v.y / v.w);
     if (x >= 0 && y >= 0 && y < colorBuffer.getHeight() && x < colorBuffer.getWidth())
       drawPointAt(x, y, c.get().getRGB());
   }
 }
示例#2
0
 /**
  * Draws all triangles given in <code>indices</code> of the given shape. Ignores normals.
  *
  * @param shape that is about to be drawn
  * @param t accumulated transformation matrix for this shape
  */
 private void drawTrianglesSeparately(Shape shape, Matrix4f t) {
   VertexData vertexData = shape.getVertexData();
   Point4f[] positions = new Point4f[3];
   Color3f[] colors = new Color3f[3];
   Point2f[] texCoords = new Point2f[3];
   int k = 0; // keeps track of triangle
   int[] indices = vertexData.getIndices();
   for (int i = 0; i < indices.length; i++) {
     for (VertexElement ve : vertexData.getElements()) {
       Point4f p;
       switch (ve.getSemantic()) {
         case POSITION:
           p = getPointAt(ve.getData(), indices[i]);
           t.transform(p);
           positions[k] = p;
           k++; // increment k here, bc color and normal might be missing
           break;
         case COLOR:
           colors[k] = getColorAt(ve.getData(), indices[i]);
           ;
           break;
         case NORMAL:
           // dont care
           // normals[k] = getPointAt(ve, indices[i]);;
           break;
         case TEXCOORD:
           texCoords[k] = getTexCoordAt(ve.getData(), indices[i]);
           break;
       }
     }
     if (k == 3) {
       rasterizeTriangle(positions, colors, texCoords, shape.getMaterial());
       k = 0;
     }
   }
 }