コード例 #1
0
        public void DrawModel()
        {
            int width  = Controls[(SoftwareRendering ? 2 : 1)].Width;
            int height = Controls[(SoftwareRendering ? 2 : 1)].Height;

            Array.Copy(checkerboard, pixel_buffer, pixel_buffer.Length);
            DrawingArea.initDrawingArea(height, width, pixel_buffer);
            Rasterizer.method364();

            bool success = false;

            if (SelectedModel != null)
            {
                try
                {
                    int k3 = Rasterizer.center_x;
                    int j4 = Rasterizer.center_y;
                    Rasterizer.center_x = c_x + DrawingArea.width / 2;
                    Rasterizer.center_y = c_y + DrawingArea.height / 2;
                    while (Yaw < 0)
                    {
                        Yaw += Model.SIN.Length;
                    }
                    while (Pitch < 0)
                    {
                        Pitch += Model.COS.Length;
                    }
                    while (Roll < 0)
                    {
                        Roll += Model.COS.Length;
                    }
                    Yaw   %= Model.SIN.Length;
                    Pitch %= Model.COS.Length;
                    Roll  %= Model.COS.Length;
                    int  i5       = Rasterizer.SIN[Yaw] * c_z >> 16;
                    int  l5       = Rasterizer.COS[Yaw] * c_z >> 16;
                    bool animated = false;                     //interfaceIsSelected(class9_1);
                    int  i7;

                    /*if (animated)
                     *      i7 = class9_1.anInt258;
                     * else
                     *      i7 = class9_1.anInt257;
                     * Model model;
                     * if (i7 == -1)
                     * {
                     *      model = class9_1.method209(-1, -1, animated);
                     * }
                     * else
                     * {
                     *      Animation animation = Animation.anims[i7];
                     *      model = class9_1.method209(animation.anIntArray354[class9_1.anInt246], animation.anIntArray353[class9_1.anInt246], animated);
                     * }*/
                    if (SelectedModel != null)
                    {
                        SelectedModel.Render(Pitch, Roll, Yaw, 0, i5, l5);
                    }
                    Rasterizer.center_x = k3;
                    Rasterizer.center_y = j4;

                    if (!SoftwareRendering)
                    {
                        Gl.glClearColor(.5f, 1, 1, 1);
                        Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

                        Gl.glMatrixMode(Gl.GL_PROJECTION);
                        Gl.glLoadIdentity();
                        Gl.glOrtho(0, width, 0, height, -1, 1);
                        Gl.glMatrixMode(Gl.GL_MODELVIEW);
                        Gl.glViewport(0, 0, width, height);

                        Gl.glTexSubImage2D(Gl.GL_TEXTURE_2D, 0, 0, 0, width, height, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, DrawingArea.pixels);
                        Gl.glBegin(Gl.GL_QUADS);
                        Gl.glTexCoord2d(0.0, 1.0); Gl.glVertex2d(0.0, 0.0);
                        Gl.glTexCoord2d(1.0, 1.0); Gl.glVertex2d(width, 0.0);
                        Gl.glTexCoord2d(1.0, 0.0); Gl.glVertex2d(width, height);
                        Gl.glTexCoord2d(0.0, 0.0); Gl.glVertex2d(0.0, height);
                        Gl.glEnd();

                        gl_control.Invalidate();
                    }
                    else
                    {
                        software_control.Image = DrawingArea.ToBitmap();
                    }
                    success = true;
                }
                catch (Exception)
                {
                    success = false;
                }
            }
            else
            {
                Controls[(SoftwareRendering ? 2 : 1)].Visible = false;
                Controls[0].Visible = true;
                this.Invalidate();
            }

            if (!success)
            {
                Controls[(SoftwareRendering ? 2 : 1)].Visible = false;
                Controls[0].Visible = true;
                if (!SoftwareRendering)
                {
                    gl_control.Invalidate();
                }
                else
                {
                    software_control.Invalidate();
                }
            }
            else
            {
                Controls[(SoftwareRendering ? 2 : 1)].Visible = true;
                Controls[0].Visible = false;
            }
        }