• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Shuffy

            不斷的學習,不斷的思考,才能不斷的進步.Let's do better together!
            posts - 102, comments - 43, trackbacks - 0, articles - 19
            視見體

            Viewing Volume is nothing but the region of 3D Cartesian space in that will occupy the window. It is nothing but the minimum and maximum x, y and z values that are inside the window. So if a vertex is outside this range of x, y and z values then they are clipped by OpenGL before rendering can occur.

            Z Buffer

            The new term we have to deal with in addition to width and height of an object in 3D graphics is depth. The depth of an object is its distance from the viewpoint. The viewpoint is the location from which we are looking at that point. This depth value goes into the depth or Z-buffer. If we are drawing 2 objects that have some pixels that overlap, the first object will after it is rendered have its depth value in the depth buffer. When the next object is rendered, OpenGL will check to see whether the pixel it’s about to draw is in front of (with respect to the viewpoint) any pixel from the first object that’s already drawn. It does this by checking the Z value of the current pixel with the value that is already in the buffer. If the new pixel is closer to the viewpoint, OpenGL places its depth value in the depth buffer. This is how the Z-buffer works.

            正交投影和透視投影

            One term we need to understand very well to learn 3D Graphics well is projection. Well, computer graphics at its simplest is all about setting a color to a pixel on screen. And a pixel on a screen can have only two dimensions. So 3D graphics is merely an illusion. The 3D coordinates that we specify will have to be projected onto a 2D surface to create this illusion for us. And we have to specify how this projection works. By specifying a projection we specify the clipping or viewing volume.

            基本3D圖形繪制

            1,CCY457OpenGLView.h中加入下列變量

            BOOL m_bPoint;        //Status of Point
            BOOL m_bLine;        //Status of Line
            BOOL m_bPolygon;    //Status of Polygon
            BOOL m_bTriangle;    //Status of Triangle

            并且在構造函數中初始化

            CCY457OpenGLView::CCY457OpenGLView()
            {
                m_bPoint    
            = FALSE;
                m_bLine        
            = FALSE;
                m_bPolygon    
            = FALSE;
                m_bTriangle 
            = FALSE;
                m_bCube           
            = FALSE;        
                m_bTorus       
            = FALSE;        
                m_bTeapot       
            = FALSE;        
                m_bIcosahedron 
            = FALSE;
                m_bSimpleCube  
            = FALSE;    
            }

            2,加入五個菜單項及其對應的事件處理程序。

             

            void CCY457OpenGLView::OnObjectsTeapot() 
            {
            //畫茶壺
                m_bCube           = FALSE;        
                m_bTorus       
            = FALSE;        
                m_bTeapot       
            = TRUE;        
                m_bIcosahedron 
            = FALSE;
                m_bSimpleCube  
            = FALSE;        
                InvalidateRect(NULL,FALSE);    
            }
            void CCY457OpenGLView::OnObjectsCube() 
            {
            //畫立方體
                m_bCube           = TRUE;    
                m_bTorus       
            = FALSE;        
                m_bTeapot       
            = FALSE;        
                m_bIcosahedron 
            = FALSE;
                m_bSimpleCube  
            = FALSE;        
                InvalidateRect(NULL,FALSE);    
            }
            void CCY457OpenGLView::OnObjectsIcosahedron() 
            {
            //畫二十面體
                m_bCube           = FALSE;        
                m_bTorus       
            = FALSE;        
                m_bTeapot       
            = FALSE;        
                m_bIcosahedron 
            = TRUE;
                m_bSimpleCube  
            = FALSE;    
                InvalidateRect(NULL,FALSE);    
            }
            void CCY457OpenGLView::OnObjectsTorus() 
            {
            //畫環面
                m_bCube           = FALSE;        
                m_bTorus       
            = TRUE;        
                m_bTeapot       
            = FALSE;        
                m_bIcosahedron 
            = FALSE;
                m_bSimpleCube  
            = FALSE;            
                InvalidateRect(NULL,FALSE);    
            }

            void CCY457OpenGLView::OnObjectsSimplecube() 
            {
            //畫簡單立方體
                m_bCube           = FALSE;        
                m_bTorus       
            = FALSE;        
                m_bTeapot       
            = FALSE;        
                m_bIcosahedron 
            = FALSE;
                m_bSimpleCube  
            = TRUE;        
                InvalidateRect(NULL,FALSE);
            }

            3,由于開始繪制3維圖形,因此使用第一篇文章的OnSize()函數。

            4RenderScene中加入具體的繪制代碼:

            void CCY457OpenGLView::RenderScene ()
            {
            //繪制函數
                if(m_bPoint==TRUE)
                {
                    glPointSize(
            3.0f);
                    glBegin(GL_POINTS);
                        glVertex2f(
            0.0f,0.0f);
                        glVertex2f(
            1.0f,0.0f);
                        glVertex2f(
            0.0f,1.0f);
                    glEnd();
                }
                
            if(m_bLine==TRUE)
                {
                    glBegin(GL_LINES);
                        glVertex2f(
            0.0f,0.0f);
                        glVertex2f(
            1.0f,0.0f);
                    glEnd();
                }
                
            if(m_bTriangle==TRUE)
                {
                    glBegin(GL_TRIANGLES);
                        glVertex2f(
            0.0f,0.0f);
                        glVertex2f(
            2.0f,0.0f);
                        glVertex2f(
            0.0f,2.0f);
                    glEnd();
                }
                
            if(m_bPolygon==TRUE)
                {
                    glBegin(GL_POLYGON);
                        glVertex2f(
            0.0f,0.0f);
                        glVertex2f(
            3.0f,0.0f);
                        glVertex2f(
            4.0f,3.0f);
                        glVertex2f(
            1.5f,6.0f);
                        glVertex2f(
            -1.0f,3.0f);
                    glEnd();
                }
                
            //Replace the current matrix with Identity Matrix
                glLoadIdentity();
                glTranslatef(
            0.0f,0.0f,-5.0f);
                glRotatef(
            -30.0f,1.0f,1.0f,0.0f);
                
            //Draw a Cube
                if(m_bCube)
                {
                    glutWireCube(
            1.0f);
                }
                
            //Draw a Torus
                if(m_bTorus)
                {
                    glutWireTorus(
            0.5f1.0f5050);
                }
                
            //Draw a Teapot
                if(m_bTeapot)
                {
                    glutWireTeapot(
            1.0f);
                }
                
            //Draw a Icosahedron
                if(m_bIcosahedron)
                {
                    glutWireIcosahedron();
                }
                
            //Draw a cube by specifying the vertices individually
                if(m_bSimpleCube)
                {
                    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
                    
                    
            //Front Face
                    glBegin(GL_POLYGON);
                        glVertex3f(
            -1.0f,-1.0f,0.0f);
                        glVertex3f( 
            1.0f,-1.0f,0.0f);
                        glVertex3f( 
            1.0f1.0f,0.0f);
                        glVertex3f(
            -1.0f1.0f,0.0f);
                    glEnd();
                    
            //Back Face
                    glBegin(GL_POLYGON);
                        glVertex3f(
            -1.0f,-1.0f,-1.0f);
                        glVertex3f(
            -1.0f1.0f,-1.0f);
                        glVertex3f( 
            1.0f1.0f,-1.0f);
                        glVertex3f( 
            1.0f,-1.0f,-1.0f);
                    glEnd();
                    
            //Left Face
                    glBegin(GL_POLYGON);
                        glVertex3f(
            -1.0f,-1.0f0.0f);
                        glVertex3f(
            -1.0f1.0f0.0f);
                        glVertex3f(
            -1.0f1.0f,-1.0f);
                        glVertex3f(
            -1.0f,-1.0f,-1.0f);
                    glEnd();
                    
            //Right Face
                    glBegin(GL_POLYGON);
                        glVertex3f(
            1.0f,-1.0f0.0f);
                        glVertex3f(
            1.0f,-1.0f,-1.0f);
                        glVertex3f(
            1.0f1.0f,-1.0f);
                        glVertex3f(
            1.0f1.0f0.0f);
                    glEnd();
                    
            //Top Face
                    glBegin(GL_POLYGON);
                        glVertex3f(
            -1.0f1.0f,  0.0f);
                        glVertex3f( 
            1.0f1.0f,  0.0f);
                        glVertex3f( 
            1.0f1.0f-1.0f);
                        glVertex3f(
            -1.0f1.0f-1.0f);
                    glEnd();
                    
            //Botton Face
                    glBegin(GL_POLYGON);
                        glVertex3f(
            -1.0f-1.0f,  0.0f);
                        glVertex3f(
            -1.0f-1.0f-1.0f);
                        glVertex3f( 
            1.0f-1.0f-1.0f);
                        glVertex3f( 
            1.0f-1.0f,  0.0f);
                    glEnd();
                }
            }

            作者:洞庭散人

            出處:http://phinecos.cnblogs.com/    

            本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
            原文鏈接:http://www.cnblogs.com/phinecos/archive/2008/11/05/1327385.html
            国产高潮国产高潮久久久91| 国产精品九九久久精品女同亚洲欧美日韩综合区| 91精品国产综合久久香蕉| 国产视频久久| 人妻精品久久无码专区精东影业| 久久国产成人精品麻豆| 97视频久久久| 国产精品热久久无码av| 欧洲成人午夜精品无码区久久| 亚洲国产成人久久精品影视| 久久国产亚洲精品| A级毛片无码久久精品免费| 精品久久久一二三区| 国产99久久久国产精品~~牛| 一本色道久久综合狠狠躁| 久久综合久久鬼色| 无码精品久久久天天影视| 亚洲国产天堂久久综合网站| 丁香色欲久久久久久综合网| 久久一区二区三区免费| 久久综合九色综合欧美狠狠| 亚洲AV日韩AV永久无码久久| 亚洲国产日韩综合久久精品| 久久综合九色欧美综合狠狠 | 久久久久亚洲AV无码永不| 四虎久久影院| 久久久久亚洲av成人无码电影 | 久久无码AV一区二区三区| 久久青青草原国产精品免费| 97超级碰碰碰久久久久| 无码人妻久久一区二区三区| 伊人久久大香线焦AV综合影院| 久久亚洲国产精品成人AV秋霞| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲午夜精品久久久久久app| 思思久久99热免费精品6| 久久人人爽人人爽人人片AV麻豆 | 久久午夜伦鲁片免费无码| 久久久国产精华液| 亚洲综合伊人久久综合| 国产精品久久久久影视不卡|