Re: A problem with the textures.
Posted by dfewfew on
URL: https://forum.jogamp.org/A-problem-with-the-textures-tp4025533p4025536.html
package com.daltonfilho.tutorials.java3d;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.FileNotFoundException;
import java.util.Enumeration;
import javax.media.j3d.AmbientLight;
import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.Behavior;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.Bounds;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Texture;
import javax.media.j3d.Texture2D;
import javax.media.j3d.TextureAttributes;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.View;
import javax.media.j3d.WakeupCriterion;
import javax.media.j3d.WakeupOnCollisionEntry;
import javax.media.j3d.WakeupOnCollisionExit;
import javax.media.j3d.WakeupOnCollisionMovement;
import javax.media.j3d.WakeupOnElapsedTime;
import javax.media.j3d.WakeupOr;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.geometry.Primitive;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.ConfiguredUniverse;
import com.sun.j3d.utils.universe.SimpleUniverse;
class sss
{
public void aa()
{}
}
public class themain extends Applet implements KeyListener {
public static void main(String[] args)
{
themain aa= new themain();
new MainFrame(aa,400,400);
aa.addKeyListener(aa);
}
class colision extends Behavior
{
WakeupCriterion yawn ;
WakeupCriterion[]
kolizia =new WakeupCriterion[3];
protected WakeupOr oredCriteria;
Shape3D shape;
public colision(Shape3D shape,Bounds granici){
this.shape=shape;
System.out.println("bbbaaa");
setSchedulingBounds(granici);
}
public void initialize() {
kolizia[0]=new WakeupOnCollisionEntry(shape);
kolizia[1] = new WakeupOnCollisionExit(shape);
kolizia[2] = new WakeupOnCollisionMovement(shape);
oredCriteria = new WakeupOr(kolizia);
wakeupOn(oredCriteria);
}
public void processStimulus(Enumeration criteria) {
WakeupCriterion theCriterion = (WakeupCriterion) criteria.nextElement();
if (theCriterion instanceof WakeupOnCollisionEntry) {
themain.this.update(true);
System.out.println("Collided with ");
} else if (theCriterion instanceof WakeupOnCollisionExit) {
themain.this.update(true);
System.out.println("Stopped colliding with "
);
} else {
themain.this.update(true);
System.out.println("Moved whilst colliding with "
);
}
wakeupOn(oredCriteria);
}
}
class main extends Behavior
{
WakeupCriterion yawn ;
public main(){
System.out.println("bbb");
yawn = new WakeupOnElapsedTime(30);
}
public void initialize() {
wakeupOn(yawn);
}
public void processStimulus(Enumeration criteria) {
themain.this.update(false);
wakeupOn(yawn);
}
}
float posokaz = 0.0f;
float posokay=0.0f;
float posokax=5.0f;
float posoka2z = 10.0f;
float posoka2y=0.0f;
float posoka2x=0.0f;
double zawurtane = 0;
Transform3D transform;
Vector3f mqsto;
Transform3D transform2;
Transform3D transform3;
Vector3f mqstomishena;
View gledka;
TransformGroup view;
TransformGroup tg;
TransformGroup tg2;
DirectionalLight light1;
Shape3D korab;
Background background =null;
Shape3D mishena;
Shape3D truba;
Transform3D lookat ;
ConfiguredUniverse ss;
ConfiguredUniverse universe ;
ObjectFile f;
Scene s = null;
BranchGroup b ;
public themain ()
{
//javax.media.j3d.View.setFrontClipDistance(22);
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
// canvas.setBounds(10000, 10000, 10000, 10000);
universe = new ConfiguredUniverse(canvas);
tg = new TransformGroup();
tg2 =new TransformGroup();
tg2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transform = new Transform3D();
transform2 = new Transform3D();
transform3 = new Transform3D();
lookat= new Transform3D();
View view = canvas.getView();
view.setBackClipDistance(300f);
mqsto =new Vector3f(posokax,posokay,posokaz);
mqstomishena =new Vector3f(0,0,0);
// mqstomishena =new Vector3f(20,0,0);
add( canvas);
canvas.addKeyListener(this);
transform.setTranslation(mqsto);
background=new Background();
TextureAttributes texAttr = new TextureAttributes();
texAttr.setTextureMode(TextureAttributes.MODULATE);
//background.setColor(1.0f, 0.0f, 0.0f);
background.setCapability(Background.ALLOW_APPLICATION_BOUNDS_WRITE);
gledka=new View();
lookat.lookAt(new Point3d(0,0,0), new Point3d(mqsto.getX(),mqsto.getY(),mqsto.getZ()), new Vector3d() );
lookat.setTranslation(mqsto);
transform2.setTranslation(mqstomishena);
tg.setTransform(transform);
gledka.setBackClipDistance(3);
gledka.setFrontClipDistance(30);
// gledka.addCanvas3D(canvas);
tg2.setTransform(transform);
String s1 = "samolet.obj";
String s2 = "mishena.obj";
String s3 = "truba.obj";
TextureLoader loader = new TextureLoader("rujda.jpg",this);
Texture2D brick = (Texture2D)loader.getTexture();
brick.setEnable(true);
TextureAttributes ta = new TextureAttributes();
BranchGroup group = new BranchGroup();
korab=loader(s1);
b.removeChild(0);
mishena = loader(s2);
b.removeChild(0);
truba=loader(s3);
b.removeChild(0);
Color3f light1Color = new Color3f(0f, 255f, 1f);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0,
0.0), 100.0);
bounds.setRadius(Float.MAX_VALUE);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
light1 = new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
background.setApplicationBounds(bounds);
background.setName("rujda.jpg");
AmbientLight ambientLightNode = new AmbientLight (light1Color);
ambientLightNode.setInfluencingBounds (bounds);
Appearance ap = new Appearance();
Color3f col = new Color3f(0.0f, 0.0f, 22.0f);
ap.setTextureAttributes(texAttr);
ap.setTexture(brick);
mishena.setAppearance(ap);
truba.setAppearance(ap);
korab.setAppearance(ap);
tg.addChild(mishena);
tg.addChild(truba);
tg2.addChild(korab);
Sphere mySphere = new Sphere(0.7f,Primitive.GENERATE_TEXTURE_COORDS,ap);
tg2.addChild(mySphere);
//tg.addChild(view);
tg.addChild(ambientLightNode);
MouseRotate myMouseRotate = new MouseRotate();
myMouseRotate.setTransformGroup(tg);
myMouseRotate.setSchedulingBounds(new BoundingSphere());
group.addChild(tg);
group.addChild(background);
group.addChild(tg2);
group.addChild(light1);
main loop = new main();
colision colisions = new colision(korab,bounds);
loop.setSchedulingBounds(bounds);
colisions.setSchedulingBounds(bounds);
group.addChild(loop);
group.addChild(colisions);
universe.getViewingPlatform().setNominalViewingTransform();
universe.getViewingPlatform().getViewPlatformTransform().setTransform(transform);
universe.addBranchGraph(group);
this.setVisible(true);
}
public static Texture getTexture(String path)
{
TextureLoader texLoader = new TextureLoader(path, null);
Texture texture = texLoader.getTexture();
if (texture == null)
System.out.println("Cannot load texture from " + path);
else {
System.out.println("Loaded texture from " + path);
// texture.setEnable(true);
}
return texture;
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_NUMPAD2)
{
System.out.println("aa");
posokax=posokax+10.f;
mqsto.setX(posokax);
transform.setTranslation(mqsto);
tg.setTransform(transform);
}
if(e.getKeyCode()==KeyEvent.VK_A)
{
System.out.println("aa");
zawurtane=zawurtane+0.01;
transform2.rotZ(zawurtane);
tg2.setTransform(transform2);
}
if(e.getKeyCode()==KeyEvent.VK_D)
{
zawurtane=zawurtane-0.01;
transform2.rotZ(zawurtane);
tg2.setTransform(transform2);
}
if(e.getKeyCode()==KeyEvent.VK_NUMPAD2)
{
System.out.println("aa");
posokax=posokax+10.f;
mqsto.setX(posokax);
transform.setTranslation(mqsto);
tg.setTransform(transform);
}
if(e.getKeyCode()==KeyEvent.VK_NUMPAD8)
{
System.out.println("aa");
posokax=posokax-10.f;
mqsto.setX(posokax);
transform.setTranslation(mqsto);
tg.setTransform(transform);
}
if(e.getKeyCode()==KeyEvent.VK_NUMPAD4)
{
System.out.println("aa");
posokay=posokay+10.f;
mqsto.setY(posokay);
transform.setTranslation(mqsto);
tg.setTransform(transform);
zawurtane=zawurtane+0.05;
transform.rotZ(zawurtane);
tg.setTransform(transform);
}
if(e.getKeyCode()==KeyEvent.VK_NUMPAD6)
{
System.out.println("aa");
posokay=posokay-10.f;
mqsto.setY(posokay);
transform.setTranslation(mqsto);
tg.setTransform(transform);
zawurtane=zawurtane-0.05;
transform.rotZ(zawurtane);
tg.setTransform(transform);
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
public Shape3D loader(String s1)
{
f = new ObjectFile ();
try{
s = f.load (s1);
}
catch(FileNotFoundException e)
{
System.out.println(e);
}
b = s.getSceneGroup();
return (Shape3D) b.getChild(0);
}
public void update(boolean kol)
{
if (kol==true)
{
transform.setTranslation(new Vector3f(0,0,0));
tg.setTransform(transform);
posokaz=0f;
}
else{
posokaz=posokaz+100f;
transform.rotY(0);
transform.setTranslation(new Vector3f(posokay,posokax,posokaz));
tg.setTransform(transform);
}
transform2.setTranslation(new Vector3f(posoka2y,posoka2x,10000));
tg2.setTransform(transform2);
//lookat.lookAt(new Point3d(0,0,0), new Point3d(mqsto.getX(),mqsto.getY(),mqsto.getZ()), new Vector3d() );
universe.getViewingPlatform().getViewPlatformTransform().setTransform(transform2);
}
}