Toon posts:

[Java3d] texture naar de voorgrond

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een opdracht ben ben ik bezig met een aantal andere in java3d een virtuele abstracte wereld te bouwen. Dit wordt een soort van showroom waar je een auto kan kopen.

Opzich loopt het allemaal lekker echter we hebben nu een probleempje waar we niet uitkomen. We hebben een prijskaartje dat gemaakt is van een Text2D object. Deze heeft de capabilities dat ie verandert kan worden. Dus als de auto aangepast wordt zal de prijs ook aangepast worden.

Nu het probleem, als de auto verkocht wordt dan is het de bedoeling dat er een sticker met verkocht overheen komt. Wat we hebben geprobeerd is een texture erover heen te laden. De texture was geen probleem, het laden van de texture ook niet maar het eroverheen zetten wel.

Enige code die we geprobeerd hebben is om een texture op een box te laden en die dan transparant weer te geven.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Load in the Texture File
        TextureLoader loader = new TextureLoader("models/verkocht.gif",null);
        //Create Texture object
        Texture brick = loader.getTexture();
        //Create Appearance Object
        Appearance appearance = new Appearance();
        TextureAttributes ta = new TextureAttributes();
        appearance.setTextureAttributes(ta);
        // Attach Texture object to Appearance object
        appearance.setTexture(brick);
        // Create Shape object and assign it the Appearance object.
        Box mySphere = new Box(0.2f, 0.1f, 0.0f,Primitive.GENERATE_TEXTURE_COORDS,appearance);

        BranchGroup extra = new BranchGroup();
        extra.addChild(mySphere);
        priceBG.addChild(extra);


Wat we ook geprobeerd hebben is om de texture in een Shape3d te krijgen met daarnaast een QuadArray om de plek aan te geven. De QuadArray is in dit geval een kopie van de QuadArray van de text2d om de goed plek te krijgen. De QuadArray is aangevuld met textureCoordinaten om die ook goed te zetten. Op deze manier komt ie mooi op de goede plek te staan maar we krijgen hem maar niet naar de voorgrond.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
QuadArray plane = new QuadArray(4, GeometryArray.COORDINATES
                                        | GeometryArray.TEXTURE_COORDINATE_2);

      Geometry g = text2d.getGeometry();
      plane = (QuadArray) g;

     Point2f q = new Point2f( 1.0f,  0.0f);
      plane.setTextureCoordinate(0, q);
      q.set(1.0f, 1.0f);
      plane.setTextureCoordinate(1, q);
      q.set(0.0f, 1.0f);
      plane.setTextureCoordinate(2, q);
      q.set(0.0f, 0.0f);
      plane.setTextureCoordinate(3, q);

      Appearance appear = new Appearance();

      TextureLoader loader = new TextureLoader("models/verkocht.gif", null);
      ImageComponent2D image = loader.getImage();

      // can't use parameterless constuctor
      Texture2D texture = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA,image.getWidth(), image.getHeight());

      texture.setImage(0, image);

      appear.setTexture(texture);

      Shape3D planeObj = new Shape3D(plane, appear);

      BranchGroup extra = new BranchGroup();
      extra.addChild(planeObj);
      priceBG.addChild(extra);


Heeft er iemand enig idee hoe we de texture op de voorgrond kunnen krijgen of heeft iemand een ander oplossing voor het plaatsen van de sticker?

Alvast bedankt

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:27

crisp

Devver

Pixelated

java hoort in /14

W&G --> P&W

Intentionally left blank


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je moet de sticker iets naar voren bewegen. Precies erop werkt namelijk niet, of slechts soms (dan krijg je z-fighting). Geen idee wat de stand van zaken bij Java3D nu is, maar toen ik ermee werkte (1.5 jaar terug) was het niet echt flexible, en kon je z-writes niet zetten op iets als LESS_OR_EQUAL ipv LESS.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.