예제 #1
0
        private void EyeRotate(float n)
        {
            Transformacao4D matA = new Transformacao4D();

            matA.AtribuirTranslacao(camera.At.X, camera.At.Y, camera.At.Z);
            Transformacao4D matB = new Transformacao4D();

            matB.AtribuirRotacaoY(n * Math.PI / 120);
            matA = matA.MultiplicarMatriz(matB);
            matB.AtribuirTranslacao(-1 * camera.At.X, -1 * camera.At.Y, -1 * camera.At.Z);
            matA            = matA.MultiplicarMatriz(matB);
            this.camera.Eye = PontoToVector(matA.MultiplicarPonto(VectorToPonto(this.camera.Eye)));
        }
예제 #2
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame(e);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            Matrix4 modelview = Matrix4.LookAt(camera.Eye, camera.At, camera.Up);

            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadMatrix(ref modelview);
#if CG_Gizmo
            Sru3D();
#endif
            for (var i = 0; i < objetosLista.Count; i++)
            {
                objetosLista[i].Desenhar();
            }
            if (bBoxDesenhar && (objetoSelecionado != null))
            {
                objetoSelecionado.BBox.Desenhar();
            }

            Transformacao4D tr = new Transformacao4D();
            tr.AtribuirEscala(50, 50, 50);
            Ponto4D pt = new Ponto4D(0, 0, 0);

            GL.LineWidth(5);
            GL.Color3(0, 0, 0);
            GL.Begin(PrimitiveType.LineLoop);
            for (var i = 0; i < movimentos.Count; i++)
            {
                for (var j = 0; j < qtMovimentos[i]; j++)
                {
                    Ponto4D pt2 = tr.MultiplicarPonto(pt);
                    GL.Vertex3(pt2.X, pt2.Y, pt2.Z);
                    tr = tr.MultiplicarMatriz(movimentos[i]);
                }
            }
            GL.End();

            objetoSelecionado.Matriz = objetoSelecionado.Matriz.MultiplicarMatriz(this.movimentos[i]);
            j++;
            if (j >= this.qtMovimentos[i])
            {
                i++;
                j = 0;
                if (i >= this.movimentos.Count)
                {
                    i = 0;
                }
            }

            this.SwapBuffers();
        }
예제 #3
0
        protected override void OnLoad(EventArgs e)
        {
            this.pushMove(1, 0, 0, 3);

            Transformacao4D tr    = new Transformacao4D();
            Transformacao4D trAux = new Transformacao4D();

            trAux.AtribuirTranslacao(0, 0.3, 0);
            tr.AtribuirRotacaoX(Math.PI / 33);
            this.movimentos.Add(trAux.MultiplicarMatriz(tr));
            this.qtMovimentos.Add(33);
            this.pushMove(1, 0, 0, 4);
            this.movimentos.Add(trAux.MultiplicarMatriz(tr));
            this.qtMovimentos.Add(33);
            this.pushMove(1, 0, 0, 3);


            this.pushMove(0, 0, 1, 10);
            this.pushMove(0, 1, 0, 10);
            this.pushMove(0, 0, -1, 10);
            this.pushMove(-1, 0, 0, 10);
            this.pushMove(0, -1, 0, 5);

            tr    = new Transformacao4D();
            trAux = new Transformacao4D();
            trAux.AtribuirTranslacao(0.3, 0, 0);
            tr.AtribuirRotacaoY(Math.PI / 33);
            this.movimentos.Add(trAux.MultiplicarMatriz(tr));
            this.qtMovimentos.Add(33);

            this.pushMove(0, 0, 1, 10);
            this.pushMove(0, -1, 0, 5);
            this.pushMove(1, 0, 0, 10);
            this.pushMove(0, 0, -1, 10);
            this.movimentos.Add(trAux.MultiplicarMatriz(tr));
            this.qtMovimentos.Add(33);
            this.pushMove(1, 0, 0, 10);


            base.OnLoad(e);
            Console.WriteLine(" --- Ajuda / Teclas: ");
            Console.WriteLine(" [  H     ] mostra teclas usadas. ");

            // obj_Retangulo = new Retangulo("A", null, new Ponto4D(50, 50, 0), new Ponto4D(150, 150, 0));
            // objetosLista.Add(obj_Retangulo);
            // objetoSelecionado = obj_Retangulo;


            // obj_Cilindro = new Cilindro("D", null);
            // objetosLista.Add(obj_Cilindro);
            // obj_Cilindro.EscalaXYZ(50, 50, 50);
            // obj_Cilindro.TranslacaoXYZ(150, 0, 0);

            // obj_Esfera = new Esfera("E", null);
            // objetosLista.Add(obj_Esfera);
            // obj_Esfera.EscalaXYZ(50, 50, 50);
            // obj_Esfera.TranslacaoXYZ(200, 0, 0);

            // obj_Cone = new Cone("F", null);
            // objetosLista.Add(obj_Cone);
            // obj_Cone.EscalaXYZ(50, 50, 50);
            // obj_Cone.TranslacaoXYZ(250,0,0);

            // obj_Cubo = new Cubo("G", null);
            // objetosLista.Add(obj_Cubo);
            // obj_Cubo.EscalaXYZ(50, 50, 50);

            obj_Cubo = new Cubo("G", null);
            objetosLista.Add(obj_Cubo);
            obj_Cubo.EscalaXYZ(50, 50, 50);

            objetoSelecionado = obj_Cubo;

            camera.At  = new Vector3(0, 0, 0);
            camera.Eye = new Vector3(1000, 1000, 1000);
            // camera.Eye = new Vector3(0, 0, 1000);
            camera.Near = 100.0f;
            camera.Far  = 4000.0f;

            GL.ClearColor(127, 127, 127, 255);
            GL.Enable(EnableCap.DepthTest);
            // GL.Enable(EnableCap.CullFace);
            GL.Disable(EnableCap.CullFace);
        }