Eine Frage zur ViewBesetzung

Status
Nicht offen für weitere Antworten.

Developer_X

Top Contributor
HI, ich hab eine frage an euch, wie kann ich
die folgende Methode in mein Java3D Programmeinbauen, ohne dass folgende Fehlermeldung kommt?
Java:
	public void setView()
	{
		view = new Transform3D();
		view.setTranslation(new Vector3f(0,0,0.5f));
		View = new TransformGroup();
		View.setTransform(view);
		View.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		View = u.getViewingPlatform().getViewPlatformTransform();
		
		viewPoint = new Transform3D();
		viewPoint.rotY(Math.toRadians(rot));
		viewPoint.setTranslation(new Vector3f(x,y,z));
		ViewPoint = new TransformGroup();
		ViewPoint.setTransform(viewPoint);
		ViewPoint.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                         ViewPoint.addChild(View);
		
	}
Code:
Exception in thread "main" javax.media.j3d.MultipleParentException: Group.addChild: child already has a parent
	at javax.media.j3d.GroupRetained.checkValidChild(GroupRetained.java:452)
	at javax.media.j3d.GroupRetained.addChild(GroupRetained.java:461)
	at javax.media.j3d.Group.addChild(Group.java:271)
	at Game1.Game3D21.setView(Game3D21.java:120)
	at Game1.Game3D21.<init>(Game3D21.java:52)
	at Game1.Game3D21.main(Game3D21.java:166)
 

Marco13

Top Contributor
Da gibt's fast nur eine Möglichkeit:
Java:
try
{
    setView();
}
catch (Exception e)
{
    // Do nothing...
}

Ansonsten müßtest du die Methode so ändern, dass nicht ein Knoten, der schon ein parent hat, zu einen anderen hinzugefügt wird.
 

Developer_X

Top Contributor
ich habs versucht, mit dem zwischenSchritt TransView
geht aber auch nicht, hier mal mein gesamter Code:
Java:
package Game1;

import java.awt.event.*;
import java.awt.*;

import javax.media.j3d.*;
import javax.swing.*;
import javax.vecmath.*;

import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;

@SuppressWarnings("serial")
public class Game3D21 extends JFrame implements KeyListener, MouseMotionListener
{
	//Attribute
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		
		float x,y,z;
		float rot;
		
		Transform3D viewPoint;
		TransformGroup ViewPoint;
		
		Transform3D transview = new Transform3D();
		TransformGroup TransView = new TransformGroup();
		
		BranchGroup X = new BranchGroup();
		
		Transform3D view;
		TransformGroup View;
		
	    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0);

	    SimpleUniverse u;
	    
	//Constructor
	public Game3D21()
	{
		super("Game3D21");
		//sets n' adds
		setSize(d);
		setUndecorated(true);		
		setLayout(new BorderLayout());

		addWindowListener(new WindowListener());
		
		BranchGroup scene = createScene();       
		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);
        add("Center", canvas);       
        canvas.addKeyListener(this);
        canvas.addMouseMotionListener(this);
        u = new SimpleUniverse(canvas);       
        u.addBranchGraph(scene);
        try
        {
		setView();
        }
        catch(Exception e)
        {
        	
        }
		setVisible(true);
	}
	
	//implement Methods
	public void keyPressed(KeyEvent arg0) 
	{		
		if(arg0.getKeyCode()==KeyEvent.VK_UP)
		{
			forward();
		}
		else if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
		{
			backward();
		}
		else if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
		{
			leftward();
		}
		else if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			rightward();
		}
	}

	public void keyReleased(KeyEvent arg0) 
	{		
	}

	public void keyTyped(KeyEvent arg0)
	{
	}
	
	//Most Important Methods!!!
	public void forward()
	{
		
	}
	public void backward()
	{
		
	}
	public void leftward()
	{
		
	}
	public void rightward()
	{
		
	}

	
	public void setView()
	{
		view = new Transform3D();
		View = new TransformGroup();
		View.setTransform(view);
		View.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		View = u.getViewingPlatform().getViewPlatformTransform();
		
		transview = new Transform3D();
		transview.setTranslation(new Vector3f(0,0,0.5f));
		TransView = new TransformGroup();
		TransView.setTransform(transview);		
		TransView.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		
		viewPoint = new Transform3D();
		viewPoint.rotY(Math.toRadians(rot));
		viewPoint.setTranslation(new Vector3f(x,y,z));
		ViewPoint = new TransformGroup();
		ViewPoint.setTransform(viewPoint);
		ViewPoint.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		ViewPoint.addChild(TransView);

	}
	
	public void mouseDragged(MouseEvent arg0)
	{		
	}


	public void mouseMoved(MouseEvent arg0) 
	{	
		
		double x = MouseInfo.getPointerInfo().getLocation().getX(); 
	  //double y = MouseInfo.getPointerInfo().getLocation().getY();
		
		if(x<=d.width/2)
		{
			if(rot>=-45)
			{
			rot = rot - 0.1f;
			viewPoint.rotY(Math.toRadians(rot));
			ViewPoint.setTransform(viewPoint);
			
			View.getTransform(transview);
			
			}
			else
			{
				;
			}
		}
		else if(x>d.width/2)
		{
			if(rot<=+45)
			{
			rot = rot + 0.1f;
			viewPoint.rotY(Math.toRadians(rot));
			ViewPoint.setTransform(viewPoint);
			
			View.getTransform(transview);
			}
			else
			{
				;
			}
		}

	}
 	
	//Main
	public static void main(String[]arg)
	{
		new Game3D21();
	}

	//3DGroups
	public BranchGroup createScene()
	{
		X = new BranchGroup();
		
		Transform3D b1 = new Transform3D();
		b1.setTranslation(new Vector3f(0,0,-2));
		TransformGroup B1 = new TransformGroup();
		B1.setTransform(b1);
		X.addChild(B1);
		B1.addChild(new Sphere(0.1f,null));
		
//////////////Lights
	       Color3f lightColor = new Color3f(.3f,.3f,.3f);
	       AmbientLight ambientLight= new AmbientLight(lightColor);
	       ambientLight.setInfluencingBounds(bounds);
	       X.addChild(ambientLight);
	       DirectionalLight directionalLight = new DirectionalLight();
	       directionalLight.setColor(lightColor);
	       directionalLight.setInfluencingBounds(bounds);
	       X.addChild(directionalLight);       
		
		return X;
	}
	
	//Classes
	class WindowListener extends WindowAdapter{public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}}

}

