Exemple #1
0
        void renderableminimap_Render(int minimapleft, int minimaptop, int minimapwidth, int minimapheight)
        {
            //Console.WriteLine("renderableminimap_Render");
            Vector3 intersectpoint = EditingHelper.GetIntersectPoint();

            if (intersectpoint != null)
            {
                Vector2 minimappos = new Vector2(intersectpoint.x * minimapwidth / Terrain.GetInstance().MapWidth / Terrain.SquareSize,
                                                 intersectpoint.y * minimapheight / Terrain.GetInstance().MapHeight / Terrain.SquareSize);

                //Console.WriteLine("minmappos: " + minimappos);
                //double distancefromcamera = (intersectpoint - camerapos).Det();
                GraphicsHelperFactory.GetInstance().SetMaterialColor(new Color(0, 0, 1));
                Gl.glPushMatrix();
                Gl.glDisable(Gl.GL_LIGHTING);
                Gl.glDisable(Gl.GL_CULL_FACE);
                Gl.glColor3ub(0, 0, 255);
                Gl.glBegin(Gl.GL_POINTS);
                Gl.glVertex2d(minimapleft + minimappos.x, minimaptop + minimappos.y);
                Gl.glEnd();
                Gl.glEnable(Gl.GL_CULL_FACE);
                Gl.glEnable(Gl.GL_LIGHTING);
                Gl.glColor3ub(255, 255, 255);
                //Gl.glTranslated(intersectpoint.x, intersectpoint.y, intersectpoint.z);
                //Gl.glScaled(0.01 * distancefromcamera, 0.01 * distancefromcamera, 0.01 * distancefromcamera);
                //GraphicsHelperFactory.GetInstance().DrawSphere();
                Gl.glPopMatrix();
            }
        }
Exemple #2
0
        // for testing only
        void FrustrumCulling_WriteNextFrameEvent()
        {
            SetupFrustrum();

            IGraphicsHelper g = GraphicsHelperFactory.GetInstance();

            /*
             * g.SetMaterialColor(new Color(1, 1, 0));
             * Gl.glBegin(Gl.GL_LINES);
             * g.Vertex(camerapos + viewray * 0.51 + HNear / 2 * 0.95 * right + VNear / 2 * 0.95 * up);
             * g.Vertex(camerapos + viewray * 0.51 - HNear / 2 * 0.95 * right + VNear / 2 * 0.95 * up);
             * Gl.glEnd();
             * Gl.glBegin(Gl.GL_LINES);
             * g.Vertex(camerapos + viewray * 0.51 - HNear / 2 * 0.95 * right - VNear / 2 * 0.95 * up);
             * g.Vertex(camerapos + viewray * 0.51 + HNear / 2 * 0.95 * right - VNear / 2 * 0.95 * up);
             * Gl.glEnd();
             */

            g.SetMaterialColor(new Color(1, 0, 1));
            Gl.glBegin(Gl.GL_LINES);
            g.Vertex(camerapos + viewray * 1050 + HFar / 2 * 0.95 * right + VFar / 2 * 0.95 * up);
            g.Vertex(camerapos + viewray * 1050 - HFar / 2 * 0.95 * right + VFar / 2 * 0.95 * up);
            Gl.glEnd();
            Gl.glBegin(Gl.GL_LINES);
            g.Vertex(camerapos + viewray * 1050 - HFar / 2 * 0.95 * right - VFar / 2 * 0.95 * up);
            g.Vertex(camerapos + viewray * 1050 + HFar / 2 * 0.95 * right - VFar / 2 * 0.95 * up);
            Gl.glEnd();

            g.SetMaterialColor(new Color(1, 0, 0));
            Gl.glBegin(Gl.GL_LINES);
            g.Vertex(viewray * 10);
            g.Vertex(viewray * 100);
            Gl.glEnd();

            g.SetMaterialColor(new Color(0, 1, 0));
            Gl.glBegin(Gl.GL_LINES);
            g.Vertex(viewray * 10);
            g.Vertex(viewray * 10 + right * 100);
            Gl.glEnd();

            g.SetMaterialColor(new Color(0, 0, 1));
            Gl.glBegin(Gl.GL_LINES);
            g.Vertex(viewray * 10);
            g.Vertex(viewray * 10 + up * 100);
            Gl.glEnd();

            g.SetMaterialColor(new Color(0, 1, 1));
            for (int i = 0; i < 6; i++)
            {
                Gl.glBegin(Gl.GL_LINES);
                g.Vertex(planes[i].point + viewray * 100);
                g.Vertex(planes[i].point + planes[i].normalizednormal * 100 + viewray * 100);
                Gl.glEnd();
            }

            //Console.WriteLine( CheckObject(camerapos - 3 * viewray, 2) );
            //System.Environment.Exit(0);
        }
