again :o(

I changed my code parts for using J3DBuffer's, but again I got a problem.
I have compared my code with the 'GeometryByReferenceNIOBuffer' Example and I
can't figure out any differences in principle..

code bellow works fine with useBuffers false, but setting it to true nothing is
rendered.. i played it bit with the code and noticed that
geomArray.getCoordRefBuffer() returns a null-reference.. but before setting
J3DBuffer everything is fine..

any ideas what I have done wrong ?
(also removed USE_COORD_INDEX_ONLY and set all indices, but didn't change
anything..)

greetings
 -Michael Nischt

CODE:
------------------------------------
  boolean useBuffers = false;
        if(useBuffers)
            vertexFormat = GeometryArray.BY_REFERENCE |
GeometryArray.USE_NIO_BUFFER | GeometryArray.USE_COORD_INDEX_ONLY |
GeometryArray.COORDINATES | GeometryArray.NORMALS |
GeometryArray.TEXTURE_COORDINATE_2;
        else
            vertexFormat = GeometryArray.BY_REFERENCE |
GeometryArray.USE_COORD_INDEX_ONLY | GeometryArray.COORDINATES |
GeometryArray.NORMALS | GeometryArray.TEXTURE_COORDINATE_2;
        IndexedTriangleArray geomArray = new IndexedTriangleArray(numVertices,
vertexFormat, texCoordSetCount, texCoordSetMap , numIndices);

        geomArray.setCapability(GeometryArray.ALLOW_REF_DATA_READ);
        geomArray.setCapability(GeometryArray.ALLOW_REF_DATA_WRITE);

        float[] coords = mesh.getCoords(0);
        float[] normals = mesh.getNormals(0);

        ByteOrder order = ByteOrder.nativeOrder();

        if(useBuffers) {

            FloatBuffer coordBuffer = ByteBuffer.allocateDirect(coords.length *
4).order(order).asFloatBuffer();
            FloatBuffer normalBuffer = ByteBuffer.allocateDirect(normals.length
* 4).order(order).asFloatBuffer();

            coordBuffer.put(coords, 0, coords.length);
            normalBuffer.put(normals, 0, normals.length);


            geomArray.setColorRefBuffer(new J3DBuffer(coordBuffer));
            geomArray.setNormalRefBuffer(new J3DBuffer(normalBuffer));
        }
        else {
            geomArray.setCoordRefFloat(coords);
            geomArray.setNormalRefFloat(normals);
        }

        geomArray.setCoordinateIndices(0, mesh.getIndices());
        //geomArray.setNormalIndices(0, mesh.getIndices());

        TextureUnitState[] texUnits = new TextureUnitState[texCoordSetCount];

        Appearance ap = new Appearance();
        ap.setMaterial(DEFAULT_MATERIAL);
        ap.setPolygonAttributes(DEFAULT_POLYGON_ATTRIBUTES);
        ap.setTextureUnitState(texUnits);


        for(int i=0; i<texCoordSetCount; i++) {
            float[] texCoords = mesh.getTexCoords();
            if(useBuffers) {
                FloatBuffer texCoordBuffer =
ByteBuffer.allocateDirect(texCoords.length * 4).order(order).asFloatBuffer();
                texCoordBuffer.put(texCoords, 0, texCoords.length);
                geomArray.setTexCoordRefBuffer(i, new
J3DBuffer(texCoordBuffer));
            }
            else
                geomArray.setTexCoordRefFloat(i, texCoords);


            //geomArray.setTextureCoordinateIndices(i, 0, mesh.getIndices());
            TextureUnitState texUnit = new TextureUnitState();
            texUnit.setTexture(mesh.getTexture(i));
            ap.setTextureUnitState(i, texUnit);
        }


        shape.setAppearance(ap);
        shape.setGeometry(geomArray);

        this.getNode().addChild(shape);
------------------------------------

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to