Da kommt zwar keine Exception mehr, dafür aber, bewegt sich die Kamera nicht mehr
 

Developer_X

Top Contributor
Wenn ich dich noch was fragen könnte, gibt es einen Listener, für Mäuse, der abfragt, ob die maus nach links oder rechts bewegt wird?
 

Marco13

Top Contributor
Alle Transforms, die du ausführen willst, kannst du in die "View" schreiben - es gibt keinen Grund für eine "ViewPoint".

Mausbewegungen kann man mit MouseBehaviours abfragen.
 

Developer_X

Top Contributor
doch es gibt einen grund, ich will dass die TransformGroup ViewPoint durch den KeyLístener bewegt wird, hab ich da jetzt nicht ist aber so, zweites will ich dass View sich um ViewPoint dreht, wenn ich die maus bewege
 

Developer_X

Top Contributor
Das man Maus bewegungen mit MouseBehaviors abfangen kann ist mir bewusst, ich würde sie aber gerne implementieren
 

Marco13

Top Contributor
Sinngemäß:

Transform3D transformVonDerTastatur = ... Wird mit der Tastatur verändert
Transform3D transformVonDerMaus = ... Wird mit der Maus verändert

Transform3D transformFürDieView = transformVonDerTastatur.mul(transformVonDerMaus );
u.getViewingPlatform().getViewPlatformTransform().setTransform(transformFürDieView );
 

Developer_X

Top Contributor
gut danke schön, das mit dem "mul" hat mich weiter gebracht
doch ich habe immer noch 2 Probleme:
1.Problem
Jetzt bewegt sie seltsamerweise gar ncihts mehr wenn ich die maus beweg:
Java:
package Game1;
 
import java.awt.event.*;
import java.awt.*;
 
import javax.media.j3d.*;
import javax.swing.*;
import javax.vecmath.*;
 
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
 
@SuppressWarnings("serial")
public class Game3D21 extends JFrame implements KeyListener, MouseMotionListener
{
    //Attribute
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        
        float x,y,z;
        float rot;
        
        Transform3D viewPoint;
                
        BranchGroup X = new BranchGroup();
        
