1
0
Fork 0

Merge branch 'master' of gitorious.org:fg/fgdata

This commit is contained in:
BARANGER Emmanuel 2014-05-14 22:29:40 +02:00
commit 55f8ba60b0
9 changed files with 249 additions and 330 deletions

View file

@ -1,7 +1,7 @@
var GPSmap196 = {
new: func(canvas_group) {
new: func() {
print("Load Garmin GPSmap196 canvas");
m = { parents : [GPSmap196] };
m.node = props.globals.initNode("/instrumentation/gps196");
@ -18,32 +18,36 @@ var GPSmap196 = {
m.buttonPower = m.node.initNode("inputs/button-power", 0, "BOOL");
m.rockerRight = m.node.initNode("inputs/rocker-right", 0, "BOOL");
m.buttonEnter = m.node.initNode("inputs/button-enter", 0, "BOOL");
m.gmt = props.globals.getNode("sim/time/gmt");
m.gpsmap196Screen = canvas.new({
"name": "GPSmap196-screen",
"size": [512, 512],
"view": [320, 240],
"mipmapping": 1
});
m.gpsmap196Screen.addPlacement({"node": "gps196.screen"});
var g = m.gpsmap196Screen.createGroup();
m.text = canvas_group.createChild("text", "optional-id-for element")
.setFontSize(14)
.setColor(1,0,0)
.setTranslation(10, 20)
.setAlignment("left-center")
.setText("This is a text element")
.setFont("LiberationFonts/LiberationSans-Regular.ttf");
m.text_title =
g.createChild("text", "line-title")
.setDrawMode(canvas.Text.TEXT + canvas.Text.FILLEDBOUNDINGBOX)
.setColor(0,0,0)
.setColorFill(0,1,0)
.setAlignment("center-top")
.setFont("LiberationFonts/LiberationMono-Bold.ttf")
.setFontSize(35, 1.5)
.setTranslation(150, 50);
return m;
},
update: func() {
me.text_title.setText(me.gmt.getValue());
settimer(func me.update(), 0);
}
};
setlistener("sim/signals/fdm-initialized", func() {
var gpsmap196Screen = canvas.new({
"name": "GPSmap196-screen",
"size": [512, 512],
"view": [320, 240],
"mipmapping": 1
});
gpsmap196Screen.addPlacement({"node": "gps196.screen"});
gpsmap196Canvas = GPSmap196.new(gpsmap196Screen.createGroup());
gpsmap196Canvas = GPSmap196.new();
gpsmap196Canvas.update();
});

View file

@ -292,69 +292,37 @@
<command>nasal</command>
<script>
<![CDATA[
var dlg = canvas.Window.new([512, 256], "dialog").set("resize", 1).set("title", "Garmin GPSmap196");
var gps196Widget = dlg.createCanvas().setColorBackground(0,0,1,1);
var gps196CanvasInstance = canvas.get({name: "GPSmap196-screen"});
var dlg = canvas.Window.new([1024, 512], "dialog").set("title", "Garmin GPSmap196");
var buttons = [
["gps196.widget.button.in", "button-in"], ["gps196.widget.button.out", "button-out"],
["gps196.widget.button.dto", "button-dto"], ["gps196.widget.button.page", "button-page"],
["gps196.widget.button.quit", "button-quit"], ["gps196.widget.button.nrst", "button-nrst"],
["gps196.widget.button.menu", "button-menu"], ["gps196.widget.button.enter", "button-enter"],
["gps196.widget.button.power", "button-power"], ["gps196.widget.rocker.up", "rocker-up"],
["gps196.widget.rocker.down", "rocker-down"], ["gps196.widget.rocker.left", "rocker-left"],
["gps196.widget.rocker.right", "rocker-right"]
];
var gps196Widget = dlg.createCanvas().setColorBackground(1,1,1,1);
var root = gps196Widget.createGroup();
canvas.parsesvg(root, "Aircraft/Instruments-3d/GPSmap196/widget/gpsmap196-widget.svg");
var display = root.getElementById("gps196.widget.screen");
var setButtonListener = func(btn, prop) {
root.getElementById(btn).addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/"~prop, 1); });
root.getElementById(btn).addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/"~prop, 0); });
root.getElementById(btn).set("z-index", 11);
}
var buttonIn = root.getElementById("gps196.widget.button.in");
buttonIn.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-in", 1); });
buttonIn.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-in", 0); });
for( var i=0; i<size(buttons); i=i+1){
setButtonListener(buttons[i][0], buttons[i][1]);
}
var buttonOut = root.getElementById("gps196.widget.button.out");
buttonOut.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-out", 1); });
buttonOut.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-out", 0); });
var background = root.createChild("image");
background.setFile("Aircraft/Instruments-3d/GPSmap196/widget/gpsmap196-widget.png").setSize(1024,512).set("z-index",10);
var buttonDto = root.getElementById("gps196.widget.button.dto");
buttonDto.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-dto", 1); });
buttonDto.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-dto", 0); });
var buttonPage = root.getElementById("gps196.widget.button.page");
buttonPage.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-page", 1); });
buttonPage.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-page", 0); });
var buttonQuit = root.getElementById("gps196.widget.button.quit");
buttonQuit.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-quit", 1); });
buttonQuit.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-quit", 0); });
var buttonMenu = root.getElementById("gps196.widget.button.menu");
buttonMenu.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-menu", 1); });
buttonMenu.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-menu", 0); });
var buttonNrst = root.getElementById("gps196.widget.button.nrst");
buttonNrst.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-nrst", 1); });
buttonNrst.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-nrst", 0); });
var buttonEnter = root.getElementById("gps196.widget.button.enter");
buttonEnter.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-enter", 1); });
buttonEnter.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-enter", 0); });
var buttonPower = root.getElementById("gps196.widget.button.power");
buttonPower.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/button-power", 1); });
buttonPower.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/button-power", 0); });
var rockerUp = root.getElementById("gps196.widget.rocker.up");
rockerUp.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/rocker-up", 1); });
rockerUp.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/rocker-up", 0); });
var rockerDown = root.getElementById("gps196.widget.rocker.down");
rockerDown.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/rocker-down", 1); });
rockerDown.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/rocker-down", 0); });
var rockerLeft = root.getElementById("gps196.widget.rocker.left");
rockerLeft.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/rocker-left", 1); });
rockerLeft.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/rocker-left", 0); });
var rockerRight = root.getElementById("gps196.widget.rocker.right");
rockerRight.addEventListener("mousedown", func(e) { setprop("instrumentation/gps196/inputs/rocker-right", 1); });
rockerRight.addEventListener("mouseup", func(e) { setprop("instrumentation/gps196/inputs/rocker-right", 0); });
var gps196CanvasInstance = canvas.get({name: "GPSmap196-screen"});
display.createChild("image").setFile(gps196CanvasInstance);
#dlg.setCanvas(canvas.get({name: "GPSmap196-screen"}));
var canvasScreenWidget = root.createChild("image");
canvasScreenWidget.setFile(gps196CanvasInstance.getPath()).setSize(563,359).setTranslation(87,53).set("z-index", 11);
]]>
</script>
</binding>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 262 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -92,6 +92,7 @@
<dot_density>1.0</dot_density>
<dot_size>1.0</dot_size>
<dust_resistance>1.0</dust_resistance>
<rock_strata>0</rock_strata>
<visibility><use>/environment/ground-visibility-m</use></visibility>
<avisibility><use>/environment/visibility-m</use></avisibility>
<lthickness><use>/environment/ground-haze-thickness-m</use></lthickness>
@ -658,6 +659,11 @@
<type>int</type>
<value><use>cloud_shadow_flag</use></value>
</uniform>
<uniform>
<name>rock_strata</name>
<type>int</type>
<value><use>rock_strata</use></value>
</uniform>
<uniform>
<name>texture</name>
<type>sampler-2d</type>

View file

@ -3076,6 +3076,7 @@
</texture-set>
<parameters>
<transition_model>0.5</transition_model>
<rock_strata>1</rock_strata>
</parameters>
<xsize>2000</xsize>
<ysize>2000</ysize>
@ -3100,6 +3101,7 @@
</texture-set>
<parameters>
<transition_model>0.5</transition_model>
<rock_strata>1</rock_strata>
</parameters>
<xsize>2000</xsize>
<ysize>2000</ysize>
@ -3118,12 +3120,13 @@
<name>EvergreenBroadCover</name>
<name>EvergreenForest</name>
<effect>Effects/forest</effect>
<texture-set>
<texture-set>
<texture>Terrain/forest1a.png</texture>
<texture n="12">Terrain/tundra-hawaii-green.png</texture>
</texture-set>
<parameters>
<texture n="12">Terrain/tundra-hawaii-green.png</texture>
</texture-set>
<parameters>
<transition_model>0.5</transition_model>
<rock_strata>1</rock_strata>
</parameters>
<xsize>2000</xsize>
<ysize>2000</ysize>
@ -3141,13 +3144,14 @@
<material include="Materials/regions/south_africa.xml">
<name>DryCropPastureCover</name>
<name>DryCrop</name>
<texture-set>
<texture-set>
<texture>Terrain/dry_pasture4.png</texture>
<texture n="12">Terrain/dirtrock.png</texture>
<texture n="15">Terrain/tundra-hawaii-green.png</texture>
</texture-set>
<parameters>
<texture n="12">Terrain/dirtrock.png</texture>
<texture n="15">Terrain/tundra-hawaii-green.png</texture>
</texture-set>
<parameters>
<dot_size>10.0</dot_size>
<rock_strata>1</rock_strata>
</parameters>
<object-mask>Terrain/drycrop1.mask.png</object-mask>
<object-mask>Terrain/drycrop2.mask.png</object-mask>
@ -3169,6 +3173,78 @@
<tree-width-m>12.0</tree-width-m>
</material>
<material include="Materials/regions/south_africa.xml">
<name>DryCropPastureCover</name>
<name>DryCrop</name>
<texture-set>
<texture>Terrain/dry_pasture4.png</texture>
<texture n="12">Terrain/dirtrock.png</texture>
<texture n="15">Terrain/tundra-hawaii-green.png</texture>
</texture-set>
<parameters>
<dot_size>10.0</dot_size>
<rock_strata>1</rock_strata>
</parameters>
<object-mask>Terrain/drycrop1.mask.png</object-mask>
<object-mask>Terrain/drycrop2.mask.png</object-mask>
<object-mask>Terrain/drycrop3.mask.png</object-mask>
<xsize>2000</xsize>
<ysize>2000</ysize>
<solid>1</solid>
<friction-factor>0.9</friction-factor>
<rolling-friction>0.1</rolling-friction>
<bumpiness>0.6</bumpiness>
<load-resistance>1e30</load-resistance>
<light-coverage>2000000.0</light-coverage>
<object-group include="Materials/base/farm-buildings.xml"/>
<wood-coverage>10000.0</wood-coverage>
<tree-texture>Trees/mixed.png</tree-texture>
<tree-varieties>8</tree-varieties>
<tree-range-m alias="/params/forest/tree-range-m"/>
<tree-height-m>20.0</tree-height-m>
<tree-width-m>12.0</tree-width-m>
</material>
<material include="Materials/regions/south_africa.xml">
<effect>Effects/cropgrass</effect>
<name>Grassland</name>
<texture-set>
<texture>Terrain/dry_pasture4.png</texture>
<texture n="12">Terrain/tundra-hawaii-green.png</texture>
</texture-set>
<parameters>
<rock_strata>1</rock_strata>
</parameters>
<xsize>2000</xsize>
<ysize>2000</ysize>
<light-coverage>2000000.0</light-coverage>
<diffuse>
<r>0.93</r>
<g>0.95</g>
<b>0.93</b>
<a>1.0</a>
</diffuse>
<specular>
<r>0.1</r>
<g>0.12</g>
<b>0.1</b>
<a>1.0</a>
</specular>
<shininess>1.2</shininess>
<solid>1</solid>
<friction-factor>0.7</friction-factor>
<rolling-friction>0.1</rolling-friction>
<bumpiness>0.3</bumpiness>
<load-resistance>1e30</load-resistance>
<wood-coverage>150000.0</wood-coverage>
<tree-texture>Trees/mixed.png</tree-texture>
<tree-varieties>8</tree-varieties>
<tree-range-m alias="/params/forest/tree-range-m"/>
<tree-height-m>20.0</tree-height-m>
<tree-width-m>12.0</tree-width-m>
</material>
<!-- REGIONAL DEFINITIONS - ASIA -->
<!-- Regional Asian irrigated crops -->

View file

@ -70,7 +70,7 @@ float shadow_func (in float x, in float y, in float noise, in float dist);
float Noise2D(in vec2 coord, in float wavelength);
float Noise3D(in vec3 coord, in float wavelength);
float VoronoiNoise2D(in vec2 coord, in float wavelength, in float xrand, in float yrand);
float slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
float SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
@ -235,8 +235,8 @@ float vnoise_rotation = VoronoiNoise2D(rawPos.xy, rotation_scale, distortion_fac
// slope noise
float slopenoise_50m = slopeLines2D(rawPos, grad_dir, 50.0, steepness);
float slopenoise_100m = slopeLines2D(rawPos, grad_dir, 100.0, steepness);
float slopenoise_50m = SlopeLines2D(rawPos, grad_dir, 50.0, steepness);
float slopenoise_100m = SlopeLines2D(rawPos, grad_dir, 100.0, steepness);
float snownoise_25m = mix(noise_25m, slopenoise_50m, clamp(3.0*(1.0-steepness),0.0,1.0));
float snownoise_50m = mix(noise_50m, slopenoise_100m, clamp(3.0*(1.0-steepness),0.0,1.0));

View file

@ -10,9 +10,11 @@
// * VoronoiNoise2D(in vec2 coord, in float wavelength, in float xrand, in float yrand)
// is a function mapping the terrain into random domains, based on Voronoi tiling of a regular grid
// distorted with xrand and yrand
// * slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
// * SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
// computes a semi-random set of lines along the direction of steepest descent, allowing to
// simulate e.g. water erosion patterns
// * Strata3D(in vec3 coord, in float wavelength, in float variation)
// computers a vertically stratified random pattern, appropriate e.g. for rock textures
// Thorsten Renk 2014
@ -218,7 +220,35 @@ float slopeLines2D(in float x, in float y, in float sx, in float sy, in float st
}
float slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
float SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
{
return slopeLines2D(coord.x/wavelength, coord.y/wavelength, gradDir.x, gradDir.y, steepness);
}
float strata3D(in float x, in float y, in float z, in float variation)
{
float integer_x = x - fract(x);
float fractional_x = x - integer_x;
float integer_y = y - fract(y);
float fractional_y = y - integer_y;
float integer_z = z - fract(z);
float fractional_z = z - integer_z;
float rand_value_low = rand3D(vec3(0.0, 0.0, integer_z));
float rand_value_high = rand3D(vec3(0.0, 0.0, integer_z+1));
float rand_var = 0.5 - variation + 2.0 * variation * rand3D(vec3(integer_x, integer_y, integer_z));
return (1.0 - smoothstep(rand_var -0.15, rand_var + 0.15, fract(z))) * rand_value_low + smoothstep(rand_var-0.15, rand_var + 0.15, fract(z)) * rand_value_high;
}
float Strata3D(in vec3 coord, in float wavelength, in float variation)
{
return strata3D(coord.x/wavelength, coord.y/wavelength, coord.z/wavelength, variation);
}

View file

@ -214,12 +214,7 @@ float noise_2000m = Noise2D(rawPos.xy, 2000.0);
float snow_alpha;
//float view_angle = abs(dot(normal, normalize(ecViewdir)));
//if ((quality_level > 3)&&(relPos.z + eye_alt +500.0 > snowlevel))
if (quality_level > 3)
if (quality_level > 3)
{
float sfactor;
noise_01m = Noise2D(rawPos.xy,0.1);
@ -280,28 +275,32 @@ if ((dist < 5000.0)&& (quality_level > 3) && (wetness>0.0))
// light computations
vec4 light_specular = gl_LightSource[0].specular;
eShade = 0.9 * smoothstep(terminator_width+ terminator, -terminator_width + terminator, yprime_alt) + 0.1;
vec4 light_specular = gl_LightSource[0].specular * eShade;
// If gl_Color.a == 0, this is a back-facing polygon and the
// normal should be reversed.
n = normal;
n = normalize(n);
float fresnel;
NdotL = dot(n, lightDir);
if (quality_level > 4)
{
NdotL = NdotL + (3.0 * N.r + 0.1 * (noise_01m-0.5))* (1.0 - water_factor) ;
}
if (NdotL > 0.0) {
if (NdotL > 0.0)
{
if (cloud_shadow_flag == 1)
{NdotL = NdotL * shadow_func(relPos.x, relPos.y, 1.0, dist);}
color += diffuse_term * NdotL;
NdotHV = max(dot(n, halfVector), 0.0);
specular.rgb = ((gl_FrontMaterial.specular.rgb + (water_factor * vec3 (1.0, 1.0, 1.0)))
fresnel = 1.0 + 5.0 * (1.0-smoothstep(0.0,0.2, dot(normalize(ecViewdir),n)));
specular.rgb = ((vec3 (0.2,0.2,0.2) * fresnel + (water_factor * vec3 (1.0, 1.0, 1.0)))
* light_specular.rgb
* pow(NdotHV, gl_FrontMaterial.shininess + (20.0 * water_factor)));
}
* pow(NdotHV, max(4.0, (20.0 * water_factor))));
}
color.a = 1.0;//diffuse_term.a;
// This shouldn't be necessary, but our lighting becomes very
// saturated. Clamping the color before modulating by the texture
@ -430,9 +429,6 @@ hazeColor.g = light_func(lightArg, 3.931e-06, 0.264, 3.827, 7.93e-06, 1.0);
hazeColor.r = light_func(lightArg, 8.305e-06, 0.161, 3.827, 3.04e-05, 1.0);
// now dim the light for haze
eShade = 0.9 * smoothstep(terminator_width+ terminator, -terminator_width + terminator, yprime_alt) + 0.1;
// Mie-like factor
if (lightArg < 10.0)

View file

@ -57,6 +57,7 @@ uniform int quality_level;
uniform int tquality_level;
uniform int wind_effects;
uniform int cloud_shadow_flag;
uniform int rock_strata;
const float EarthRadius = 5800000.0;
const float terminator_width = 200000.0;
@ -70,8 +71,8 @@ float shadow_func (in float x, in float y, in float noise, in float dist);
float DotNoise2D(in vec2 coord, in float wavelength, in float fractionalMaxDotSize, in float dot_density);
float Noise2D(in vec2 coord, in float wavelength);
float Noise3D(in vec3 coord, in float wavelength);
float slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
float SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
float Strata3D(in vec3 coord, in float wavelength, in float variation);
@ -237,8 +238,8 @@ float dotnoisegrad_10m;
// slope noise
float slopenoise_50m = slopeLines2D(rawPos, grad_dir, 50.0, steepness);
float slopenoise_100m = slopeLines2D(rawPos, grad_dir, 100.0, steepness);
float slopenoise_50m = SlopeLines2D(rawPos, grad_dir, 50.0, steepness);
float slopenoise_100m = SlopeLines2D(rawPos, grad_dir, 100.0, steepness);
float snownoise_25m = mix(noise_25m, slopenoise_50m, clamp(3.0*(1.0-steepness),0.0,1.0));
float snownoise_50m = mix(noise_50m, slopenoise_100m, clamp(3.0*(1.0-steepness),0.0,1.0));
@ -348,6 +349,21 @@ float mix_factor;
texel = mix(texel, gradient_texel, 1.0 - smoothstep(0.75,0.8,abs(steepness)+ 0.00002* msl_altitude + 0.05 * (noise_50m - 0.5)));
local_autumn_factor = texel.a;
}
// strata noise
float stratnoise_50m;
float stratnoise_10m;
if (rock_strata==1)
{
stratnoise_50m = Strata3D(vec3 (rawPos.x, rawPos.y, msl_altitude), 50.0, 0.2);
stratnoise_10m = Strata3D(vec3 (rawPos.x, rawPos.y, msl_altitude), 10.0, 0.2);
stratnoise_50m = mix(stratnoise_50m, 1.0, smoothstep(0.8,0.9, steepness));
stratnoise_10m = mix(stratnoise_10m, 1.0, smoothstep(0.8,0.9, steepness));
texel *= (0.4 + 0.4 * stratnoise_50m + 0.2 * stratnoise_10m);
}
// the dot vegetation texture overlay