• <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 閱讀(272) 評論(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
            亚洲人成无码www久久久| 2021久久国自产拍精品| 一级做a爰片久久毛片毛片| 久久久久综合国产欧美一区二区| 午夜福利91久久福利| 99久久国产宗和精品1上映 | 亚洲综合久久久| 精品久久久久久久久午夜福利| 99久久精品国产一区二区蜜芽 | 亚洲精品美女久久777777| 欧美黑人又粗又大久久久| 国产亚洲精久久久久久无码AV| 久久精品国产亚洲AV忘忧草18| 亚洲嫩草影院久久精品| 欧美黑人激情性久久| 欧美久久亚洲精品| 99久久精品国产一区二区蜜芽 | 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 中文精品久久久久国产网址| 久久精品成人欧美大片| 久久精品视屏| 激情综合色综合久久综合| 国产99久久精品一区二区| 青青草原综合久久大伊人| 久久无码国产| 久久无码人妻精品一区二区三区| 国产精品一久久香蕉产线看 | 国产成年无码久久久久毛片| 精品久久久中文字幕人妻| 武侠古典久久婷婷狼人伊人| 草草久久久无码国产专区| 久久96国产精品久久久| a高清免费毛片久久| 国产成人精品免费久久久久| 久久亚洲国产成人精品性色| 蜜桃麻豆WWW久久囤产精品| 日韩久久无码免费毛片软件| 久久国产成人午夜AV影院| 国产精品永久久久久久久久久| 91久久国产视频| 国产成人精品久久亚洲高清不卡|