        Transform3D view;
        TransformGroup View;
        
        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0);
 
        SimpleUniverse u;
        
    //Constructor
    public Game3D21()
    {
        super("Game3D21");
        //sets n' adds
        setSize(d);
        setUndecorated(true);       
        setLayout(new BorderLayout());
 
        addWindowListener(new WindowListener());
        
        BranchGroup scene = createScene();       
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);
        add("Center", canvas);       
        canvas.addKeyListener(this);
        canvas.addMouseMotionListener(this);
        u = new SimpleUniverse(canvas);       
        u.addBranchGraph(scene);

        setView();
        
        setVisible(true);
    }
    
    //implement Methods
    public void keyPressed(KeyEvent arg0) 
    {       
        if(arg0.getKeyCode()==KeyEvent.VK_UP)
        {
            forward();
        }
        else if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
        {
            backward();
        }
        else if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
        {
            leftward();
        }
        else if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
        {
            rightward();
        }
    }
 
    public void keyReleased(KeyEvent arg0) 
    {       
    }
 
    public void keyTyped(KeyEvent arg0)
    {
    }
    
    //Most Important Methods!!!
    public void forward()
    {
        
    }
    public void backward()
    {
        
    }
    public void leftward()
    {
        
    }
    public void rightward()
    {
        
    }
 
    
    public void setView()
    {   
        viewPoint = new Transform3D();
        viewPoint.rotY(Math.toRadians(rot));
        viewPoint.setTranslation(new Vector3f(x,y,z));
       
        view = new Transform3D();
        view.mul(viewPoint );    
        view.setTranslation(new Vector3f(0,0,0.5f));
        u.getViewingPlatform().getViewPlatformTransform().setTransform(view);
    }
    
    public void mouseDragged(MouseEvent arg0)
    {       
    }
 
 
    public void mouseMoved(MouseEvent arg0) 
    {   
        
        double x = MouseInfo.getPointerInfo().getLocation().getX(); 
      //double y = MouseInfo.getPointerInfo().getLocation().getY();
        
        if(x<=d.width/2)
        {
            if(rot>=-45)
            {
            rot = rot - 0.1f;
            viewPoint.rotY(Math.toRadians(rot));
            view.mul(viewPoint);            
            }
            else
            {
                ;
            }
        }
        else if(x>d.width/2)
        {
            if(rot<=+45)
            {
            rot = rot + 0.1f;
            viewPoint.rotY(Math.toRadians(rot));
            view.mul(viewPoint);            
            }
            else
            {
                ;
            }
        }
 
    }
    
    //Main
    public static void main(String[]arg)
    {
        new Game3D21();
    }
 
    //3DGroups
    public BranchGroup createScene()
    {
        X = new BranchGroup();
        
        Transform3D b1 = new Transform3D();
        b1.setTranslation(new Vector3f(0,0,-2));
        TransformGroup B1 = new TransformGroup();
        B1.setTransform(b1);
        X.addChild(B1);
        B1.addChild(new Sphere(0.1f,null));
        
//////////////Lights
           Color3f lightColor = new Color3f(.3f,.3f,.3f);
           AmbientLight ambientLight= new AmbientLight(lightColor);
           ambientLight.setInfluencingBounds(bounds);
           X.addChild(ambientLight);
           DirectionalLight directionalLight = new DirectionalLight();
           directionalLight.setColor(lightColor);
           directionalLight.setInfluencingBounds(bounds);
           X.addChild(directionalLight);       
        
        return X;
    }
    
    //Classes
    class WindowListener extends WindowAdapter{public void windowClosing(WindowEvent e)
    {
        System.exit(0);
    }}
 
}
2.Problem,
ich will dass wenn die maus ein stückchen nach links geschoben wird, das float rot um eins addier wird, wenn es dann 45 erreicht hat, soll nichts geschehen, in Sachen addition
&&
ich will dass wenn die maus ein stückchen nach rechts geschoben wird, das float rot um eins subtrahiert wird, wenn es dann -45 erreicht hat, soll nichts geschehen, in Sachen Subtraktion

verstehst du?
Könntest du mir sagen was ich falsch mache und wie ich das realisieren könnte?
 

Developer_X

Top Contributor
ist schon gut ich habs rausbekommen, danke, damit hab ich was neues gelernt, wirklich danke,
PS: ich habe aber immer noch ein problem
hier:
Java:
    public void mouseMoved(MouseEvent arg0) 
    {   
        int last = 0;
        
        double x = MouseInfo.getPointerInfo().getLocation().getX(); 
      //double y = MouseInfo.getPointerInfo().getLocation().getY();
        
        if(x>=last)
        {
            rot = rot+0.5f;
            view.rotY(Math.toRadians(rot));
            u.getViewingPlatform().getViewPlatformTransform().setTransform(view);  
                 
            last = (int) rot;
        }
        else if(x<=last)
        {
        	rot = rot-0.5f;
            view.rotY(Math.toRadians(rot));
            u.getViewingPlatform().getViewPlatformTransform().setTransform(view);  
            
            last = (int) rot;
        }
 
    }
egal wo meine maus ist und was ich tue, der rot wird nur addiert nich subtrahiert.
 

Marco13

Top Contributor
Lass' das mit der MouseInfo und PointerInfo (um Himmels willen, das hat ja das Potential das neue "getGraphics" zu werden ... :eek: ). Schau dir an, was man mit MouseBehaviors machen kann - da gibt es Beispiele dazu. Im Zweifelsfall kann man aber auch einen ganz normalen MouseMotionListener verwenden....
 

Developer_X

Top Contributor
gut, ich werds mir mal anschauen,
aber du hast mir immer noch nichts zu meinem zweiten Problem gesagt:
Ich hab dir ne zeichnung angelegt, die zeigt, was ich will:

Der schwarze ball ist die Kamera, die immer auf den ball schaut.

Der rote Ball ist das zentrum, ist eine TransformGroup, die später mal eine Figur im spiel werden wird, diese wird mit den pfeiltasten bewegt,

