• <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
            亚洲欧美国产精品专区久久| 97久久国产亚洲精品超碰热 | 久久久久亚洲精品中文字幕| 久久免费小视频| 久久一区二区三区99| 久久人人爽人爽人人爽av| 欧美日韩久久中文字幕| 久久精品夜夜夜夜夜久久| 久久美女人爽女人爽| 久久人人爽人人澡人人高潮AV| 久久精品国产日本波多野结衣| 国产成人无码精品久久久久免费 | 亚洲精品tv久久久久| 漂亮人妻被中出中文字幕久久| 久久久久久九九99精品| 精品免费tv久久久久久久| 精品久久久中文字幕人妻 | 国产精品一区二区久久精品无码 | 久久综合久久伊人| 久久久女人与动物群交毛片| 久久av高潮av无码av喷吹| 久久99国产精品二区不卡| 久久精品亚洲精品国产欧美| 99久久免费国产精品| 精品久久久久久久无码| 亚洲精品乱码久久久久久蜜桃图片 | 久久久久人妻一区精品色| 久久久久国产精品三级网| 国内精品久久久久影院优| 国产毛片欧美毛片久久久| 波多野结衣久久| 久久精品国产色蜜蜜麻豆| 亚洲一区中文字幕久久| 久久精品天天中文字幕人妻 | 精品久久久久久国产三级| 国产午夜久久影院| …久久精品99久久香蕉国产| 国产麻豆精品久久一二三| 久久国产高潮流白浆免费观看| 久久人人爽爽爽人久久久| 26uuu久久五月天|