# Java3D - Blickfeld



## Dani_m (10. Mrz 2014)

Hallo,

Ich habe folgendes Problem:
ich möchte eine Pyramide erstellen, die dem Sichtkegel entspricht. Den Standpunkt und Blickrichtung der Kamera habe ich wie folgt ausgelesen:

```
Transform3D blicktransform = new Transform3D();
blicktransformgroup.getTransform(blicktransform);
            
Vector3f viewPosition = new Vector3f();
Vector3f viewVector= new Vector3f(0, 0, -1);
Vector3f upVector = new Vector3f(0, 1, 0);
            
blicktransform.get(viewPosition);
blicktransform.transform(viewVector);
blicktransform.transform(upVector);
```
Nun fehlt mir leider eine Idee wie ich diese Pyramide weiter konstruieren könnte...
Eigentlich brauch ich auch nur die 4 Vektoren, die den Blick begrenzen.


----------



## Dani_m (13. Mrz 2014)

Ich meinte etwas in dieser Art:

```
//
            Matrix3d l = new Matrix3d();
            l.m11=1;
            l.m00=Math.cos(Math.toRadians(-30));
            l.m02=Math.sin(Math.toRadians(-30));
            l.m20=-1*Math.sin(Math.toRadians(-30));
            l.m22=Math.cos(Math.toRadians(-30));
            Transform3D trans_l = new Transform3D();
            trans_l.setRotation(l);
            trans_l.mul(blicktransform);
            
            Matrix3d r = new Matrix3d();
            r.m11=1;
            r.m00=Math.cos(Math.toRadians(30));
            r.m02=Math.sin(Math.toRadians(30));
            r.m20=-1*Math.sin(Math.toRadians(30));
            r.m22=Math.cos(Math.toRadians(30));
            Transform3D trans_r = new Transform3D();
            trans_r.setRotation(r);
            trans_r.mul(blicktransform);
            
            Matrix3d o = new Matrix3d();
            o.m22=1;
            o.m00=Math.cos(Math.toRadians(30));
            o.m10=Math.sin(Math.toRadians(30));
            o.m01=-1*Math.sin(Math.toRadians(30));
            o.m11=Math.cos(Math.toRadians(30));
            Transform3D trans_or = new Transform3D();
            Transform3D trans_ol = new Transform3D();
            trans_or.setRotation(o);
            trans_ol.setRotation(o);
            trans_or.mul(trans_r);
            trans_ol.mul(trans_l);
            
            Matrix3d u = new Matrix3d();
            u.m22=1;
            u.m00=Math.cos(Math.toRadians(-30));
            u.m10=Math.sin(Math.toRadians(-30));
            u.m01=-1*Math.sin(Math.toRadians(-30));
            u.m11=Math.cos(Math.toRadians(-30));
            Transform3D trans_ur = new Transform3D();
            Transform3D trans_ul = new Transform3D();
            trans_ur.setRotation(u);
            trans_ul.setRotation(u);
            trans_ur.mul(trans_r);
            trans_ul.mul(trans_l);
            
            Vector3f viewVector_ro = new Vector3f(0, 0, -1);
            Vector3f viewVector_lo = new Vector3f(0, 0, -1);
            Vector3f viewVector_ru = new Vector3f(0, 0, -1);
            Vector3f viewVector_lu = new Vector3f(0, 0, -1);
            
            trans_ol.transform(viewVector_lo);
            trans_ul.transform(viewVector_lu);
            trans_or.transform(viewVector_ro);
            trans_ur.transform(viewVector_ru);
```

Allerdings klappt dies nur, wenn man in der Z-Richtung schaut, sonst verzerren sich die Seiten stark.

Hier bräuchte ich euge Hilfe!


----------