Also durch Mausbewegungen soll der schwarze ball um den roten Ball gedreht werden.
Aber genauer gesagt, der rote ball befindet sich hinter dem schwarzen, wenn nun der rote gedreht wird, dreht sich der schwarze um die rote, verstehst du?

Wie soll ich das realisieren, bevor ich nämlich das mit den mausbewegungen machen, und mir die behaviors anschaue, muss ich erst einmal das machen, was ich will, verstehst du?

Kannst du mir da weiterhelfen?
Und mir eventuell sagen, was ich in der Methode setView ändern sollte?
 

Marco13

Top Contributor
Was ich verstanden habe hätte man mit "Third Person Game" zusammenfassen können. Aber... was soll ich dazu sagen... ob ich Zeit und Lust habe, das gepostete Zeug mal zu compilieren ... mal sehen.
 

Developer_X

Top Contributor
ok, ich kann so lang warten, bitte ich will dich zu nichts drängen,
versteh das bitte nicht falsch, aber könntest du mir schon in wenigen Tagen, ca. 4 vielleicht einen Lösung vorschlag geben?
 

Marco13

Top Contributor
Soll ich dir auch noch den Arsch hinterhertragen? Ich hatte es mir schon so oft vorgenommen, aber irgendwie schaff' ich es nicht, mir anzugewöhnen, in deinen Threads nicht mehr zu antworten. Ich sollte wirklich mal das mit der Ignore-Liste ausprobieren
Code:
// Von http://www.java-forum.org/spiele-und-multimedia-programmierung/85149-eine-frage-zur-viewbesetzung.html
//package Game1;

import java.awt.event.*;
import java.awt.*;

import javax.media.j3d.*;
import javax.swing.*;
import javax.vecmath.*;

import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;

@SuppressWarnings("serial")
public class Game3D21 extends JFrame implements KeyListener, MouseMotionListener
{
    //Attribute
        Dimension d = new Dimension(500,500); //Toolkit.getDefaultToolkit().getScreenSize();

        float x,y,z;
        float rot;

        //Transform3D viewPoint;

        BranchGroup X = new BranchGroup();

        //Transform3D view;
        //TransformGroup View;

        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0);

        SimpleUniverse u;
        TransformGroup B1;

     Matrix4f sphereTransform = new Matrix4f();
     Matrix4f viewTransform = new Matrix4f();
     Vector3f relativeTranslation = new Vector3f();

     Point previousMousePosition = new Point();

    //Constructor
    public Game3D21()
    {
        super("Game3D21");
        //sets n' adds
        setSize(d);
        //setUndecorated(true);
        setLayout(new BorderLayout());

        addWindowListener(new WindowListener());

        sphereTransform.setIdentity();
        //sphereTransform.setTranslation(new Vector3f(0,0,-2));

        relativeTranslation = new Vector3f(0,0,2);

        viewTransform.setIdentity();

        BranchGroup scene = createScene();
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);
        add("Center", canvas);
        canvas.addKeyListener(this);
        canvas.addMouseMotionListener(this);
        u = new SimpleUniverse(canvas);
        u.addBranchGraph(scene);

        //setView();

        updateView(0,0);


        setVisible(true);
    }

    //implement Methods
    public void keyPressed(KeyEvent arg0)
    {
        if(arg0.getKeyCode()==KeyEvent.VK_UP)
        {
            forward();
        }
        else if(arg0.getKeyCode()==KeyEvent.VK_DOWN)
        {
            backward();
        }
        else if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
        {
            leftward();
        }
        else if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
        {
            rightward();
        }
    }

    public void keyReleased(KeyEvent arg0)
    {
    }

    public void keyTyped(KeyEvent arg0)
    {
    }

    //Most Important Methods!!!
    public void forward()
    {
        move(0, 0.01f,0);
    }
    public void backward()
    {
        move(0,-0.01f,0);
    }
    public void leftward()
    {
        move(-0.01f,0,0);
    }
    public void rightward()
    {
        move( 0.01f,0,0);
    }

    private void move(float dx, float dy, float dz)
    {
        Matrix4f transform = new Matrix4f();
        transform.setIdentity();
        transform.setTranslation(new Vector3f(dx,dy,dz));
        sphereTransform.mul(transform, sphereTransform);
        B1.setTransform(new Transform3D(sphereTransform));

        updateView(0,0);
    }


    /*
    public void setView()
    {
        viewPoint = new Transform3D();
        viewPoint.rotY(Math.toRadians(rot));
        viewPoint.setTranslation(new Vector3f(x,y,z));

        view = new Transform3D();
        view.mul(viewPoint );
        view.setTranslation(new Vector3f(0,0,0.5f));
        u.getViewingPlatform().getViewPlatformTransform().setTransform(view);
    }
    */

    public void mouseDragged(MouseEvent arg0)
    {
        float dx = arg0.getX() - previousMousePosition.x;
        float dy = arg0.getY() - previousMousePosition.y;

        updateView(dy/100.0f, dx/100.0f);

        previousMousePosition = arg0.getPoint();
    }


    public void mouseMoved(MouseEvent arg0)
    {


        previousMousePosition = arg0.getPoint();

    }

    private void updateView(float dx, float dy)
    {
        Matrix4f transform = new Matrix4f();
        transform.setIdentity();
        transform.rotX(dx);
        viewTransform.mul(transform, viewTransform);

        transform.setIdentity();
        transform.rotY(dy);
        viewTransform.mul(transform, viewTransform);

        Matrix4f fullTransform = new Matrix4f();
        fullTransform.setIdentity();

        fullTransform.mul(sphereTransform);
        fullTransform.mul(viewTransform);

        transform.setIdentity();
        transform.setTranslation(relativeTranslation);
        fullTransform.mul(transform);

        u.getViewingPlatform().getViewPlatformTransform().setTransform(new Transform3D(fullTransform));
    }




    //Main
    public static void main(String[]arg)
    {
        new Game3D21();
    }

    //3DGroups
    public BranchGroup createScene()
    {
        X = new BranchGroup();

        B1 = new TransformGroup();
        B1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        B1.setTransform(new Transform3D(sphereTransform));
        X.addChild(B1);
        B1.addChild(new Sphere(0.1f,null));

//////////////Lights
           Color3f lightColor = new Color3f(.3f,.3f,.3f);
           AmbientLight ambientLight= new AmbientLight(lightColor);
           ambientLight.setInfluencingBounds(bounds);
           X.addChild(ambientLight);
           DirectionalLight directionalLight = new DirectionalLight();
           directionalLight.setColor(lightColor);
           directionalLight.setInfluencingBounds(bounds);
           X.addChild(directionalLight);

        return X;
    }

    //Classes
    class WindowListener extends WindowAdapter{public void windowClosing(WindowEvent e)
    {
        System.exit(0);
    }}

}
 

