• <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

                    本文將介紹如何從Obj文件格式中創建3D對象,我們使用的是Nate Millerobj格式加載類。

            This would be very useful to create large Virtual Reality applications as we could make use of the readily available 3D model files or make use of modeling tools to create these models and load them instead of creating them programatically. The .obj format is a very simple and popular format and files of other types such 3D Studio (.3ds) can be exported to this format or converted using tools such as 3D Exploration. This .obj loading code cannot read textures, it can only also read .mtl files in addition to the .obj file and thus make use of material data too.

            1, Nate Millerobj文件加載類,其完整源代碼可以從http://www.pobox.com/~ndr處下載。

            Glm頭文件

            2, 在第17篇的基礎上,CCY457OpenGLView類中加入下述變量,用來表示不同物體類型

                GLuint m_MonitorList; //顯示器
                GLuint m_ChairList; //椅子
                GLuint m_PotList; //花瓶
                GLuint m_ComputerList; //計算機
                int m_nObjectNo;

            2, InitializeOpenGL函數中加入對LoadModelsFromFiles的調用

            3, 繪制函數修改如下:

            void CCY457OpenGLView::RenderScene ()
            {
            //繪制函數
                
            //Position Camera
                gluLookAt(m_PosX,m_PosY,m_PosZ,m_DirX,m_DirY,m_DirZ,0.0f,1.0f,0.0f);
                
            //Draw the Scene
                
            //Draw the floor
                
            // Draw the ground, we do manual shading to a darker green
                
            // in the background to give the illusion of depth
                glEnable(GL_TEXTURE_2D);
                glBindTexture(GL_TEXTURE_2D, m_Texture[
            3]);
                glBegin(GL_POLYGON);
                glColor3ub(
            0,255,0);
                glTexCoord2f(
            0.0f0.0f);
                glVertex3f(
            -2.0f0.0f0.0f);
                glTexCoord2f(
            1.0f0.0f);
                glVertex3f(
            2.0f,0.0f0.0f);
                glColor3ub(
            0,100,0);    
                glTexCoord2f(
            1.0f1.0f);
                glVertex3f(
            2.0f0.0f-2.0f);
                glTexCoord2f(
            0.0f1.0f);
                glVertex3f(
            -2.0f,0.0f-2.0f);
                glEnd();
                glDisable(GL_TEXTURE_2D);
                
            //Draw the Cube
                
            // Save the matrix state and do the rotations
                glPushMatrix();
                glTranslatef(
            -1.0f,0.6f,-1.0f);
                
            // Draw jet at new orientation, put light in correct position
                
            // before rotating the jet
                glRotatef(m_xRot,1.0f,0.0f,0.0f);
                glRotatef(m_yRot,
            0.0f,1.0f,0.0f);
                DrawCube(FALSE);
                
            // Restore original matrix state
                glPopMatrix();    
                
            // Get ready to draw the shadow and the ground
                
            // First disable lighting and save the projection state
                glDisable(GL_DEPTH_TEST);
                glDisable(GL_LIGHTING);
                glPushMatrix();
                
            // Multiply by shadow projection matrix
                glMultMatrixf((GLfloat *)m_ShadowMat);
                glTranslatef(
            -1.0f,0.6f,-1.0f);
                glRotatef(m_xRot,
            1.0f,0.0f,0.0f);
                glRotatef(m_yRot,
            0.0f,1.0f,0.0f);
                
            // Pass true to indicate drawing shadow
                DrawCube(TRUE);    
                
            // Restore the projection to normal
                glPopMatrix();
                
            // Restore lighting state variables
                glEnable(GL_DEPTH_TEST);
                
            // Draw the light source
                glPushMatrix();
                glTranslatef(
            1.5f,1.5f,-1.0f);
                glColor3ub(
            255,255,0);
                glutSolidSphere(
            0.01f,10,10);
                glPopMatrix();
                glEnable(GL_LIGHTING);
            }
            void CCY457OpenGLView::DrawCube (BOOL bShadow)
            {
                
            // Set material color, note we only have to set to black
                
            // for the shadow once
                if(!bShadow)
                {
                    
            switch (m_nObjectNo)
                    {
                    
            case 0: glCallList(m_ChairList);
                        
            break;
                    
            case 1: glCallList(m_PotList);
                        
            break;
                    
            case 2: glCallList(m_ComputerList);
                        
            break;
                    
            case 3: glCallList(m_MonitorList);
                        
            break;
                    
            case 4: DrawCubeTex();
                        
            break;
                    }
                }
                
            else
                {
                    glColor3ub(
            0,0,0);
                    
            switch (m_nObjectNo)
                    {
                    
            case 0: glCallList(m_ChairList);
                        
            break;
                    
            case 1: glCallList(m_PotList);
                        
            break;
                    
            case 2: glCallList(m_ComputerList);
                        
            break;
                    
            case 3: glCallList(m_MonitorList);
                        
            break;
                    
            case 4: DrawCubeNoTex();
                        
            break;    
                    }
                }
            }

            4, 加載Obj文件的具體實現代碼:

            //Load all the Models from the Files of type .obj
            void CCY457OpenGLView::LoadModelsFromFiles()
            {
                GLfloat scalefactor 
            = 0.0;
                
            //Load Computer from file
                GLMmodel *object1;
                object1 
            = glmReadOBJ("models/computer.obj");
                
            if(!scalefactor) 
                {
                    scalefactor 
            = glmUnitize(object1);
                } 
                
            else 
                {
                    glmScale(object1, scalefactor);
                }
                glmScale(object1, 
            2.5);    
                
            /* build a display list */
                m_ComputerList 
            = glmList(object1, GLM_SMOOTH);
                
            /* nuke it, we don't need it anymore */
                glmDelete(object1);    
                
            //Load Chair From File
                GLMmodel *object2;
                scalefactor 
            = 0.0;
                object2 
            = glmReadOBJ("models/chair04.obj");
                
            if(!scalefactor) 
                {
                    scalefactor 
            = glmUnitize(object2);
                } 
                
            else 
                {
                    glmScale(object2, scalefactor);
                }
                glmScale(object2, 
            5.0);    
                
            /* build a display list */
                m_ChairList 
            = glmList(object2, GLM_SMOOTH);
                
            /* nuke it, we don't need it anymore */
                glmDelete(object2);    
                
            //Load Monitor from file
                GLMmodel *object5;
                scalefactor 
            = 0.0;
                object5 
            = glmReadOBJ("models/samsung.obj");
                
            if(!scalefactor) 
                {
                    scalefactor 
            = glmUnitize(object5);
                } 
                
            else 
                {
                    glmScale(object5, scalefactor);
                }
                glmScale(object5, 
            0.5);    
                
            /* build a display list */
                m_MonitorList 
            = glmList(object5, GLM_SMOOTH);
                
            /* nuke it, we don't need it anymore */
                glmDelete(object5);    
                
            //Load Phone Object from file
                GLMmodel *object6;
                scalefactor 
            = 0.0;
                object6 
            = glmReadOBJ("models/plant2.obj");
                
            if(!scalefactor) 
                {
                    scalefactor 
            = glmUnitize(object6);
                } 
                
            else 
                {
                    glmScale(object6, scalefactor);
                }
                glmScale(object6, 
            0.5);    
                
            /* build a display list */
                m_PotList 
            = glmList(object6, GLM_SMOOTH);
                
            /* nuke it, we don't need it anymore */
                glmDelete(object6);        
            }

             

            作者:洞庭散人

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

            本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
            原文鏈接:http://www.cnblogs.com/phinecos/archive/2008/11/07/1328957.html
            国产精品欧美久久久久无广告| 狠狠久久综合| 精品久久久久久亚洲精品| 久久精品国产亚洲AV麻豆网站| 国产精品久久久久天天影视| 久久精品无码免费不卡| 无码人妻久久一区二区三区| 国产精品久久久久久一区二区三区| 色天使久久综合网天天| 久久久青草久久久青草| 一级a性色生活片久久无少妇一级婬片免费放 | 一本久道久久综合狠狠躁AV| 国产亚洲综合久久系列| 亚洲欧美日韩久久精品| 国产激情久久久久影院| 无码人妻久久一区二区三区免费丨| 久久久久噜噜噜亚洲熟女综合| 亚洲国产精品成人久久| 日产精品久久久久久久| 久久精品国产一区二区三区| 国产精品久久久久AV福利动漫| 欧美日韩精品久久免费| 久久天天日天天操综合伊人av| 欧美日韩中文字幕久久伊人| 久久综合88熟人妻| 亚洲午夜久久久久久久久久 | 国产福利电影一区二区三区,免费久久久久久久精 | 91久久精一区二区三区大全| 久久人人爽人人人人爽AV | 大伊人青草狠狠久久| 久久亚洲私人国产精品vA| 久久人人爽人人爽人人片AV高清 | 国产成人久久精品麻豆一区| 国产精品久久久福利| 99精品国产在热久久| 国产精品一久久香蕉国产线看| 欧美亚洲色综久久精品国产| 波多野结衣中文字幕久久| 久久91亚洲人成电影网站| 亚洲天堂久久精品| 久久一本综合|