I'm having a little difficulty and being a complete newbie to using the API
am not sure where to find an answer.
When I apply textures using setTexCoordGeneration everything works fine. I
would like to be able to set the coordinates without this method but the
texture does not render.
I am creating Shape3D objects out of dynamic data. I am using QuadArrays to
define the geometry through GeometryInfo.
The code looks something like this(cut down):
class QuadShape extends Shape3D {
...
if(sttexurl!=null){
// stlook.setTexCoordGeneration(sttexgen); //uncommenting this works and
textures applied
TextureLoader sttexl = new TextureLoader(sttexurl,
TextureLoader.GENERATE_MIPMAP , null);
sttex = (Texture2D)sttexl.getTexture();
sttex.setEnable(true);
TextureAttributes ta = new TextureAttributes();
stlook.setTextureAttributes(ta);
}
try{
sttexurl = new URL(serverpath+texurl1);
}catch(Exception e){
System.out.println("error loading image in"+this+": "+e+" @url: "+sttexurl);
}
stmat.setLightingEnable(true);
stmat.setAmbientColor(1.0f,1.0f,1.0f);
stmat.setDiffuseColor(1.0f,1.0f,1.0f,0.0f);
stmat.setEmissiveColor(0.0f,0.0f,0.0f);
stmat.setSpecularColor(0.0f,0.0f,0.0f);
stmat.setShininess(0.0f);
stmat.setLightingEnable(true);
stlook.setMaterial(stmat);
stlook.setTexture(sttex);
TextureAttributes sttexa = new TextureAttributes();
sttexa.setTextureMode(sttexa.MODULATE);
stlook.setTextureAttributes(sttexa);
...
//this method takes the data that has been interpreted and sets the geometry
public void compileQuads(Appearance stlook){
if(stverts.size()>0){
float[] verts = new float[stverts.size()];
int n = 0;
Iterator it = stverts.iterator();
while(it.hasNext()){
Object o = it.next();
try{
Float ff =(Float)o;
float f = ff.floatValue();
verts[n++]= f;
}catch(Exception e){
System.out.println(e + " // on number: '" +
o.toString());
}
}
Vector3f[] normals = new Vector3f[stnorms.size()];
n = 0;
it = stnorms.iterator();
while(it.hasNext()) normals[n++]=((Vector3f)it.next());
int numfaces = normals.length;
int numpoints = numfaces*4;
QuadArray tileset = new QuadArray(numpoints,
QuadArray.TEXTURE_COORDINATE_2 | QuadArray.COORDINATES | QuadArray.NORMALS);
tileset.setCoordinates(0, verts);
GeometryInfo gitileset = new GeometryInfo(tileset);
NormalGenerator normilizer = new NormalGenerator();
normilizer.generateNormals(gitileset);
//sttexcs is a Vector loaded with a repetition of {TexCoord2f(0.0f,
0.0f), TexCoord2f(1.0f, 0.0f), TexCoord2f(1.0f, 1.0f), TexCoord2f(0.0f,
1.0f)} for each face
Object[] rtexarr = sttexcs.toArray();
TexCoord2f[] texarr = new TexCoord2f[rtexarr.length];
for(int i=0;i<rtexarr.length;i++)texarr[i]=(TexCoord2f)rtexarr[i];
//these lines should set the texture coordinate data
gitileset.setTextureCoordinateParams(texarr.length,2);
gitileset.setTextureCoordinates(0, texarr);
setAppearance(stlook);
setGeometry(gitileset.getGeometryArray());
}
...
}
I get an error:
"Missing Texture Coordinate data list"
If anyone would be kind enough to let me know what I need to do to enable
the textures or what I should look out for when trying to make
TexCoodinates I would be most grateful. I know I am just missing something
simple due to my lack of experience with the API or language.
Matthew Barnes
===========================================================================
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".