Exemple #3
0
        public void ApplyCamera()
        {
            //PlayerMovement playermovement = PlayerMovement.GetInstance();

            GLMatrix4d cameramatrix = GLMatrix4d.identity();

            // rotate and reflect so x points right, y points backwards, z points up
            cameramatrix.applyRotate(-90, 1.0, 0.0, 0.0);
            cameramatrix.applyScale(1, -1, 1);

            // rotate so x points right, y points forward, z points up
            //cameramatrix.applyRotate(-90, 1.0, 0.0, 0.0);

            // rotate so z axis is up, and x axis is forward, y axis is left
            //cameramatrix.applyRotate(90, 0.0, 0.0, 1.0);
            //cameramatrix.applyRotate( 90, 0.0, 1.0, 0.0 );

            if (bRoamingCameraEnabled)
            {
                Rot inversecamerarot = RoamingCameraRot.Inverse();
                mvMath.ApplyRotToGLMatrix4d(ref cameramatrix, inversecamerarot);
                cameramatrix.applyTranslate(-RoamingCameraPos.x, -RoamingCameraPos.y, -RoamingCameraPos.z);
            }
            else if (viewpoint == Viewpoint.MouseLook)
            {
                //cameramatrix.applyRotate( - playermovement.avataryrot, 0f, 1f, 0f );
                //cameramatrix.applyRotate( - playermovement.avatarzrot, 0f, 0f, 1f );
                //cameramatrix.applyTranslate( - playermovement.avatarpos.x, - playermovement.avatarpos.y, - playermovement.avatarpos.z );
            }
            else if (viewpoint == Viewpoint.BehindPlayer)
            {
                /*
                 * cameramatrix.applyRotate( -18f, 0f, 1f, 0f );
                 *
                 * // Vector3 V = new Vector3( 0, playermovement.avataryrot * mvMath.PiOver180, playermovement.avatarzrot * mvMath.PiOver180 );
                 *
                 * cameramatrix.applyTranslate( 3.0f, 0.0f, -1.0f );
                 *
                 * cameramatrix.applyRotate( - (float)playermovement.avataryrot, 0f, 1f, 0f );
                 * cameramatrix.applyRotate( - (float)playermovement.avatarzrot, 0f, 0f, 1f );
                 *
                 * cameramatrix.applyTranslate( -playermovement.avatarpos.x, -playermovement.avatarpos.y, -playermovement.avatarpos.z );
                 */
            }
            else if (viewpoint == Viewpoint.ThirdParty)
            {
                /*
                 * cameramatrix.applyRotate( -18f, 0f, 1f, 0f );
                 * cameramatrix.applyRotate( -90f, 0f, 0f, 1f );
                 *
                 * cameramatrix.applyTranslate( 0.0, - fThirdPartyViewZoom, fThirdPartyViewZoom / 3.0 );
                 * cameramatrix.applyRotate( - fThirdPartyViewRotate, 0f, 0f, 1f );
                 * cameramatrix.applyTranslate( - playermovement.avatarpos.x, - playermovement.avatarpos.y, - playermovement.avatarpos.z );
                 */
            }

            GraphicsHelperFactory.GetInstance().LoadMatrix(cameramatrix.ToArray());
        }
