public void Init() { carMaterial = new MaterialBuilder() .Build() .SetName("Car Material") .Attach(new Shader("Shaders\\Cars\\vert.glsl", ShaderType.VertexShader)) .Attach(new Shader("Shaders\\Cars\\Frag.glsl", ShaderType.FragmentShader)) .Link() .GetMaterial(); testMesh = MeshLoader.LoadAsset("Content\\Cars\\" + car + "\\model.obj"); wheelMesh = MeshLoader.LoadAsset("Content\\Cars\\wheel01.obj"); testTexture = TextureLoader.LoadAsset("Content\\Cars\\" + car + "\\texture.png"); decalTexture = TextureLoader.LoadAsset("Content\\Cars\\" + car + "\\decal.png"); decalTexture.textureUnit = TextureUnit.Texture1; using (var streamReader = new StreamReader("Content\\Cars\\" + car + "\\data.json")) data = Newtonsoft.Json.JsonConvert.DeserializeObject <VehicleData>(streamReader.ReadToEnd()); engineSound = TrackLoader.LoadAsset("Content\\Cars\\" + car + "\\engine.wav"); engineSound.OnPlaybackStop += (s, e) => { engineSound.PlayBeginning(); }; engineSound.Play(); // Rolling resistance is always (max speed) * drag, with max speed in metres per second data.rollingResistance = (data.maxSpeed / MPH_CONST) * data.drag; }
//public void RenderMultipleCars(ref Vector3 wheelPositions) //{ // // draw cars in V formation // for (int i = 0; i < 5; ++i) // { // Vector3 offset = Vector3.Zero; // if (i < 2) offset = new Vector3(i - 3, 0, i - 2); // else if (i > 2) offset = new Vector3(-i, 0, i - 2); // else if (i == 2) offset = new Vector3(0, 0, i - 2); // offset += new Vector3(0, 0, 1) * (float)Math.Sin(offset.X * offset.Z * Time.currentTime); // offset *= 4.0f; // for (int w = 0; w < wheelPositions.Length; ++w) // Render3D.DrawMesh(wheelMesh, // (wheelPositions[w] + position + offset + new Vector3(0, -0.35f, 0)) * -1.0f, // new Vector3(0.19f, 0.19f, 0.19f) * ((w % 2 == 1) ? -1 : 1), // wheelRenderRotation, // Quaternion.FromEulerAngles(new Vector3(-currentAccel * Time.currentTime * 10.0f, 0, 0)) * Quaternion.FromEulerAngles(new Vector3(0, ((w < 2) ? -turningWeight / 180.0f : 0) * (float)Math.Sin(offset.X * offset.Z * Time.currentTime), 0)), // testTexture); // Render3D.DrawMesh(testMesh, (position + offset) * -1.0f, new Vector3(0.2f, 0.2f, 0.2f), renderRotation, Quaternion.FromEulerAngles(new Vector3(-currentAccel / 100.0f, 0, turningWeight / 1080.0f)), testTexture, carMaterial); // } //} public void Init() { netClient = new NetClient(); carMaterial = new MaterialBuilder() .Build() .SetName("Car Material") .Attach(new Shader("Shaders\\Cars\\vert.glsl", ShaderType.VertexShader)) .Attach(new Shader("Shaders\\Cars\\Frag.glsl", ShaderType.FragmentShader)) .Link() .GetMaterial(); testMesh = MeshLoader.LoadAsset("Content\\Cars\\" + car + "\\model.obj"); wheelMesh = MeshLoader.LoadAsset("Content\\Cars\\wheel01.obj"); testTexture = TextureLoader.LoadAsset("Content\\Cars\\" + car + "\\texture.png"); decalTexture = TextureLoader.LoadAsset("Content\\Cars\\" + car + "\\decal.png"); decalTexture.textureUnit = TextureUnit.Texture1; using (var streamReader = new StreamReader("Content\\Cars\\" + car + "\\data.json")) data = Newtonsoft.Json.JsonConvert.DeserializeObject <VehicleData>(streamReader.ReadToEnd()); }
public override void Init() { carController = new CarController(); carController.Init(); sceneProperties = new SceneProperties(); Dictionary <string, string> texturesToLoad = new Dictionary <string, string>() { { "floor", @"Content\Tracks\grid.png" }, { "building", @"Content\Tracks\buildinguv.png" }, { "building2", @"Content\Tracks\buildinguv.png" }, { "sky", @"Content\vpsky.png" }, { "reflection", @"Content\Cars\reflection2.png" }, { "test", @"Content\advisorbg.png" }, { "road", @"Content\Tracks\road.png" }, }; Dictionary <string, string> meshesToLoad = new Dictionary <string, string>() { { "floor", @"Content\Tracks\circuit01.obj" }, { "sky", @"Content\vpsky.obj" }, { "building", @"Content\Tracks\building2.obj" }, { "road", @"Content\Tracks\road01.obj" }, { "cube", @"Content\sky.obj" }, }; foreach (var texture in texturesToLoad) { textures.Add(texture.Key, TextureLoader.LoadAsset(texture.Value)); } foreach (var mesh in meshesToLoad) { meshes.Add(mesh.Key, MeshLoader.LoadAsset(mesh.Value)); } //reflectionTexture.textureUnit = TextureUnit.Texture2; standardMat = new MaterialBuilder() .Build() .SetName("Standard Object Material") .Attach(new Shader("Shaders\\Standard\\vert.glsl", ShaderType.VertexShader)) .Attach(new Shader("Shaders\\Standard\\frag.glsl", ShaderType.FragmentShader)) .Link() .GetMaterial(); unlitMat = new MaterialBuilder() .Build() .SetName("Standard Object Material") .Attach(new Shader("Shaders\\Unlit\\vert.glsl", ShaderType.VertexShader)) .Attach(new Shader("Shaders\\Unlit\\frag.glsl", ShaderType.FragmentShader)) .Link() .GetMaterial(); materials.Add(standardMat); materials.Add(unlitMat); materials.Add(Render3D.defaultMaterial); materials.Add(Render2D.defaultSpriteMaterial); materials.Add(carController.carMaterial); RenderShared.renderResolution = new Vector2(320, 240); for (int x = -10; x < 10; ++x) { for (int y = -10; y < 10; ++y) { if (x != 0 && y != 0) { sceneObjects.Add(new SceneObject("Building", meshes["building"], new Vector3(40 * y, 0, 40 * x), new Vector3(-2, 2, 2) * Math.Max((((float)Math.Sin(x * y) + 2.0f) / 2.0f), 1.0f), Quaternion.Identity, Quaternion.FromEulerAngles(new Vector3(0, 90 * ((x * y) % 4), 0)), (x * y % 2 == 0) ? textures["building"] : textures["building2"], standardMat)); } } } sceneObjects.Add(new SceneObject("Floor", meshes["floor"], new Vector3(0, -0.2f, 0), new Vector3(10, 1, 10), Quaternion.Identity, Quaternion.Identity, textures["floor"], standardMat)); for (int i = -10; i < 10; ++i) { sceneObjects.Add(new SceneObject("Road " + (i + 11), meshes["road"], new Vector3(-i * 32, -0.18f, 0), new Vector3(1, 1, 1), Quaternion.Identity, Quaternion.Identity, textures["road"], standardMat)); } }