Hallo lui,
Voor school ben ik bezig met Java3d. Nou probeer ik al de hele middag een cylinder te tekenen (en ja, ik weet dat er klassen voor zijn, maar die mogen we dus niet gebruiken), en krijg dat dus met geen mogelijkheid voor elkaar. Misschien kan iemand me even in de juiste richting duwen want ik zie het niet meer zitten
Dit is de code:
Voor school ben ik bezig met Java3d. Nou probeer ik al de hele middag een cylinder te tekenen (en ja, ik weet dat er klassen voor zijn, maar die mogen we dus niet gebruiken), en krijg dat dus met geen mogelijkheid voor elkaar. Misschien kan iemand me even in de juiste richting duwen want ik zie het niet meer zitten
Dit is de code:
code:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
| package opdrachten;
// De benodigde klassen
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.ColoringAttributes;
import javax.media.j3d.Geometry;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.TriangleStripArray;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseWheelZoom;
import com.sun.j3d.utils.universe.SimpleUniverse;
// Java3D1_1 rendert een simpele geroteerde kubus.
public class Java3D1_1 extends Applet {
public BranchGroup createSceneGraph() { // Creeer de wortel van de branch graph
BranchGroup objRoot = new BranchGroup();
TransformGroup total = new TransformGroup();
total.addChild(new Cylinder(0.0f, 0.0f, 1.0f));
objRoot.addChild(total);
// Laat Java optimalisaties uitvoeren op deze branch graph
objRoot.compile();
return objRoot;
}// einde van de CreateSceneGraph methode
public void AddMouse(TransformGroup tg) {
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
MouseRotate mouse = new MouseRotate();
mouse.setTransformGroup(tg);
mouse.setSchedulingBounds(new BoundingSphere());
MouseTranslate mouse2 = new MouseTranslate();
mouse2.setTransformGroup(tg);
mouse2.setSchedulingBounds(new BoundingSphere());
mouse2.setFactor(0.005);
MouseWheelZoom mouse3 = new MouseWheelZoom(MouseWheelZoom.INVERT_INPUT);
mouse3.setTransformGroup(tg);
mouse3.setSchedulingBounds(new BoundingSphere());
tg.addChild(mouse);
tg.addChild(mouse2);
tg.addChild(mouse3);
}
public Appearance GetColorAppearance(float r, float g, float b) {
Appearance uiterlijk = new Appearance();
ColoringAttributes uiterlijkCA = new ColoringAttributes();
uiterlijkCA.setColor(r, g, b);
uiterlijk.setColoringAttributes(uiterlijkCA);
return uiterlijk;
}
class Cylinder extends Shape3D {
public Cylinder(float r, float g, float b) {
this.setAppearance(GetColorAppearance(r, g, b));
this.setGeometry(GetGeometry());
}
public Geometry GetGeometry() {
TriangleStripArray tsa;
int numPoints = 4;
int stripCounts[] = { 8 };
float radius = 0.4f;
float x, y;
float z = 0.4f;
double a = 0;
Point3f coords1[] = new Point3f[numPoints];
Point3f coords2[] = new Point3f[numPoints];
Point3f coordsTotal[] = new Point3f[numPoints * 2];
// Bereken coordinaten van de 2 circels
for (int i = 0; i < numPoints; a = 2 * Math.PI / ++i) {
x = (float) (radius * Math.cos(a));
y = (float) (radius * Math.sin(a));
coords1[i] = new Point3f(x, y, z);
coords2[i] = new Point3f(x, y, -z);
}
// Zet alle punten op de correcte manier in coordsTotal.
for (int i = 0; i < numPoints; i++) {
coordsTotal[i * 2] = coords1[i];
// Schuift alle indices 1 op, zodat ze goed in de coordTotal array komen. N.B. coords2[laatste] wordt coordsTotal[eerste]
if (i != 0)
coordsTotal[i * 2 + 1] = coords2[i - 1];
else
coordsTotal[i * 2 + 1] = coords2[coords2.length - 1];
}
tsa = new TriangleStripArray(8, TriangleStripArray.COORDINATES,
stripCounts);
tsa.setCoordinates(0, coordsTotal);
return tsa;
} // end of method yoyoGeometry in class Yoyo
}
public Java3D1_1() {
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse
.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
add("Center", canvas3D);
// Creeer een scene gebaseerd op de createSceneGraph methode
BranchGroup scene = createSceneGraph();
// De SimpleUniverse klasse bevat alle elementen die nodig
// zijn voor de rendering van een virtuele wereld
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
// Het volgende plaatst het ViewPlatform een beetje naar achteren,
// zodat het object zichtbaar is.
simpleU.getViewingPlatform().setNominalViewingTransform();
// Voeg de scene toe aan de virtuele wereld
simpleU.addBranchGraph(scene);
} // einde van Java3D1_1 (constructor)
// Het volgende laat dit programma zowel als een applicatie
// als een applet uitvoeren
public static void main(String[] args) {
Frame frame = new MainFrame(new Java3D1_1(), 256, 256);
} // einde van main (methode van Java3D1_1)
} // einde van klasse Java3D1_1 |
[ Voor 11% gewijzigd door Thunderhawk op 08-04-2007 18:32 ]