Exemple #4
0
        void CurrentEditSpot_WriteNextFrameEvent()
        {
            Vector3 intersectpoint = HeightEditor.GetInstance().GetIntersectPoint();

            if (intersectpoint != null)
            {
                double distancefromcamera = (intersectpoint - Camera.GetInstance().RoamingCameraPos).Det();
                GraphicsHelperFactory.GetInstance().SetMaterialColor(new Color(0, 0, 1));
                Gl.glPushMatrix();
                Gl.glTranslated(intersectpoint.x, intersectpoint.y, intersectpoint.z);
                Gl.glScaled(0.01 * distancefromcamera, 0.01 * distancefromcamera, 0.01 * distancefromcamera);
                GraphicsHelperFactory.GetInstance().DrawSphere();
                Gl.glPopMatrix();
            }
        }
Exemple #5
0
        void renderer_WriteNextFrameEvent()
        {
            Gl.glPushMatrix();
            Gl.glBegin(Gl.GL_LINES);
            GraphicsHelperFactory.GetInstance().SetMaterialColor(new Color(1, 0, 0));
            Gl.glVertex3d(1, 1, 1);
            Gl.glVertex3d(100, 1, 1);

            GraphicsHelperFactory.GetInstance().SetMaterialColor(new Color(0, 1, 0));
            Gl.glVertex3d(1, 1, 1);
            Gl.glVertex3d(1, 100, 1);

            GraphicsHelperFactory.GetInstance().SetMaterialColor(new Color(0, 0, 1));
            Gl.glVertex3d(1, 1, 1);
            Gl.glVertex3d(1, 1, 100);
            Gl.glEnd();
            Gl.glPopMatrix();
        }
Exemple #6
0
 /// <summary>
 /// Return current mouse intersect point to x-y plane on map, in display coordinates
 /// </summary>
 /// <returns></returns>
 public static Vector3 GetIntersectPoint()
 {
     // intersect mousevector with x-z plane.
     Terrain terrain = Terrain.GetInstance();
     Vector3 mousevector = GraphicsHelperFactory.GetInstance().GetMouseVector(
         Camera.GetInstance().RoamingCameraPos, 
         Camera.GetInstance().RoamingCameraRot, 
         MouseFilterMouseCacheFactory.GetInstance().MouseX, 
         MouseFilterMouseCacheFactory.GetInstance().MouseY);
     Vector3 camerapos = Camera.GetInstance().RoamingCameraPos;
     int width = terrain.HeightMapWidth;
     int height = terrain.HeightMapHeight;
     //Vector3 planenormal = mvMath.ZAxis;
     mousevector.Normalize();
     if (mousevector.z < -0.0005)
     {
         //Vector3 intersectionpoint = camerapos + mousevector * (Vector3.DotProduct(camerapos, planenormal) + 0) /
         //  (Vector3.DotProduct(mousevector, planenormal));
         Vector3 intersectpoint = camerapos - mousevector * (camerapos.z / mousevector.z);
         //Console.WriteLine("intersection: " + intersectionpoint.ToString());
         double heightmapx = intersectpoint.x / Terrain.SquareSize;
         double heightmapy = intersectpoint.y / Terrain.SquareSize;
         if (heightmapx >= 0 && heightmapy >= 0 &&
             heightmapx < width && heightmapy < height)
         {
             intersectpoint.z = Terrain.GetInstance().Map[(int)heightmapx, (int)heightmapy];
             return intersectpoint;
         }
         else
         {
             return null;
         }
     }
     else
     {
         //                Console.WriteLine("no intersection");
         return null;
     }
 }
