• <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 閱讀(279) 評論(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,繪制函數(shù)修改如下:

            void CCY457OpenGLView::RenderScene ()
            {
            //繪制函數(shù)
                  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
            国产亚洲成人久久| 一级做a爰片久久毛片16| 欧洲国产伦久久久久久久| 久久中文精品无码中文字幕| 久久精品免费一区二区| 人妻少妇久久中文字幕| 激情五月综合综合久久69| 久久人人爽人人人人片av| 久久久精品免费国产四虎| 亚洲国产精品成人久久蜜臀 | 青草国产精品久久久久久| 99久久成人国产精品免费| 精品水蜜桃久久久久久久| 99久久精品国产一区二区 | 久久天天躁狠狠躁夜夜躁2014| 久久天天躁狠狠躁夜夜网站| 久久久噜噜噜久久中文字幕色伊伊| 国产香蕉久久精品综合网| 热99re久久国超精品首页| 亚洲综合精品香蕉久久网| 欧美亚洲另类久久综合婷婷| 久久99精品国产99久久| 久久久免费精品re6| 久久精品中文无码资源站| 一本久久精品一区二区| 久久se这里只有精品| 青青青国产精品国产精品久久久久 | 99久久精品影院老鸭窝| 色播久久人人爽人人爽人人片AV| 国产成人精品久久综合| 国产91色综合久久免费| 成人久久精品一区二区三区| 久久夜色精品国产噜噜亚洲AV| 2021国内久久精品| 国产精品亚洲综合久久| 综合久久一区二区三区 | 久久久亚洲欧洲日产国码是AV | 久久久久人妻一区精品性色av| 麻豆精品久久久久久久99蜜桃| 久久久久99精品成人片三人毛片| 精品久久久久久久中文字幕|