api:documentation:grafik3d:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
api:documentation:grafik3d:start [2025/01/11 16:56] – [Einfache 3D-Grundformen] martin | api:documentation:grafik3d:start [2025/03/08 08:45] (aktuell) – [Sprite3d] martin | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
<WRAP center round info 80%> | <WRAP center round info 80%> | ||
Die Online-IDE ermöglicht einen einfachen Einstieg in die 3D-Grafikprogrammierung und stellt dafür viele spezialisierte Klassen zur Verfügung, die intern wiederum auf [[https:// | Die Online-IDE ermöglicht einen einfachen Einstieg in die 3D-Grafikprogrammierung und stellt dafür viele spezialisierte Klassen zur Verfügung, die intern wiederum auf [[https:// | ||
- | Die 3D-Grafik-API besteht Stand Januar 2025 aus 35 Klassen und ist noch im Entstehen. Die Bezeichner aller Klassen dieser API enden auf " | + | Die 3D-Grafik-API besteht Stand Januar 2025 aus 35 Klassen und ist noch im Entstehen. Die Bezeichner aller Klassen dieser API enden auf " |
+ | Auf dieser Seite werden die verschiedenen Grundformen gezeigt. Hier die weiteren Unterkapitel zum Thema 3D-Grafik: | ||
+ | * [[: | ||
+ | * [[: | ||
+ | * [[: | ||
+ | * [[: | ||
+ | * [[: | ||
+ | * [[: | ||
</ | </ | ||
Zeile 13: | Zeile 21: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
- | Wenn Sie bei den folgenden Demos in die Zeichenfläche klicken und die Maus bewegen, können Sie die Kameraposition verändern und die Objekte so von allen Seiten betrachten. | + | Wenn Sie bei den folgenden Demos in die Zeichenfläche |
</ | </ | ||
==== Box3d (Quader) ==== | ==== Box3d (Quader) ==== | ||
+ | <WRAP center round tip 80%> | ||
+ | Zur Bedeutung der maximal sechs möglichen Parameter width, height, depth, widthSegments, | ||
+ | </ | ||
< | < | ||
Zeile 28: | Zeile 40: | ||
Box3d box2 = new Box3d(1, 1, 0.5, 2, 4, 2); | Box3d box2 = new Box3d(1, 1, 0.5, 2, 4, 2); | ||
box2.move(-1, | box2.move(-1, | ||
- | box2.getMaterial().setColor(0x0000ff); | + | box2.getMaterial().setColor(0x5050ff).setWireframe(true); |
- | box2.getMaterial().setWireframe(true); | + | |
Box3d box3 = new Box3d(); | Box3d box3 = new Box3d(); | ||
- | box3.getMaterial().setColor(0xff0000); | + | box3.getMaterial().setColor(0xff0000).setAlpha(0.6); |
- | box3.getMaterial().setAlpha(0.6); | + | |
- | box3.getMaterial().setTransparent(true); | + | |
</ | </ | ||
Zeile 44: | Zeile 53: | ||
==== Sphere3d (Kugel) ==== | ==== Sphere3d (Kugel) ==== | ||
<WRAP center round tip 80%> | <WRAP center round tip 80%> | ||
- | Zur Bedeutung der sieben möglichen Parameter radius, widthSegments, | + | Zur Bedeutung der sieben möglichen Parameter radius, widthSegments, |
</ | </ | ||
Zeile 62: | Zeile 71: | ||
</ | </ | ||
+ | ==== Cylinder3d ==== | ||
+ | <WRAP center round tip 80%> | ||
+ | Zur Bedeutung der maximal acht möglichen Parameter radiusTop, radiusBottom, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Cylinder3d c1 = new Cylinder3d(); | ||
+ | |||
+ | Cylinder3d c2 = | ||
+ | new Cylinder3d(0.5, | ||
+ | 20, 10, false, 90, 270); | ||
+ | c2.move(-2, 1, -1); | ||
+ | c2.rotateX(45); | ||
+ | c2.enableFrontBackSide(true, | ||
+ | c2.getMaterial().setColor(0x5050ff); | ||
+ | |||
+ | Cylinder3d c3 = new Cylinder3d(1, | ||
+ | c3.getMaterial().setColor(Color.chocolate); | ||
+ | c3.move(2, 0, -3); | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Cone3d ==== | ||
+ | <WRAP center round tip 80%> | ||
+ | Zur Bedeutung der maximal sieben möglichen Parameter radius, height, radialSegments, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Cone3d c1 = new Cone3d(); | ||
+ | |||
+ | Cone3d c2 = | ||
+ | new Cone3d(0.5, 1.5, | ||
+ | 20, 10, false, 90, 270); | ||
+ | c2.move(-2, 1, -1); | ||
+ | c2.rotateX(45); | ||
+ | c2.enableFrontBackSide(true, | ||
+ | c2.getMaterial().setColor(0x5050ff); | ||
+ | |||
+ | Cone3d c3 = new Cone3d(1, 2); | ||
+ | c3.getMaterial().setColor(Color.chocolate); | ||
+ | c3.move(2, 0, -3); | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Torus3d ==== | ||
+ | <WRAP center round tip 80%> | ||
+ | Zur Bedeutung der maximal fünf möglichen Parameter radius, tube, radialSegments, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Torus3d t1 = new Torus3d(); | ||
+ | |||
+ | Torus3d t2 = new Torus3d(2, 0.5, 16, 100, 270); | ||
+ | t2.move(-2, 0, -1); | ||
+ | t2.getMaterial().setColor(Color.cornflowerblue); | ||
+ | t2.enableFrontBackSide(true, | ||
+ | t2.rotateY(200); | ||
+ | t2.rotateX(90); | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Icosahedron3d ==== | ||
+ | <WRAP center round tip 80%> | ||
+ | Zur Bedeutung der maximal zwei möglichen Parameter radius, detail siehe [[https:// | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Icosahedron3d ico = new Icosahedron3d(2, | ||
+ | ico.getMaterial().setFlatShading(true); | ||
+ | while(true); | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Sprite3d ===== | ||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Objekte der Klasse '' | ||
+ | // Tipp: Klicken Sie im folgenden Beispiel mit der linken Maustaste ins Bild und ziehen Sie die Maus um die Kamera zu bewegen!// | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Box3d box = new Box3d(); | ||
+ | |||
+ | Sprite3d sprite = new Sprite3d(1, SpriteLibrary.Plattforms, | ||
+ | sprite.move(0, | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Die Klasse Sprite3d ist auf Geschwindigkeit hin optimiert, so dass problemlos mehrere tausend Sprites gleichzeitig animiert werden können. \\ \\ | ||
+ | Hier ein kleines Beispielprogramm dazu: | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | |||
+ | |||
+ | Cylinder3d c = new Cylinder3d(0.3, | ||
+ | c.move(0, 0.25 - 3, 0); | ||
+ | World3d.getWorld3d().getCamera().moveTo(20, | ||
+ | |||
+ | |||
+ | Plane3d p1 = new Plane3d(18, 18); | ||
+ | p1.rotateX(-90); | ||
+ | p1.move(0, -12, 0); | ||
+ | p1.getMaterial().setColor(0x5959c9); | ||
+ | p1.enableFrontBackSide(true, | ||
+ | |||
+ | new ParticleEmitter(); | ||
+ | |||
+ | |||
+ | |||
+ | class ParticleEmitter extends Actor { | ||
+ | int j = 0; | ||
+ | | ||
+ | for (int i = 0; i < 120; i++) { | ||
+ | new FlyingSprite1(); | ||
+ | } | ||
+ | if(j++ % 30 == 0) println(FlyingSprite1.count + " Sprites sichtbar" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | class FlyingSprite1 extends Sprite3d { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | int t = 0; | ||
+ | |||
+ | | ||
+ | super(0.9, SpriteLibrary.Particles, | ||
+ | move(0, 0.3 - 3, 0); | ||
+ | setColor(Color.randomColor(180, | ||
+ | count++; | ||
+ | } | ||
+ | |||
+ | | ||
+ | double factor = 0.02; | ||
+ | move(vx * factor, vy * factor, vz * factor); | ||
+ | // setAlpha(Math.abs(Math.sin(t++ * flimmerFrequency)) > 0.8 ? 1 : 0); | ||
+ | |||
+ | vy = vy - 0.4; | ||
+ | if(getY() < -12) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
api/documentation/grafik3d/start.1736614603.txt.gz · Zuletzt geändert: 2025/01/11 16:56 von martin