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

            《基于MFC的OpenGL編程》Part 16 Reflection

            Posted on 2010-03-31 20:51 Shuffy 閱讀(286) 評論(0)  編輯 收藏 引用 所屬分類: MFC,OpenGL

            Reflections

            Adding reflections to a program too can improve its realism to a great extent. Here we'll look at a simple method to create reflection where we simply redraw the object with an appropriate transformation and make the surface in between translucent. This creates an effective illusion of reflection!!

            1,設置光源代碼修改如下:

            void CCY457OpenGLView::SetupLighting ()
            {
                  
            //Material Properties
                  GLfloat matSpecular[] = { 1.0f0.0f0.0f0.7f};
                  GLfloat matShininess[] 
            = { 50.0f};
                  GLfloat matAmbient[] 
            = { 0.25f0.25f0.25f0.7f};
                  GLfloat matDiffuse[] 
            = { 0.5f0.5f0.5f0.7f};
                  glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular);
                  glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
                  glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiffuse);
                  glMaterialfv(GL_FRONT, GL_AMBIENT, matAmbient);
                  
            //Lighting Parameters
                  
            //Enable Lighting
                  glEnable(GL_LIGHTING);
                  
            //Specify a single directional light
                  GLfloat ambient1[] = { 0.5f,0.5f,0.5f};
                  GLfloat diffuse1[] 
            = { 0.5f,0.5f,0.5f};
                  GLfloat specular1[] 
            = { 1.0f,0.0f,0.0f};
                  GLfloat position1[] 
            = { 0.0f,0.0f,5.0f,0.0};
                  glLightfv(GL_LIGHT0, GL_AMBIENT, ambient1);
                  glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse1);
                  glLightfv(GL_LIGHT0, GL_SPECULAR, specular1);
                  glLightfv(GL_LIGHT0, GL_POSITION, position1);    
                  glEnable(GL_LIGHT0);
                  
            //Specify a single positional spotlight
                  GLfloat ambient2[] = { 1.0f,1.0f,0.0f};
                  GLfloat diffuse2[] 
            = { 1.0f,0.0f,0.0f};
                  GLfloat position2[] 
            = { 1.0f,0.0f,5.0f,1.0};
                  GLfloat direction2[] 
            = {0.0f,0.0f,-5.0f};
                  glLightfv(GL_LIGHT1, GL_AMBIENT, ambient2);
                  glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse2);
                  glLightfv(GL_LIGHT1, GL_POSITION, position2);
                  glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, direction2);
                  glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 
            15.0f);
                  glEnable(GL_LIGHT1);
            }

            2,繪制函數修改如下:

            void CCY457OpenGLView::RenderScene ()
            {
            //繪制函數
                  glTranslatef(0.0f,0.0f,-8.0f);
                  
            // Save matrix state and do the rotation
                  glPushMatrix();
                       glRotatef(m_xRot, 
            1.0f0.0f0.0f);
                       DrawCube();
                       glPopMatrix();
                       glPushMatrix();
                             glTranslatef(
            0.0f-3.0f0.0f);
                             glScalef(
            1.0f-1.0f1.0f);
                             glRotatef(m_xRot, 
            1.0f0.0f0.0f);
                             DrawCube();
                       glPopMatrix();
                       
            // Draw bottom of floor
                       glEnable(GL_BLEND);
                       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
                       glPushMatrix();
                       glEnable(GL_TEXTURE_2D);
                       glBindTexture(GL_TEXTURE_2D, m_Texture[
            3]);
                       glBegin(GL_POLYGON);
                             glTexCoord2f(
            0.0f0.0f);
                             glVertex3f(
            -5.0f-1.5f5.0f );
                             glTexCoord2f(
            1.0f0.0f);
                             glVertex3f(
            -5.0f-1.5f-5.0f );
                             glTexCoord2f(
            1.0f1.0f);
                             glVertex3f(
            5.0f-1.5f-5.0f );
                             glTexCoord2f(
            0.0f1.0f);
                             glVertex3f(
            5.0f-1.5f5.0f );
                       glEnd();
                  glPopMatrix();
                  glDisable(GL_TEXTURE_2D);
                  glDisable(GL_BLEND); 
            }
            void CCY457OpenGLView::DrawCube ()
            {
                       glEnable(GL_TEXTURE_2D);
                       glBindTexture(GL_TEXTURE_2D,m_Texture[
            0]);    
                       
            //Front Face
                       glBegin(GL_POLYGON);
                             glTexCoord2f(
            0,0);
                             glVertex3f(
            -1.0f,-1.0f,0.0f);
                             glTexCoord2f(
            1,0);
                             glVertex3f( 
            1.0f,-1.0f,0.0f);
                             glTexCoord2f(
            1,1);
                             glVertex3f( 
            1.0f1.0f,0.0f);
                             glTexCoord2f(
            0,1);
                             glVertex3f(
            -1.0f1.0f,0.0f);
                       glEnd();
                       
            //Back Face
                       glBegin(GL_POLYGON);
                             glTexCoord2f(
            1,0);
                             glVertex3f(
            -1.0f,-1.0f,-1.0f);
                             glTexCoord2f(
            1,1);
                             glVertex3f(
            -1.0f1.0f,-1.0f);
                             glTexCoord2f(
            0,1);
                             glVertex3f( 
            1.0f1.0f,-1.0f);
                             glTexCoord2f(
            0,0);
                             glVertex3f( 
            1.0f,-1.0f,-1.0f);
                       glEnd();
                       glBindTexture(GL_TEXTURE_2D,m_Texture[
            1]);
                       
            //Left Face
                       glBegin(GL_POLYGON);
                             glTexCoord2f(
            1,0);
                             glVertex3f(
            -1.0f,-1.0f0.0f);
                             glTexCoord2f(
            1,1);
                             glVertex3f(
            -1.0f1.0f0.0f);
                             glTexCoord2f(
            0,1);
                             glVertex3f(
            -1.0f1.0f,-1.0f);
                             glTexCoord2f(
            0,0);
                             glVertex3f(
            -1.0f,-1.0f,-1.0f);
                       glEnd();
                       
            //Right Face
                       glBegin(GL_POLYGON);
                             glTexCoord2f(
            0,0);
                             glVertex3f(
            1.0f,-1.0f0.0f);
                             glTexCoord2f(
            1,0);
                             glVertex3f(
            1.0f,-1.0f,-1.0f);
                             glTexCoord2f(
            1,1);
                             glVertex3f(
            1.0f1.0f,-1.0f);
                             glTexCoord2f(
            0,1);
                             glVertex3f(
            1.0f1.0f0.0f);
                       glEnd();
                       glBindTexture(GL_TEXTURE_2D,m_Texture[
            2]);
                       
            //Top Face
                       glBegin(GL_POLYGON);
                             glTexCoord2f(
            0,0);
                             glVertex3f(
            -1.0f1.0f0.0f);
                             glTexCoord2f(
            0,1);
                             glVertex3f( 
            1.0f1.0f0.0f);
                             glTexCoord2f(
            1,1);
                             glVertex3f( 
            1.0f1.0f-1.0f);
                             glTexCoord2f(
            1,0);
                             glVertex3f(
            -1.0f1.0f-1.0f);
                       glEnd();
                       
            //Botton Face
                       glBegin(GL_POLYGON);
                             glTexCoord2f(
            0,1);
                             glVertex3f(
            -1.0f-1.0f0.0f);
                             glTexCoord2f(
            0,0);
                             glVertex3f(
            -1.0f-1.0f-1.0f);
                             glTexCoord2f(
            1,0);
                             glVertex3f( 
            1.0f-1.0f-1.0f);
                             glTexCoord2f(
            1,1);
                             glVertex3f( 
            1.0f-1.0f0.0f);
                       glEnd();
                       glDisable(GL_TEXTURE_2D);
            }

             

            作者:洞庭散人

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

            本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
            原文鏈接:http://www.cnblogs.com/phinecos/archive/2008/11/07/1328887.html
            久久99精品国产麻豆| 精品国产VA久久久久久久冰| 久久婷婷色综合一区二区| 久久青青草原精品国产软件| 精品久久亚洲中文无码| 午夜不卡久久精品无码免费| 999久久久免费国产精品播放| 无码8090精品久久一区| 久久99精品久久久久久久久久| 国产精品免费久久久久电影网| 亚洲日本va中文字幕久久| 亚洲一本综合久久| 伊人久久综合成人网| 国产毛片久久久久久国产毛片 | 天天做夜夜做久久做狠狠| 中文国产成人精品久久不卡| 久久综合久久综合久久| 婷婷综合久久中文字幕蜜桃三电影| 久久久久亚洲AV综合波多野结衣| 久久精品午夜一区二区福利| 亚洲精品第一综合99久久 | 国产∨亚洲V天堂无码久久久| 三级片免费观看久久| 大美女久久久久久j久久| 精品乱码久久久久久久| 精品久久久久久中文字幕大豆网| 久久国产视频99电影| 青青热久久综合网伊人| 国内精品久久久久伊人av| 中文字幕久久久久人妻| 伊人精品久久久久7777| 一本大道久久东京热无码AV| 久久精品成人欧美大片| 国产亚洲成人久久| 99久久99久久精品国产片| 99久久精品毛片免费播放| 国产午夜久久影院| 成人久久久观看免费毛片| 国产精品18久久久久久vr| 色综合久久综合网观看| 精品免费久久久久国产一区|