• <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
            久久香蕉超碰97国产精品| 99久久无码一区人妻| 99久久国产精品免费一区二区| 久久久午夜精品| 久久丫精品国产亚洲av不卡| 久久久精品免费国产四虎| 午夜精品久久久内射近拍高清| 人人狠狠综合久久88成人| 91久久国产视频| 久久综合久久自在自线精品自| 日本三级久久网| 色偷偷偷久久伊人大杳蕉| 亚洲欧美一区二区三区久久| AA级片免费看视频久久| 日产精品久久久一区二区| 亚洲欧美国产日韩综合久久| 女人香蕉久久**毛片精品| 亚洲国产精品高清久久久| 久久久久亚洲AV成人网| 色综合久久中文综合网| 国产精品久久久久AV福利动漫 | 久久国产精品国产自线拍免费| 久久久久久久国产免费看| 久久精品国产91久久综合麻豆自制| 免费精品国产日韩热久久| 久久精品国产亚洲Aⅴ蜜臀色欲| 精品综合久久久久久97超人| 久久精品无码专区免费东京热| 国产精品久久婷婷六月丁香| 久久影视综合亚洲| 久久午夜福利电影| 狠狠精品干练久久久无码中文字幕| 久久水蜜桃亚洲av无码精品麻豆| 久久婷婷国产剧情内射白浆| 亚洲精品久久久www| 亚洲欧美成人久久综合中文网 | 久久超碰97人人做人人爱| 久久久久人妻一区精品性色av| 久久综合给久久狠狠97色| A狠狠久久蜜臀婷色中文网| 国产精品久久久久久福利漫画 |