예제 #1
0
        void RenderLimb(int limbIdx, bool overlay = false)
        {
            _renderer.RdpMtxStack.Push();


            if (_curAnim != null)
            {
                _renderer.RdpMtxStack.Load(CalcMatrix(_renderer.RdpMtxStack.Top(), limbIdx));

                if (overlay)
                {
                    GL.Begin(PrimitiveType.Points);
                    GL.Vertex3(0, 0, 0);
                    GL.End();

                    if (_limbs[limbIdx].Child != 0xFF)
                    {
                        Vector3 childPos = GetLimbPos(_limbs[limbIdx].Child);
                        GL.Begin(PrimitiveType.Lines);
                        GL.Vertex3(0, 0, 0);
                        GL.Vertex3(childPos);
                        GL.End();
                    }
                }
                else
                {
                    var node = treeView_hierarchy.SelectedNode;
                    _renderer.SetHightlightEnabled(node?.Tag?.Equals(_limbs[limbIdx]) ?? false);

                    if (_limbDlists[limbIdx] != null)
                    {
                        _renderer.RenderDList(_limbDlists[limbIdx]);
                    }
                }
            }

            if (_limbs[limbIdx].Child != 0xFF)
            {
                RenderLimb(_limbs[limbIdx].Child, overlay);
            }

            _renderer.RdpMtxStack.Pop();

            if (_limbs[limbIdx].Sibling != 0xFF)
            {
                RenderLimb(_limbs[limbIdx].Sibling, overlay);
            }
        }
예제 #2
0
        void RenderCallback(Matrix4 proj, Matrix4 view)
        {
            _renderer.RenderStart(proj, view);

            if (_dlistError != null)
            {
                toolStripStatusErrorLabel.Text = _dlistError;
                return;
            }

            foreach (var routine in _routines)
            {
                _renderer.ModelMtxStack.Push(Matrix4.CreateTranslation(routine.X, routine.Y, routine.Z));
                _renderer.RenderDList(routine.Dlist);
                _renderer.ModelMtxStack.Pop();
            }

            toolStripStatusErrorLabel.Text = _renderer.RenderFailed()
                ? $"RENDER ERROR AT 0x{_renderer.RenderErrorAddr:X8}! ({_renderer.ErrorMsg})"
                : "";
        }