public void DisplayFrustum() { Entity entity = new Entity(Entity); MeshRenderer mr = entity.AddComponent <MeshRenderer>(); mr.material_ = new MaterialDX11(); mr.SetFillMode(FillMode.Wireframe); mr.material_.SetMainColor(1.0f, 1.0F, 1.0F, 1.0F); mr.model_ = ProjectionMesh.GetModel(GetProjection()); }
public override void Initialize() { projector = (Projector)Entity.GetComponent(ComponentType.Projector); son = Entity.Append(new Entity()); // Une "vue" pointe en z négatif alors on ajoute le modèle de projection qu'on retourne comme une crêpe sonmr = son.AddComponent <MeshRenderer>(); sonmr.material_.SetMainColor(1.0f, 0.0f, 0.0f, 1.0f); sonmr.model_ = ProjectionMesh.GetModel(projector.Projection); sonmr.SetFillMode(SharpDX.Direct3D11.FillMode.Wireframe); }
public override void OnKeyDown(KeyboardEvent e) { float rotatecoef = 0.03f; float translatecoef = 0.2f; // Field Of View if (e.keycode_ == KeyCode.Key_1) { projector.SetFrustum ( projector.GetFrustum().GetFieldOfView() + 0.01f, projector.GetFrustum().GetRatio(), projector.GetFrustum().GetNearPlane(), projector.GetFrustum().GetFarPlane() ); sonmr.model_ = ProjectionMesh.GetModel(projector.m_View.projection_); } if (e.keycode_ == KeyCode.Key_2) { projector.SetFrustum ( projector.GetFrustum().GetFieldOfView() - 0.01f, projector.GetFrustum().GetRatio(), projector.GetFrustum().GetNearPlane(), projector.GetFrustum().GetFarPlane() ); sonmr.model_ = ProjectionMesh.GetModel(projector.m_View.projection_); } // Rotations if (e.keycode_ == KeyCode.Key_T) { transform.RotateEuler(0.0f, rotatecoef, 0.0f); } if (e.keycode_ == KeyCode.Key_G) { transform.RotateEuler(0.0f, -rotatecoef, 0.0f); } if (e.keycode_ == KeyCode.Key_Y) { transform.RotateEuler(rotatecoef, 0.0f, 0.0f); } if (e.keycode_ == KeyCode.Key_H) { transform.RotateEuler(-rotatecoef, 0.0f, 0.0f); } if (e.keycode_ == KeyCode.Key_U) { transform.RotateEuler(0.0f, 0.0f, rotatecoef); } if (e.keycode_ == KeyCode.Key_J) { transform.RotateEuler(0.0f, 0.0f, rotatecoef); } // Translations if (e.keycode_ == KeyCode.Key_Z) { transform.Translate(0.0f, 0.0f, translatecoef); } if (e.keycode_ == KeyCode.Key_S) { transform.Translate(0.0f, 0.0f, -translatecoef); } if (e.keycode_ == KeyCode.Key_Q) { transform.Translate(-translatecoef, 0.0f, 0.0f); } if (e.keycode_ == KeyCode.Key_D) { transform.Translate(translatecoef, 0.0f, 0.0f); } if (e.keycode_ == KeyCode.Key_R) { transform.Translate(0.0f, translatecoef, 0.0f); } if (e.keycode_ == KeyCode.Key_F) { transform.Translate(0.0f, -translatecoef, 0.0f); } }
public void LoadCalibration(string path) { if (path == null || path.Length == 0) { return; } string json = ""; try { string line; StreamReader theReader = new StreamReader(path, Encoding.Default); using (theReader) { do { line = theReader.ReadLine(); if (line != null) { json += line; } }while (line != null); theReader.Close(); } } catch (Exception e) { //Console.WriteLine("{0}\n", e.Message); Debug.Log(e.Message); return; } var N = JSON.Parse(json); fieldOfView = N["FieldOfView"].AsFloat; cameraCount = N["Cameras"].Count; renderTextureSize = new Vector2(N["TextureWidth"].AsInt, N["TextureHeight"].AsInt); xDivisions = N["XDivisions"].AsInt; yDivisions = N["YDivisions"].AsInt; arrangement = (CameraArragement)N["Arrangement"].AsInt; overlap = new Vector2(N["OverlapX"].AsFloat, N["OverlapY"].AsFloat); viewportSize = N["ViewportSize"].AsFloat; near = N["Near"].AsFloat; far = N["Far"].AsFloat; projectionCameraSpace = N["Spacing"].AsFloat; DestroyCameras(); InitCameras(); for (int i = 0; i < cameraCount; i++) { ProjectionMesh projectionMesh = projectionCameras[i]; projectionMesh.referenceCameraOffset.x = N["Cameras"][i]["OffsetX"].AsFloat; projectionMesh.referenceCameraOffset.y = N["Cameras"][i]["OffsetY"].AsFloat; projectionMesh.leftFadeRange = N["Cameras"][i]["LeftFadeRange"].AsFloat; projectionMesh.leftFadeChoke = N["Cameras"][i]["LeftFadeChoke"].AsFloat; projectionMesh.rightFadeRange = N["Cameras"][i]["RightFadeRange"].AsFloat; projectionMesh.rightFadeChoke = N["Cameras"][i]["RightFadeChoke"].AsFloat; projectionMesh.topFadeRange = N["Cameras"][i]["TopFadeRange"].AsFloat; projectionMesh.topFadeChoke = N["Cameras"][i]["TopFadeChoke"].AsFloat; projectionMesh.bottomFadeRange = N["Cameras"][i]["BottomFadeRange"].AsFloat; projectionMesh.bottomFadeChoke = N["Cameras"][i]["BottomFadeChoke"].AsFloat; projectionMesh.trapezoidAnchor = (ProjectionMesh.AnchorPosition)N["Cameras"][i]["TrapezoidAnchor"].AsInt; projectionMesh.trapezoidAngle = N["Cameras"][i]["TrapezoidAngle"].AsFloat; projectionMesh.skewAnchor = (ProjectionMesh.AnchorPosition)N["Cameras"][i]["SkewAnchor"].AsInt; projectionMesh.skewAngle = N["Cameras"][i]["SkewAngle"].AsFloat; for (int j = 0; j < (xDivisions + 1); j++) { projectionMesh.topOffset[j] = new Vector2(N["Cameras"][i]["TopOffset"][j]["x"].AsFloat, N["Cameras"][i]["TopOffset"][j]["y"].AsFloat); projectionMesh.bottomOffset[j] = new Vector2(N["Cameras"][i]["BottomOffset"][j]["x"].AsFloat, N["Cameras"][i]["BottomOffset"][j]["y"].AsFloat); } projectionMesh.CreateMesh(); projectionMesh.BlendRefresh(); projectionMesh.OffsetRefresh(); projectionMesh.UpdateUI(); } LinkUI(); defaultCalibrationFile = path; }
public override void OnInspectorGUI() { //DrawDefaultInspector(); serializedObject.Update(); myScript = (ProjectionMesh)target; EditorGUILayout.Space(); EditorGUILayout.LabelField("Reference Camera", EditorStyles.boldLabel); myScript.referenceCameraOffset = EditorGUILayout.Vector2Field("Pano Camera Offset", myScript.referenceCameraOffset); EditorGUILayout.Space(); EditorGUILayout.LabelField("Blending", EditorStyles.boldLabel); float topFadeRange = EditorGUILayout.FloatField("Top Fade Range", myScript.topFadeRange); topFadeRange = Mathf.Clamp(topFadeRange, 0f, 1f); myScript.topFadeRange = topFadeRange; float topFadeChoke = EditorGUILayout.FloatField("Top Fade Choke", myScript.topFadeChoke); topFadeChoke = Mathf.Clamp(topFadeChoke, 0f, 0.999f); myScript.topFadeChoke = topFadeChoke; float bottomFadeRange = EditorGUILayout.FloatField("Bottom Fade Range", myScript.bottomFadeRange);; bottomFadeRange = Mathf.Clamp(bottomFadeRange, 0f, 1f); myScript.bottomFadeRange = bottomFadeRange; float bottomFadeChoke = EditorGUILayout.FloatField("Bottom Fade Choke", myScript.bottomFadeChoke); bottomFadeChoke = Mathf.Clamp(bottomFadeChoke, 0f, 0.999f); myScript.bottomFadeChoke = bottomFadeChoke; float leftFadeRange = EditorGUILayout.FloatField("Left Fade Range", myScript.leftFadeRange); leftFadeRange = Mathf.Clamp(leftFadeRange, 0f, 1f); myScript.leftFadeRange = leftFadeRange; float leftFadeChoke = EditorGUILayout.FloatField("Left Fade Choke", myScript.leftFadeChoke); leftFadeChoke = Mathf.Clamp(leftFadeChoke, 0f, 0.999f); myScript.leftFadeChoke = leftFadeChoke; float rightFadeRange = EditorGUILayout.FloatField("Right Fade Range", myScript.rightFadeRange); rightFadeRange = Mathf.Clamp(rightFadeRange, 0f, 1f); myScript.rightFadeRange = rightFadeRange; float rightFadeChoke = EditorGUILayout.FloatField("Right Fade Choke", myScript.rightFadeChoke); rightFadeChoke = Mathf.Clamp(rightFadeChoke, 0f, 0.999f); myScript.rightFadeChoke = rightFadeChoke; EditorGUILayout.Space(); EditorGUILayout.LabelField("Custom Options", EditorStyles.boldLabel); switch (myScript.mode) { case ProjectionMesh.ProjectionMode.CUSTOM: myScript.trapezoidAngle = EditorGUILayout.FloatField("Trapezoid Angle", myScript.trapezoidAngle); myScript.trapezoidAnchor = (ProjectionMesh.AnchorPosition)EditorGUILayout.EnumPopup("Trapezoid Anchor", myScript.trapezoidAnchor); myScript.skewAngle = EditorGUILayout.FloatField("Skew Angle", myScript.skewAngle); myScript.skewAnchor = (ProjectionMesh.AnchorPosition)EditorGUILayout.EnumPopup("Skew Anchor", myScript.skewAnchor); if (myScript.topOffset == null || myScript.prevXDivision != myScript.xDivisions || myScript.prevYDivision != myScript.yDivisions) { myScript.topOffset = new Vector2[myScript.xDivisions + 1]; myScript.bottomOffset = new Vector2[myScript.xDivisions + 1]; for (int i = 0; i < myScript.xDivisions + 1; i++) { myScript.topOffset[i] = Vector2.zero; myScript.bottomOffset[i] = Vector2.zero; } } EditorGUILayout.Space(); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Top Offset", EditorStyles.boldLabel); for (int i = 0; i < myScript.xDivisions + 1; i++) { myScript.topOffset[i] = EditorGUILayout.Vector2Field(i + ":", myScript.topOffset[i]); } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Bottom Offset", EditorStyles.boldLabel); for (int i = 0; i < myScript.xDivisions + 1; i++) { myScript.bottomOffset[i] = EditorGUILayout.Vector2Field(i + ":", myScript.bottomOffset[i]); } EditorGUILayout.EndVertical(); myScript.prevXDivision = myScript.xDivisions; myScript.prevYDivision = myScript.yDivisions; break; default: break; } EditorGUILayout.Space(); GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); foldoutStyle.fontStyle = FontStyle.Bold; showReferenceGameObjects = EditorGUILayout.Foldout(showReferenceGameObjects, "Reference Game Objects", foldoutStyle); if (showReferenceGameObjects) { myScript.targetCamera = (Camera)EditorGUILayout.ObjectField("Target Camera", myScript.targetCamera, typeof(Camera), true); myScript.projectionUI = (ProjectionUI)EditorGUILayout.ObjectField("Calibration UI", myScript.projectionUI, typeof(ProjectionUI), true); myScript.controlPointsContainer = (Transform)EditorGUILayout.ObjectField("Control Points Container", myScript.controlPointsContainer, typeof(Transform), true); myScript.meshFilter = (MeshFilter)EditorGUILayout.ObjectField("Mesh Filter", myScript.meshFilter, typeof(MeshFilter), true); } if (GUI.changed) { if (myScript.editVertexIndex < 0) { myScript.editVertexIndex = 0; } else if (myScript.editVertexIndex > (myScript.xDivisions + 1) * 2 - 1) { myScript.editVertexIndex = (myScript.xDivisions + 1) * 2 - 1; } myScript.ClearControlPoints(); myScript.CreateMesh(); myScript.BlendRefresh(); //EditorUtility.SetDirty(myScript); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); } serializedObject.ApplyModifiedProperties(); }
void OnEnable() { myScript = (ProjectionMesh)target; }
static void Main() { ApplicationDX11 application = new ApplicationDX11(1280, 720); Camera.Main.Entity.AddComponent <Trackview>(); MaterialDX11 projectorMaterial = new MaterialDX11("vDefault.cso", "pProjector.cso", "gDefault.cso"); projectorMaterial.samplers.Add ( new SamplerState ( ApplicationDX11.Instance.Device, new SamplerStateDescription() { AddressU = TextureAddressMode.Border, AddressV = TextureAddressMode.Border, AddressW = TextureAddressMode.Border, BorderColor = new Color4(1.0f, 0.0f, 0.0f, 1.0f), ComparisonFunction = Comparison.LessEqual, Filter = Filter.MinMagMipPoint, MaximumAnisotropy = 0, MaximumLod = sizeof(float), MinimumLod = 0, MipLodBias = 0 } ) ); //MaterialDX11 testRender = new MaterialDX11("vDefault.cso", "pShowAlphaValue.cso", "gDefault.cso"); Entity pointLight = new Entity(); DirectionalLight pl = pointLight.AddComponent <DirectionalLight>(); pl.SetSpecularIntensity(0.01f); pl.SetIntensity(1.0f); pointLight.transform_.SetPosition(0.0f, 20.0f, 0.0f); pointLight.transform_.RotateEuler(0.0f, 3.141592f / 1.5f, 0.0f); Entity sphere = new Entity(); MeshRenderer spheremr = sphere.AddComponent <MeshRenderer>(); spheremr.material_ = projectorMaterial; spheremr.model_ = Sphere.Mesh(1.0f, 30, 30); Entity cube4 = new Entity(); MeshRenderer cube4mr = cube4.AddComponent <MeshRenderer>(); cube4mr.material_ = projectorMaterial; cube4mr.material_.SetMainColor(0.5f, 0.5f, 0.5f, 1.0F); cube4mr.model_ = Cube.Mesh; cube4.transform_.Translate(1.0f, 5.5f, 0.0f); cube4.transform_.SetScale(4.0f, 4.0f, 4.0f); sphere.transform_.Translate(10.0f, 7.0f, 7.0f); sphere.transform_.RotateEuler(0.0f, 3.141592f / 2.0f, 0.0f); sphere.transform_.SetScale(3.0f, 3.0f, 3.0f); Entity floor = new Entity(); MeshRenderer floormr = floor.AddComponent <MeshRenderer>(); floormr.material_ = projectorMaterial; floormr.model_ = Quad.GetMesh(); floor.transform_.RotateEuler(0.0f, 3.141592f / 2.0f, 0.0f); floor.transform_.SetScale(40.0f, 40.0f, 40.0f); floor.transform_.Translate(0.0f, 0.0f, 0.0f); Entity wallN = new Entity(); MeshRenderer wallNmr = wallN.AddComponent <MeshRenderer>(); wallNmr.material_ = projectorMaterial; wallNmr.model_ = Quad.GetMesh(); wallN.transform_.RotateEuler(0.0f, 0.0f, 0.0f); wallN.transform_.SetScale(40.0f, 40.0f, 40.0f); wallN.transform_.Translate(0.0f, 20.0f, 20.0f); Entity wallS = new Entity(); MeshRenderer wallSmr = wallS.AddComponent <MeshRenderer>(); wallSmr.material_ = projectorMaterial; wallSmr.model_ = Quad.GetMesh(); wallS.transform_.RotateEuler(3.141592f, 0.0f, 0.0f); wallS.transform_.SetScale(40.0f, 40.0f, 40.0f); wallS.transform_.Translate(0.0f, 20.0f, -20.0f); Entity wallE = new Entity(); MeshRenderer wallEmr = wallE.AddComponent <MeshRenderer>(); wallEmr.material_ = projectorMaterial; wallEmr.model_ = Quad.GetMesh(); wallE.transform_.RotateEuler(-3.141592f / 2.0f, 0.0f, 0.0f); wallE.transform_.SetScale(40.0f, 40.0f, 40.0f); wallE.transform_.Translate(-20.0f, 20.0f, 0.0f); ////application.scene_.Append(new BitmapImage(application.shadowmap.shaderResourceView_, testRender)); Entity proj = new Entity(); Projector projector = proj.AddComponent <Projector>(); projector.SetProjection ( new FrustumProjection ( 3.141592f / 3.0f, 1.0f, 0.1f, 1000.0f ) ); projector.SetImage(ResourceManager.GetImageFromFile("blastoise.png")); MeshRenderer mrProjector = proj.AddComponent <MeshRenderer>(); mrProjector.model_ = ProjectionMesh.GetModel(projector.Projection); mrProjector.material_ = new MaterialDX11(); mrProjector.material_.SetMainColor(0.0f, 0.0f, 1.0f, 1.0f); mrProjector.SetFillMode(FillMode.Wireframe); // ) // (new Projector( // cam.GetRenderTextureSRV(), // ); //proj.transform_.Translate(0.0f, 10.0f, -10.0f); //proj.AddComponent<ProjectorBehavior>(); application.Run(); }