I
InselBesucher
Gast
Hallo,
Mein IST-Zustand erzeugt z.zt. mehrere 'Bälle' der Klasse JComponente, in der die paintComponent() ueberschireben ist. Der 'Ball' wird derzeitig durch Anreihung mehrerer nach innen verlaufenden g.drawOval erzeugt, welche vond der StartFarbe nach innen heller werden (für die Plastizität).
Die Bälle werden ausschliesslich im 2D raum betrachtet
Funktionen für den Ball: moveBall(), scaleBall(), rotateBall(), changeColor()
Problem ist, dass die for-Schleife in der paintComponent() sehr teuer ist, und ich bei der scaleBall() sehr viel CPU nutzte.
Die Rotation eines Balles weis ich nicht anders zu visualisieren, als einen Punkt auf den Ball zu setzten. Damit ich hier an CPU spare lass ich nun nur den Punkt rotieren. (also nutzte deswegen nicht die g2d.rotate)
Die Frage wäre nun, wie kann ich eine Kugel besser in einen zweiDimensionalen raum darstellen.
Und eine derzeit noch nicht so wichtige Frage (hab mich auch noch nicht schlau gemacht) wie koennte mit einen Slider die Farbe 'drehen' da ich dort die Farbtemperatur bestimmen moechte.
Meine Ideen zur Visualisierung gingen natürlich in die Richtung Java 2D | 3D. Trotz 2D darstellung dachte ich mir, wäre es vieleicht gut 3D zu nutzen, da im besten fall die Berechnung über die Graphikkarten Logic (z.B. shader) läuft, wenn das Java so handhabt. Dann koennte man denn Ball einfach die Z-Achse verschieben um zu scalieren.
Dann würde man bestimmt am billigsten die Textur drehen, wobei ich nicht weis ob man deren Farbe dann auch frei definierne kann (vieleicht JavaImage).
Vieleicht weis auch jemand wie ich einen Rotierenden Ball (mit einer Farbe, Farbverlauf in die mitte hin) besser darstellen kann.
Bitte schreibt mir Ideen, Lösungsansätze oder Lösungen.
danke und lieben Gruss
Mein IST-Zustand erzeugt z.zt. mehrere 'Bälle' der Klasse JComponente, in der die paintComponent() ueberschireben ist. Der 'Ball' wird derzeitig durch Anreihung mehrerer nach innen verlaufenden g.drawOval erzeugt, welche vond der StartFarbe nach innen heller werden (für die Plastizität).
Java:
@Override
public void paintComponent(final Graphics g) {
g.setColor(this.color);
for (int i = 0; i < this.diameter/ 2; i += 2) {
g.setColor(new Color((this.color.getRed() + 2 * i) > 255 ? 255 : (this.color.getRed() + 2 * i),
(this.color.getGreen() + 2 * i) > 255 ? 255 : (this.color.getGreen() + 2 * i),
(this.color.getBlue() + 2 * i) > 255 ? 255 : (this.color.getBlue() + 2 * i))
);
g.fillOval( (0) + i,(0) + i, this.diameter - i*2, this.diameter - i*2 );
}
this.setBounds(this.x - this.diameter / 2, this.y - this.diameter / 2, this.diameter, this.diameter);
}
Funktionen für den Ball: moveBall(), scaleBall(), rotateBall(), changeColor()
Problem ist, dass die for-Schleife in der paintComponent() sehr teuer ist, und ich bei der scaleBall() sehr viel CPU nutzte.
Die Rotation eines Balles weis ich nicht anders zu visualisieren, als einen Punkt auf den Ball zu setzten. Damit ich hier an CPU spare lass ich nun nur den Punkt rotieren. (also nutzte deswegen nicht die g2d.rotate)
Die Frage wäre nun, wie kann ich eine Kugel besser in einen zweiDimensionalen raum darstellen.
Und eine derzeit noch nicht so wichtige Frage (hab mich auch noch nicht schlau gemacht) wie koennte mit einen Slider die Farbe 'drehen' da ich dort die Farbtemperatur bestimmen moechte.
Meine Ideen zur Visualisierung gingen natürlich in die Richtung Java 2D | 3D. Trotz 2D darstellung dachte ich mir, wäre es vieleicht gut 3D zu nutzen, da im besten fall die Berechnung über die Graphikkarten Logic (z.B. shader) läuft, wenn das Java so handhabt. Dann koennte man denn Ball einfach die Z-Achse verschieben um zu scalieren.
Dann würde man bestimmt am billigsten die Textur drehen, wobei ich nicht weis ob man deren Farbe dann auch frei definierne kann (vieleicht JavaImage).
Vieleicht weis auch jemand wie ich einen Rotierenden Ball (mit einer Farbe, Farbverlauf in die mitte hin) besser darstellen kann.
Bitte schreibt mir Ideen, Lösungsansätze oder Lösungen.
danke und lieben Gruss