青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品99久久99久久久二8| 欧美调教视频| 久久久亚洲国产美女国产盗摄| 亚洲综合好骚| 亚洲午夜国产成人av电影男同| 亚洲伦理自拍| 中文在线资源观看网站视频免费不卡| 欧美激情一区二区三区全黄| 欧美在线在线| 免费欧美视频| 欧美日韩在线免费观看| 欧美系列电影免费观看| 欧美日韩一二区| 一区二区在线视频播放| 曰韩精品一区二区| 在线免费日韩片| 亚洲影院一区| 亚洲乱码国产乱码精品精可以看| 亚洲欧美在线免费观看| 久久婷婷成人综合色| 亚洲欧洲精品成人久久奇米网| 亚洲乱码国产乱码精品精98午夜| 亚洲国产成人久久综合| 亚洲三级毛片| 亚洲视频精选| 欧美成人高清| 91久久久久| 欧美制服丝袜第一页| 免费视频一区| 亚洲综合欧美| 欧美日韩ab| 亚洲精品视频在线播放| 久久久福利视频| 午夜精品久久久久久久久久久久| 久久只有精品| 国产午夜久久| 久久久久久久久久看片| 久久大香伊蕉在人线观看热2| 欧美另类亚洲| 久久99在线观看| 免费在线亚洲欧美| 欧美日韩国产精品一卡| 亚洲一区二区三区在线看| 亚洲欧美国产一区二区三区| 国产精品国产三级国产普通话99 | 亚洲欧美日本伦理| 欧美无砖砖区免费| 久久免费视频网| 欧美va天堂| 亚洲欧美在线视频观看| 久久久久久久999精品视频| 亚洲日韩欧美一区二区在线| 亚洲最新在线视频| 亚洲国产精品女人久久久| 一区二区三区四区五区在线| 精品91免费| 夜夜精品视频一区二区| 亚洲福利在线视频| 欧美在线视频一区二区| 一区二区三区四区五区视频| 久久久久欧美精品| 日韩视频免费在线| 久久婷婷人人澡人人喊人人爽| 亚洲午夜小视频| 欧美电影在线播放| 欧美www在线| 亚洲福利视频专区| 久久午夜av| 免费在线观看精品| 怡红院精品视频在线观看极品| 亚洲在线观看| 久久亚洲综合| 精品成人在线视频| 欧美专区在线播放| 国产欧美一区二区三区沐欲| 一区二区三区四区精品| 一区二区免费在线观看| 欧美日韩无遮挡| 亚洲免费综合| 免费在线国产精品| 亚洲国产日韩在线一区模特| 久久亚洲综合色| 欧美国产日本| 亚洲综合色网站| 伊人精品成人久久综合软件| 免费短视频成人日韩| 日韩一级免费| 久久亚洲高清| 亚洲一区二区三区四区在线观看 | 亚洲男女自偷自拍| 国产精品一区二区a| 蜜桃精品久久久久久久免费影院| 欧美激情精品久久久| 亚洲欧美一区二区三区久久| 亚洲国产经典视频| 国产精品爽黄69| 欧美精品观看| 免费欧美电影| 久久久国产精品一区二区中文| 一区二区毛片| 亚洲乱码国产乱码精品精天堂| 久久久蜜臀国产一区二区| 中文亚洲视频在线| 99视频在线观看一区三区| 亚洲国产高清一区二区三区| 国产日韩欧美麻豆| 国产女精品视频网站免费| 国产精品xvideos88| 欧美激情亚洲另类| 欧美激情精品久久久久久蜜臀 | 国产精品视频网址| 国产精品扒开腿做爽爽爽视频| 亚洲在线视频| 性8sex亚洲区入口| 久久精品国产一区二区电影| 亚洲线精品一区二区三区八戒| 99天天综合性| 亚洲美女视频在线观看| 一本综合精品| 欧美资源在线观看| 欧美激情视频免费观看| 国产精品分类| 韩日精品视频一区| 夜夜嗨av一区二区三区中文字幕| 日韩一级二级三级| 久久精品成人一区二区三区| 免费欧美高清视频| 夜色激情一区二区| 久久成人精品电影| 欧美精品日韩一区| 激情成人亚洲| 一区二区欧美在线观看| 久久久久久网| 99亚洲一区二区| 免费精品视频| 在线观看不卡av| 久久精品视频va| 99热免费精品在线观看| 亚洲青涩在线| 乱人伦精品视频在线观看| 一区二区日本视频| 久久中文字幕一区| 国产有码一区二区| 久久成人免费网| 一区二区三区高清在线观看| 欧美日韩国产123| 亚洲精品孕妇| 亚洲国产精品尤物yw在线观看| 久久躁日日躁aaaaxxxx| 在线播放不卡| 99pao成人国产永久免费视频| 玖玖综合伊人| 久热国产精品| 99国产精品| 艳女tv在线观看国产一区| 国产精品欧美日韩一区| 亚洲夜间福利| 欧美一区二区三区在线播放| 国产精品亚洲一区二区三区在线| 欧美一级大片在线观看| 午夜伦欧美伦电影理论片| 国产真实久久| 最近看过的日韩成人| 欧美日韩在线大尺度| 欧美在线播放视频| 欧美成人伊人久久综合网| 亚洲特级毛片| 久久一本综合频道| 亚洲欧美日韩国产中文| 久久久无码精品亚洲日韩按摩| 亚洲精品麻豆| 久久精品最新地址| 一区二区高清视频在线观看| 欧美专区日韩视频| 亚洲私拍自拍| 欧美精品一区二区三区久久久竹菊 | 欧美少妇一区| 久久久久久久波多野高潮日日| 蜜桃视频一区| 久久成人亚洲| 国产精一区二区三区| 亚洲欧洲精品成人久久奇米网| 狠狠色丁香久久婷婷综合_中| 中文在线不卡视频| 99国产一区| 欧美人与性动交α欧美精品济南到| 久久免费精品视频| 国语自产精品视频在线看抢先版结局 | 欧美体内谢she精2性欧美| 噜噜噜噜噜久久久久久91| 国产欧美亚洲视频| 午夜视频一区二区| 亚洲一区欧美激情| 国产精品av免费在线观看| 亚洲色图制服丝袜| 性欧美大战久久久久久久免费观看 | 欧美在线高清视频| 韩国av一区二区三区| 久久久久免费| 亚洲免费观看在线观看|