/// <summary> /// レンダリング /// </summary> public virtual void Render() { if (!_初期化済み || !Visible) { return; } RenderContext.Instance.描画対象にする(ScreenContext); ScreenContext.RenderContextにマウス監視を登録する(); // 進行 ScreenContext.カメラを移動する(); // 一定時間が経過していれば、すべてのワールド座標の進行を行う。(経過していないなら何もしない。) RenderContext.Instance.Timer.一定時間が経過していればActionを行う(() => { RenderContext.Instance.ワールド座標をすべて更新する(ScreenContext); }); FpsCounter.フレームを進める(); // 描画 画面をクリアする(); ScreenContext.ワールド空間.登録されているすべての描画の必要があるものを描画する(); ScreenContext.SwapChain.Present(0, PresentFlags.None); // Present OnPresented(); }
/// <summary> /// リサイズされた。 /// </summary> private void RenderForm_ClientSizeChanged(object sender, EventArgs e) { if (ScreenContext != null && RenderContext.Instance.DeviceManager != null) { ScreenContext.スワップチェーンをリサイズする(); ScreenContext.行列管理.射影行列管理.アスペクト比 = (float)Width / Height; } }
protected override void OnClientSizeChanged(EventArgs e) { base.OnClientSizeChanged(e); if (!DesignMode && ScreenContext != null) { ScreenContext.スワップチェーンをリサイズする(); ScreenContext.行列管理.射影行列管理.アスペクト比 = (float)Width / Height; } }
protected override void OnHandleDestroyed(EventArgs e) { base.OnHandleDestroyed(e); RenderContext.Instance.ControltoScreenContextマップ.Remove(this); ScreenContext.Dispose(); if (RenderContext.Instance.ControltoScreenContextマップ.Count == 0) { RenderContext.Instance.Dispose(); } }
public ScreenContext Initialize(Control targetControl) { this.Initialize(); var matrixManager = this._行列を初期化する(); var primaryContext = new ScreenContext(targetControl, matrixManager); this.ControltoScreenContextマップ.Add(targetControl, primaryContext); this.描画ターゲットコンテキスト = primaryContext; this._レンダーターゲットを更新する(); return(primaryContext); }
/// <summary> /// レンダリング /// </summary> public virtual void Render() { if (!IsInitialized || !Visible) { return; } RenderContext.Instance.描画対象にする(ScreenContext); ScreenContext.カメラを移動する(); RenderContext.Instance.Timer.一定時間が経過していればActionを行う(() => { RenderContext.Instance.ワールド座標をすべて更新する(ScreenContext); }); FpsCounter.フレームを進める(); ClearViews(); ScreenContext.ワールド空間.登録されているすべての描画の必要があるものを描画する(); ScreenContext.SwapChain.Present(0, PresentFlags.None); }
/// <summary> /// <see cref="T:System.Windows.Forms.Control" /> とその子コントロールが使用しているアンマネージ リソースを解放します。オプションで、マネージ リソースも解放します。 /// </summary> /// <param name="disposing">マネージ リソースとアンマネージ リソースの両方を解放する場合は true。アンマネージ リソースだけを解放する場合は false。</param> protected override void Dispose(bool disposing) { base.Dispose(disposing); if (RenderContext.Instance != null) { RenderContext.Instance.ControltoScreenContextマップ.Remove(this); } ScreenContext?.Dispose(); if (RenderContext.Instance != null && RenderContext.Instance.ControltoScreenContextマップ.Count == 0) { RenderContext.Instance.Dispose(); } }
public ScreenContext ScreenContextを作成する(Control control) { var カメラ = new カメラ( カメラの初期位置: new Vector3(0, 20, -40), カメラの初期注視点: new Vector3(0, 3, 0), カメラの初期上方向ベクトル: new Vector3(0, 1, 0)); var 射影行列 = new 射影(); 射影行列.射影行列を初期化する((float)Math.PI / 4f, 1.618f, 1, 200); var matrixManager = new 行列管理(new ワールド行列(), カメラ, 射影行列); var context = new ScreenContext(control, matrixManager); this.ControltoScreenContextマップ.Add(control, context); return(context); }