public bool RayTest(Raycaster raycaster, ref RaycastHit hit) { // 0 1 2 // 0 2 3 float cubesize = .5f; for (float x = this.x; x <= this.x + width; x++) { for (float z = this.z; z <= this.z + length; z++) { if (raycaster.RayTestTriangle(ref up, -cubesize + x, -.5F + y, cubesize + z, cubesize + x, -.5F + y, cubesize + z, cubesize + x, -.5F + y, -cubesize + z, out h) || raycaster.RayTestTriangle(ref up, -cubesize + x, -.5F + y, cubesize + z, cubesize + x, -.5F + y, -cubesize + z, -cubesize + x, -.5F + y, -cubesize + z, out h)) { int hx, hy, hz; hx = (int)Math.Round(h.X, 0); hy = (int)Math.Round(h.Y, 0); hz = (int)Math.Round(h.Z, 0); hit.distance = raycaster.distance(hx * .5f, hy * .5f + .5f, hz * .5f); hit.x = hx; hit.y = (int)y - 1; hit.z = hz; hit.side = Side.Top; return(true); } } } return(false); }
protected override void OnLoad(EventArgs e) { string version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); Title = String.Format("StoneVox 3D - version {0}", version); GL.Viewport(0, 0, Width, Height); Qfont_1280 = new QFont("data\\fonts\\Bigfish.ttf", 11.2f, new QFontBuilderConfiguration(true, false)); Qfont_1400 = new QFont("data\\fonts\\Bigfish.ttf", 12f, new QFontBuilderConfiguration(true, false)); Qfont_1920 = new QFont("data\\fonts\\Bigfish.ttf", 15, new QFontBuilderConfiguration(true, false)); if (Width <= 1280) { Qfont = Qfont_1280; } else if (Width < 1400) { Qfont = Qfont_1400; } else { Qfont = Qfont_1920; } this.Qfont.Options.Colour = Color.White; //this.Qfont.Options.TransformToViewport = new TransformViewport(-1,-1,2,2); Scale.SetHScaling(0, Width); Scale.SetVScaling(0, Height); ShaderUtil.CreateShader("quad_interpolation", "./data/shaders/QuadInterpolation.vs", "./data/shaders/QuadInterpolation.fs"); broadcaster = new Broadcaster(); manager = new QbManager(broadcaster); input = new Input(this); camera = new Camera(this, input, manager); brushes = new BrushManager(this, input); floor = new Floor(camera, broadcaster); gui = new GUI(this, manager, input); selection = new Selection(this, brushes, input, manager, floor, gui); renderer = new Wireframe(camera, selection, floor, input); undoredo = new UndoRedo(input); selection.GenerateVertexArray(); if (!manager.HasModel) { manager.AddEmpty(); } camera.LookAtModel(true); backcolor = new Color4(0, 0, 0, 0); GL.Enable(EnableCap.DepthTest); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Back); int ole_hresult = OleInitialize(IntPtr.Zero); IntPtr handle = FindWindowByCaption(IntPtr.Zero, Title); dnd = new DragDropTarget(); int dnd_hresult = RegisterDragDrop(handle, dnd); raycaster = new Raycaster(this, camera, selection, floor, input, manager, gui); selection.raycaster = raycaster; Client.Initialized = true; base.OnLoad(e); SetForegroundWindow(WindowInfo.Handle); }