Exemple #7
0
        // The terrain rendering code is adapted from some example code in sdl or glut
        void renderer_WriteNextFrameEvent()
        {
            Gl.glPushMatrix();
            //Gl.glTranslatef(-MAXMESH / 2, MAXMESH * 2, 0);

            float[,] mesh = HeightMap.GetInstance().Map;
            int width  = HeightMap.GetInstance().Width;
            int height = HeightMap.GetInstance().Height;

            FrustrumCulling culling = FrustrumCulling.GetInstance();

            IGraphicsHelper g = GraphicsHelperFactory.GetInstance();

            iSectorsDrawn = 0;

            //Gl.glColor3ub(255, 255, 255);
            //g.SetMaterialColor(new Color(1, 0, 0));
            g.SetMaterialColor(new Color(0.3, 0.8, 0.3));
            for (int sectorx = 0; sectorx < (width / sectorsize) - 1; sectorx++)
            {
                for (int sectory = 0; sectory < (height / sectorsize) - 1; sectory++)
                {
                    //if (iSectorsDrawn == 0)
                    //{
                    int     sectorposx  = sectorx * sectorsize;
                    int     sectorposy  = sectory * sectorsize;
                    int     displayposx = sectorposx * SquareSize;
                    int     displayposy = sectorposy * SquareSize;
                    Vector3 sectorpos   = new Vector3(sectorposx, sectorposy, mesh[sectorposx, sectorposy]);
                    Vector3 displaypos  = new Vector3(displayposx, displayposy, mesh[sectorposx, sectorposy]);
                    if (culling.IsInsideFrustum(displaypos + new Vector3(sectorsize * SquareSize / 2, sectorsize * SquareSize / 2, 0), sectorsize * SquareSize))
                    {
                        iSectorsDrawn++;

                        // check how far away sector is
                        // if nearby we render it in detail
                        // otherwise just render a few points from it
                        double distancesquared = Vector3.DistanceSquared(displaypos, Camera.GetInstance().RoamingCameraPos);
                        //if ( distancesquared > detaildistance * detaildistance)
                        if (false)
                        {
                            g.SetMaterialColor(new Color(1, 0, 0));
                            Vector3 a = new Vector3(sectorsize * SquareSize, sectorsize * SquareSize,
                                                    mesh[sectorposx + sectorsize, sectorposy + sectorsize] -
                                                    mesh[sectorposx, sectorposy]);
                            Vector3 b = new Vector3(sectorsize * SquareSize, -sectorsize * SquareSize,
                                                    mesh[sectorposx + sectorsize, sectorposy] -
                                                    mesh[sectorposx, sectorposy + sectorsize]);

                            Vector3 normal = Vector3.CrossProduct(a, b).Normalize();
                            Gl.glNormal3d(normal.x, normal.y, normal.z);
                            Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
                            Gl.glVertex3f(sectorposx * SquareSize, sectorposy * SquareSize, mesh[sectorposx, sectorposy]);
                            Gl.glVertex3f(sectorposx * SquareSize, sectorposy * SquareSize + sectorsize * SquareSize, mesh[sectorposx, sectorposy + sectorsize]);
                            Gl.glVertex3f(sectorposx * SquareSize + sectorsize * SquareSize, sectorposy * SquareSize, mesh[sectorposx + sectorsize, sectorposy]);
                            Gl.glVertex3f(sectorposx * SquareSize + sectorsize * SquareSize, sectorposy * SquareSize + sectorsize * SquareSize, mesh[sectorposx + sectorsize, sectorposy + sectorsize]);
                            Gl.glEnd();
                        }
                        else
                        {
                            int stepsize = 16;
                            if (distancesquared < 1200 * 1200)
                            {
                                stepsize = 1;
                            }
                            else if (distancesquared < 2400 * 2400)
                            {
                                stepsize = 2;
                            }
                            else if (distancesquared < 4000 * 4000)
                            {
                                stepsize = 4;
                            }
                            else if (distancesquared < 7200 * 7200)
                            {
                                stepsize = 8;
                            }
                            //else if (distancesquared < 1600 * 1600)
                            //{
                            //   stepsize = 16;
                            //}
                            if (colorlevelsofdetail)
                            {
                                g.SetMaterialColor(new Color(0, 0.5 + (float)stepsize * 8 / 255, 0));
                            }
                            DrawSubGrid(sectorposx, sectorposy, sectorsize, sectorsize, stepsize);
                        }
                    }
                    //}
                }
            }
            Gl.glPopMatrix();
            //Console.WriteLine( "sectors drawn: " + iSectorsDrawn );
        }