Developer_X

Top Contributor
danke, aber
sorry ich hoffe du hast das nicht falsch verstanden,
ich danke dir wirklich sehr,
aber ich wollte nicht unhöflich erscheinen, verstehst du das?
Bitte versteh es nicht falsch :(
 

Marco13

Top Contributor
Ich neige dazu, Dinge so zu verstehen, wie sie gesagt werden, und auf Höflichkeit (im Klassischen Sinn) lege ich mal SOwas von keinen wert.
 
T

tuxedo

Gast
Man man man.. @DevX ... du hinterlässt gerade eine "schleimspur" das ist der Hammer...
 

Developer_X

Top Contributor
wenn ich mich einmal entschuldige, wird dies gleich als "schleimen" angesehen, das ist mir egal was die anderen denken, ich will dir nur sagen, dass es mir leid tut, und dass ich mich hiermit entschuldige, ein weiteres mal
 

Developer_X

Top Contributor
Ich hab mir den Quelltext etwas versucht abzuändern, um mein Ziel zu erreichen ging aber nicht.

Mit deinem Code habe ich aber ein problem, ich hab im Anhang mal ein little standard level, nichts besonderes, mit deinem Code benutzt,


Also das Bild im Anhang, das zeigt wies momentan mit deinem ProgrammVorschlag geht, man kann mit den pfeiltasten vor, rück, links und rechtswärts
und man kann egal wo man ist, sich mit der Maus umgucken, eines gefällt mir daran aber nicht:

1.wie du siehst, habe ich das mit der X-Achse weggemacht, weil ich ein Problem hatte, ich wollte, dass wenn der float der die X_Achse bestimmt
entweder -20 oder 20 überschreitet, die funktion begrenzen sollte, verstehst du?

2.wie du siehst, habe ich dir alles auf die zeichung gepackt, aber das, was ich will, ist noch nicht ganz erreicht,
also:
angenommen ich befinde mich auf Punkt 0,0;
Und jetzt, drehe ich die kamera sagen wir 20° um die Y-Achse
wenn ich jetzt gerade aus laufe, läuft er so entlang, als ob die Y_Achse 0 wäre, es geht darum, dass mit der Methode move, sich ja der ball bewegt, und die Methode mit dem *view dreht ja nur die Kamera um den schwarzen ball, aber das ist ja genau der schwer puntk,
was ich eigentlich will, ist nichts anderes, außer dass der Ball ebenfalls gedreht wird, sodass die Kamera immer nur den Rücken, des Balls filmt, denn dann würde die bewegung quer durch den Raum möglich.

Also um das ganze zusammen zufasseN:
Ich habe 2 Probleme#

Problem 1:
Ich möchte gerne die methode updateView so blokieren, dass man mit die X-Achse des Balls, nicht weiter, als 20f bzw. -20f drehen kann.

Problem 2:
Ich möchte gerne dass der Ball ebenfalls durch die Mausbewegung gedreht wird, sodass die Kamera immer auf den Rücken des Balls filmt, und ich mich quer durch den raumbewegen kann, wenn ich also zum Beispiel, mit der Kamera 45° um die Y_Achse gedreht habe, dann soll der Ball, nicht wie gewohnt den linien folgenden, sondern einfach quer durch den Raum gesteuert werden können, wie "Bild.jpg" zeigt,

Ich habe keine Ahung wie ich das anstellen sollte,
da:
1. wegen dem ersten Problem:
Du verwendest da ja ein float, dass du durch 100 teilst,
wie aber bekomme ich die aktuelle X_Achse_rotation
sodass ich bestimmen kann, mit if-clauseln, dass die X_achse höchstens 20 bzw. -20
'°'
erreichen darf.
2. da hab ich gar keine ahnung wie ich das anstellen sollte, kannst du mir da einen Tipp geben bitte?
 

Marco13

Top Contributor
Den Tipp, den du schon oft genug gehört hast: Ein 3D-Spiel Programmieren ist nichts für Anfänger, und sich einen Haufen zusammenkopierter Trivialitäten durch ständiges Nachfragen im Forum mit den Dingen zusammenkitten zu lassen, bei denen man vielleicht mal nachdenken muss, ist nicht der richtige Weg. Das hervorgehobene Wort im letzten Satz ist auch das entscheidende Stichwort: Du solltest nachdenken, wie das, was du vorhast erreicht werden könnte. Du solltest dir im klaren darüber sein, welche Auswirkungen welche Folge von Transformationen hat, und zumindest eine Idee davon haben, was "Kommutativität" ist. Dann kannst du dir ein paar Formeln aufschreiben (ja, richtig mit Bleistift und diesem dünnen, weißen Zeug... Papier!) und vielleicht ein paar Bildchen dazu, und wenn du sicher bist, die Lösung gefunden zu haben, kannst du den Computer einschalten und dann versuchen, dich schrittweise zu dieser Lösung hinzuarbeiten. Nicht zu sagen "Ich will eine Figur durch ein Level steuern", sondern sagen "Ich will dass die Bewegung eines Objektes von einer Drehung abhängig ist, die vorher durchgeführt wurde" - und dieses Problem dann formaler und präziser beschreiben und zu lösen versuchen. Vielleicht ist dir trotz der vielen derartigen Hinweise, die du schon bekommen hast, eine Sache nicht klar geworden: Programmieren ist nicht leicht, und dass man nach 13 Jahren Schulmathematik noch mal 2 Jahre 10 Stunden am Tag Informatik studiert bevor man sich die ersten Vorlesungen zur Graphischen Datenverarbeitung (dem, was du zu machen glaubst) anhört, hat seinen Grund. Ich will damit ganz ausdrücklich NICHT sagen, dass das eine Voraussetzung für das ist, was du vorhast. Ich habe mich auch schon vorher mit solchen Sachen beschäftigt - auf dem Level, das ich mir damals eben Computer Graphics Principles and Practice angeschafft habe, und ich mit C mal ein Programm geschrieben habe, das eine Matrix mit einem Punkt multipliziert, so dass man dann ein Drahtgittermodell eines Würfels mit der Maus drehen konnte. Ich programmiere jetzt seit 15 Jahren. Aber ich würde mir nicht zutrauen, ein auch nur ansatzweise "vernünftiges" 3D-Spiel zu schreiben. "Lernen" heißt in diesem Bereich auch oft "Bescheidenheit lernen".

Um deine Frage zu beantworten: Du musst die Reihenfolge der Matrixmultiplikationen ändern.
 
T

tuxedo

Gast
wenn ich mich einmal entschuldige, wird dies gleich als "schleimen" angesehen, das ist mir egal was die anderen denken, ich will dir nur sagen, dass es mir leid tut, und dass ich mich hiermit entschuldige, ein weiteres mal

So langsam sind deine vielen entschuldigungen "stressig".

Im übrigen:

@Marco13
Full ACK

Klein anfangen, dann hocharbeiten. Zwischen dem ersten Satzteil und dem letzten kannst du locker mal 10 Jahre vergehen lassen.

- Alex
 

Developer_X

Top Contributor
Den Tipp, den du schon oft genug gehört hast: Ein 3D-Spiel Programmieren ist nichts für Anfänger, und sich einen Haufen zusammenkopierter Trivialitäten durch ständiges Nachfragen im Forum mit den Dingen zusammenkitten zu lassen, bei denen man vielleicht mal nachdenken muss, ist nicht der richtige Weg. Das hervorgehobene Wort im letzten Satz ist auch das entscheidende Stichwort: Du solltest nachdenken, wie das, was du vorhast erreicht werden könnte. Du solltest dir im klaren darüber sein, welche Auswirkungen welche Folge von Transformationen hat, und zumindest eine Idee davon haben, was "Kommutativität" ist. Dann kannst du dir ein paar Formeln aufschreiben (ja, richtig mit Bleistift und diesem dünnen, weißen Zeug... Papier!) und vielleicht ein paar Bildchen dazu, und wenn du sicher bist, die Lösung gefunden zu haben, kannst du den Computer einschalten und dann versuchen, dich schrittweise zu dieser Lösung hinzuarbeiten. Nicht zu sagen "Ich will eine Figur durch ein Level steuern", sondern sagen "Ich will dass die Bewegung eines Objektes von einer Drehung abhängig ist, die vorher durchgeführt wurde" - und dieses Problem dann formaler und präziser beschreiben und zu lösen versuchen. Vielleicht ist dir trotz der vielen derartigen Hinweise, die du schon bekommen hast, eine Sache nicht klar geworden: Programmieren ist nicht leicht, und dass man nach 13 Jahren Schulmathematik noch mal 2 Jahre 10 Stunden am Tag Informatik studiert bevor man sich die ersten Vorlesungen zur Graphischen Datenverarbeitung (dem, was du zu machen glaubst) anhört, hat seinen Grund. Ich will damit ganz ausdrücklich NICHT sagen, dass das eine Voraussetzung für das ist, was du vorhast. Ich habe mich auch schon vorher mit solchen Sachen beschäftigt - auf dem Level, das ich mir damals eben Computer Graphics Principles and Practice angeschafft habe, und ich mit C mal ein Programm geschrieben habe, das eine Matrix mit einem Punkt multipliziert, so dass man dann ein Drahtgittermodell eines Würfels mit der Maus drehen konnte. Ich programmiere jetzt seit 15 Jahren. Aber ich würde mir nicht zutrauen, ein auch nur ansatzweise "vernünftiges" 3D-Spiel zu schreiben. "Lernen" heißt in diesem Bereich auch oft "Bescheidenheit lernen".

Um deine Frage zu beantworten: Du musst die Reihenfolge der Matrixmultiplikationen ändern.


Also soll ich mir die Methode updateView etwas genauer ansehen?
 

Xams

Bekanntes Mitglied
NEIN


Du sollst Programmieren von Grund auf lernen und dich erst mit Basisdingen beschäftigen (OOP, z.B)
bevor du dich ansowas setzt.
 

TheChemist

Bekanntes Mitglied
Also soll ich mir die Methode updateView etwas genauer ansehen?

Wow, ich wollte ja eigentlich nix zu der ganzen Sache schreiben, aber der Post war zu hart. Hast du eigentlich geschrieben was Marko13 da geschrieben hat? Das ging wohl in besonderem Maße an dich! Die Antwort ist schon echt frech, so irgnorant ist sie.

Kann den anderen aber nur zustimmen. Beschäftige mich auch noch nicht so lang mit Programmierung und lerne eigentlich jedesmal etwas neues wenn ich mich nochmal mit den Basics beschäftige.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
radiac Mal eine ganz Doofe Frage... verzeiht :) Spiele- und Multimedia-Programmierung 9
H Mausbewegungen wie eine echte Maus in 3 dimensionalen Spielen Spiele- und Multimedia-Programmierung 12
temi OpenGL: Eine Kugel Spiele- und Multimedia-Programmierung 7
Taknax Versuche eine Mod von 1.11.2 in 1.12.2 zu porten. Spiele- und Multimedia-Programmierung 1
J noch eine Runde spielen? Spiele- und Multimedia-Programmierung 6
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
J Wie kann man eine grafische Oberfläche erzeugen um eine Textdatei auswählen zu können ?? Spiele- und Multimedia-Programmierung 1
D Iterieren durch einen Ordner mit Audiodateien und verketten eine andere Audiodatei Spiele- und Multimedia-Programmierung 17
C Eine eigene 3d Engine : Shader - aber wie ? Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
B Mit Swing eine Grafische Oberfläche erstellen Spiele- und Multimedia-Programmierung 1
X Minecraft Wie kann ich eine Karte erstellen wie zb:(Bei Minecraft) Spiele- und Multimedia-Programmierung 1
M Wie kann man die Auflösung eine fertigen Programms ändern? Spiele- und Multimedia-Programmierung 1
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
TheSorm Collision an einer bestimmten Seite eine Rectangles abfragen Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
S eine nullpointerexception, wo sie nicht sein sollte Spiele- und Multimedia-Programmierung 12
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
M Eine Art "Vier Gewinnt" Spiele- und Multimedia-Programmierung 5
B j3d Rotation um mehr als eine Achse Spiele- und Multimedia-Programmierung 9
M Methoden eine Map zu zeichnen Spiele- und Multimedia-Programmierung 5
2 Eine Java App als Midi Device? Spiele- und Multimedia-Programmierung 2
W 3D-APIs für Java - Eine Übersicht Spiele- und Multimedia-Programmierung 8
M Wavefront Object Loader zeigt nur eine Textur an. Spiele- und Multimedia-Programmierung 7
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
R JLayer player spielt nur eine mp3 Datei ab Spiele- und Multimedia-Programmierung 1
M Variable die eine Klasse enthält ändern Problem Spiele- und Multimedia-Programmierung 16
G Was genau ist eine Grafikengine? Spiele- und Multimedia-Programmierung 14
G Eine Art Polygon Spiele- und Multimedia-Programmierung 5
H Wie erzeuge ich eine Zufallszahl zwischen 0 und 8 ? Spiele- und Multimedia-Programmierung 7
B vertikal schreiben oder eine Bilddatei drehen? Spiele- und Multimedia-Programmierung 11
E nur eine Konzeptfrage Spiele- und Multimedia-Programmierung 11
G Ein begrenzter Zeitraum, um eine Eingabe zu tätigen! Spiele- und Multimedia-Programmierung 9
M mehrere PNG in eine Datei Spiele- und Multimedia-Programmierung 3
H Eine gestrichelte Linie Spiele- und Multimedia-Programmierung 3
V Wie bewege ich eine eingefügte Grafik (img) ? Spiele- und Multimedia-Programmierung 2
D Eigentlich eine Umfrage (Pausenanimation) Spiele- und Multimedia-Programmierung 4
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
J Frage zum Einlesen einer .wav in ein byte Array Spiele- und Multimedia-Programmierung 3
S ImageSlider frage Spiele- und Multimedia-Programmierung 3
Anfänger2011 Minimap: Theoretische Frage zur Umsetzung Spiele- und Multimedia-Programmierung 2
Androbin Kollisions-Frage Spiele- und Multimedia-Programmierung 8
windl Frage zu Airplay und zur Mitarbeit bei einer Mediaanlage Spiele- und Multimedia-Programmierung 0
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
Kenan89 Theoretische Frage zu Tile Spielkarten Spiele- und Multimedia-Programmierung 9
R Tileloader Frage Spiele- und Multimedia-Programmierung 2
S Frage: NullPointer, aber warum? Spiele- und Multimedia-Programmierung 8
J Anfänger Frage wie adden? Spiele- und Multimedia-Programmierung 9
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
M.F.G. Spielvorstellung (plus KI frage): Connect Four – Extreme Spiele- und Multimedia-Programmierung 11
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
P Frage bzgl. TextAdventure Spiele- und Multimedia-Programmierung 11
K Frage zur 3D Entwicklung zwecks vorhandener Engines Spiele- und Multimedia-Programmierung 17
V Frage zu AffineTransforms Spiele- und Multimedia-Programmierung 2
N frage zu der mp3spi Spiele- und Multimedia-Programmierung 2
J Frage zu Threads Spiele- und Multimedia-Programmierung 5
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
M VRML Loader(noob Frage) ^^ Spiele- und Multimedia-Programmierung 3
M Prinzipielle Frage: Kann Java Grafiken ausschneiden? Spiele- und Multimedia-Programmierung 3
R Frage zu Hütchenspielprogrammierung! Spiele- und Multimedia-Programmierung 47
V Frage zu Grafiken und Software! Spiele- und Multimedia-Programmierung 5
H BlueJ Frage Spiele- und Multimedia-Programmierung 13
K Malefiz programmieren - Frage zu den einzelnen Spielfeldern Spiele- und Multimedia-Programmierung 5
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
0x7F800000 allgemeine frage zu Java 3D Spiele- und Multimedia-Programmierung 12
B Frage zur Spielsteuerung bei einem rundenbasiertes Spiel Spiele- und Multimedia-Programmierung 5
G frage zu tutorial Spiele- und Multimedia-Programmierung 3
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
N Schiffe Versenken Frage zum Spielbrett Spiele- und Multimedia-Programmierung 24
N Generelle Frage: "GUI"-Werkzeuge Spiele- und Multimedia-Programmierung 5
X Frage zu Import von CAD Zeichnungen Spiele- und Multimedia-Programmierung 4
A kurze Frage zu Java3D! (automatische Skalierung) Spiele- und Multimedia-Programmierung 3
S Poker - grundlegende frage zu paint() Spiele- und Multimedia-Programmierung 10
B Frage zum GUI-Design bei Brettspielen Spiele- und Multimedia-Programmierung 4
P Frage zum Scrolling Spiele- und Multimedia-Programmierung 23
B Frage zum Abspielen von Sounddateien Spiele- und Multimedia-Programmierung 2
J Frage zu Geometry und Shape3D Spiele- und Multimedia-Programmierung 4
J Frage zu Transform3D.mul() Spiele- und Multimedia-Programmierung 2
J Java3D: Texture-Frage Spiele- und Multimedia-Programmierung 4
C frage zu glrotated Spiele- und Multimedia-Programmierung 12
T Einsatzbereich-Frage von Java 3D Spiele- und Multimedia-Programmierung 24
S [Java2D] Performance Frage Spiele- und Multimedia-Programmierung 4
G Frage zur Sichtbarkeit von Flächen Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben