Add spark concentration & weight options
Weight does not work great, lines are not the right thing to use.
This commit is contained in:
parent
c83b16b385
commit
ba037a1b2c
@ -34,6 +34,9 @@ public class PhotoSettings extends AbstractChangeSource implements FlameSettings
|
|||||||
private double exhaustScale = 1.0;
|
private double exhaustScale = 1.0;
|
||||||
private double flameAspectRatio = 1.0;
|
private double flameAspectRatio = 1.0;
|
||||||
|
|
||||||
|
private double sparkConcentration;
|
||||||
|
private double sparkWeight;
|
||||||
|
|
||||||
private Sky sky = Mountains.instance;
|
private Sky sky = Mountains.instance;
|
||||||
|
|
||||||
public double getRoll() {
|
public double getRoll() {
|
||||||
@ -250,4 +253,22 @@ public class PhotoSettings extends AbstractChangeSource implements FlameSettings
|
|||||||
this.sky = sky;
|
this.sky = sky;
|
||||||
fireChangeEvent();
|
fireChangeEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getSparkConcentration() {
|
||||||
|
return sparkConcentration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSparkConcentration(double sparkConcentration) {
|
||||||
|
this.sparkConcentration = sparkConcentration;
|
||||||
|
fireChangeEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getSparkWeight() {
|
||||||
|
return sparkWeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSparkWeight(double sparkWeight) {
|
||||||
|
this.sparkWeight = sparkWeight;
|
||||||
|
fireChangeEvent();
|
||||||
|
}
|
||||||
}
|
}
|
@ -288,10 +288,32 @@ public class PhotoSettingsConfig extends JTabbedPane {
|
|||||||
fireModel.addEnableComponent(flameAspectSpinner);
|
fireModel.addEnableComponent(flameAspectSpinner);
|
||||||
|
|
||||||
add(new JLabel("Sparks"));
|
add(new JLabel("Sparks"));
|
||||||
JCheckBox sparksCheck = new JCheckBox(new BooleanModel(p, "Sparks"));
|
BooleanModel sparksModel = new BooleanModel(p, "Sparks");
|
||||||
|
JCheckBox sparksCheck = new JCheckBox(sparksModel);
|
||||||
add(sparksCheck, "wrap");
|
add(sparksCheck, "wrap");
|
||||||
fireModel.addEnableComponent(sparksCheck);
|
fireModel.addEnableComponent(sparksCheck);
|
||||||
|
|
||||||
|
add(new JLabel("Spark Concentration"));
|
||||||
|
DoubleModel sparkConcentrationModel = new DoubleModel(p, "SparkConcentration", 100, UnitGroup.UNITS_NONE, 0, 100);
|
||||||
|
JSpinner sparkConcentrationSpinner = new JSpinner(sparkConcentrationModel.getSpinnerModel());
|
||||||
|
add(sparkConcentrationSpinner, "wrap");
|
||||||
|
sparksModel.addEnableComponent(sparkConcentrationSpinner);
|
||||||
|
|
||||||
|
add(new JLabel("Spark Weight"));
|
||||||
|
DoubleModel sparkWeightModel = new DoubleModel(p, "SparkWeight", 100, UnitGroup.UNITS_NONE, 0, 100);
|
||||||
|
JSpinner sparkWeightSpinner = new JSpinner(sparkWeightModel.getSpinnerModel());
|
||||||
|
add(sparkWeightSpinner, "wrap");
|
||||||
|
sparksModel.addEnableComponent(sparkWeightSpinner);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
add(new JLabel("Exhaust Scale"));
|
add(new JLabel("Exhaust Scale"));
|
||||||
DoubleModel exhaustScaleModel = new DoubleModel(p, "ExhaustScale", 100, UnitGroup.UNITS_NONE, 0, 1000);
|
DoubleModel exhaustScaleModel = new DoubleModel(p, "ExhaustScale", 100, UnitGroup.UNITS_NONE, 0, 1000);
|
||||||
add(new JSpinner(exhaustScaleModel.getSpinnerModel()), "wrap");
|
add(new JSpinner(exhaustScaleModel.getSpinnerModel()), "wrap");
|
||||||
|
@ -141,21 +141,25 @@ import com.jogamp.opengl.util.texture.TextureIO;
|
|||||||
public final class FlameRenderer {
|
public final class FlameRenderer {
|
||||||
|
|
||||||
public interface FlameSettings {
|
public interface FlameSettings {
|
||||||
|
public double getExhaustScale();
|
||||||
|
|
||||||
public boolean isFlame();
|
public boolean isFlame();
|
||||||
|
|
||||||
public boolean isSmoke();
|
|
||||||
|
|
||||||
public Color getFlameColor();
|
public Color getFlameColor();
|
||||||
|
|
||||||
|
public boolean isSmoke();
|
||||||
|
|
||||||
public Color getSmokeColor();
|
public Color getSmokeColor();
|
||||||
|
|
||||||
public double getSmokeAlpha();
|
public double getSmokeAlpha();
|
||||||
|
|
||||||
public boolean isSparks();
|
|
||||||
|
|
||||||
public double getExhaustScale();
|
|
||||||
|
|
||||||
public double getFlameAspectRatio();
|
public double getFlameAspectRatio();
|
||||||
|
|
||||||
|
public boolean isSparks();
|
||||||
|
|
||||||
|
public double getSparkConcentration();
|
||||||
|
|
||||||
|
public double getSparkWeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(FlameRenderer.class);
|
private static final Logger log = LoggerFactory.getLogger(FlameRenderer.class);
|
||||||
@ -175,7 +179,7 @@ public final class FlameRenderer {
|
|||||||
gl.glDisable(GLLightingFunc.GL_LIGHTING);
|
gl.glDisable(GLLightingFunc.GL_LIGHTING);
|
||||||
|
|
||||||
if (fs.isSparks() && fs.isFlame()) {
|
if (fs.isSparks() && fs.isFlame()) {
|
||||||
sparks(gl, fs.getFlameColor());
|
sparks(gl, fs);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl.glEnable(GL.GL_BLEND);
|
gl.glEnable(GL.GL_BLEND);
|
||||||
@ -457,13 +461,13 @@ public final class FlameRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void sparks(GL2 gl, Color color) {
|
private static void sparks(GL2 gl, FlameSettings fs) {
|
||||||
// Use the same seed every time
|
// Use the same seed every time
|
||||||
Random r = new Random(0);
|
Random r = new Random(0);
|
||||||
|
|
||||||
float[] c = new float[4];
|
float[] c = new float[4];
|
||||||
float[] c2 = new float[4];
|
float[] c2 = new float[4];
|
||||||
convertColor(color, c);
|
convertColor(fs.getFlameColor(), c);
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
c[i] = c2[i] = c[i] * .2f + .8f;
|
c[i] = c2[i] = c[i] * .2f + .8f;
|
||||||
}
|
}
|
||||||
@ -471,17 +475,17 @@ public final class FlameRenderer {
|
|||||||
c2[3] = 1;
|
c2[3] = 1;
|
||||||
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
|
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
|
||||||
gl.glEnable(GL.GL_BLEND);
|
gl.glEnable(GL.GL_BLEND);
|
||||||
gl.glLineWidth(1f);
|
gl.glLineWidth(1 + (float)fs.getSparkWeight() * 1.0f);
|
||||||
for (int i = 0; i < 200; i++) {
|
for (int i = 0; i < 4000 * fs.getSparkConcentration(); i++) {
|
||||||
final float z = 2 * (r.nextFloat() * r.nextFloat() * r.nextFloat());
|
final float z = 0.01f + 2 * (r.nextFloat() * r.nextFloat() * r.nextFloat());
|
||||||
final float x = z * (r.nextFloat() - 0.5f);
|
final float x = z * (r.nextFloat() - 0.5f);
|
||||||
final float y = z * (r.nextFloat() - 0.5f);
|
final float y = z * (r.nextFloat() - 0.5f);
|
||||||
gl.glPointSize(1);
|
//gl.glPointSize(1);
|
||||||
gl.glBegin(GL.GL_LINES);
|
gl.glBegin(GL.GL_LINES);
|
||||||
gl.glColor4fv(c, 0);
|
gl.glColor4fv(c, 0);
|
||||||
gl.glVertex3f(x, y, z * 2);
|
gl.glVertex3f(x, y, z * 2);
|
||||||
gl.glColor4fv(c2, 0);
|
gl.glColor4fv(c2, 0);
|
||||||
gl.glVertex3f(x * 1.02f, y * 1.02f, z * 2 + 0.01f);
|
gl.glVertex3f(x * 1.02f, y * 1.02f, z * 2 + 0.01f + ((float)fs.getSparkWeight() / 20));
|
||||||
gl.glEnd();
|
gl.glEnd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user