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

            不斷的學(xué)習(xí),不斷的思考,才能不斷的進(jìn)步.Let's do better together!
            posts - 102, comments - 43, trackbacks - 0, articles - 19

            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,設(shè)置光源代碼修改如下:

            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/    

            本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
            原文鏈接:http://www.cnblogs.com/phinecos/archive/2008/11/07/1328887.html
            久久国产精品久久久| 久久久久久久综合日本| 久久久久AV综合网成人| 久久久久久久97| 久久久久无码专区亚洲av| 亚洲伊人久久精品影院 | 精品久久久久中文字| 免费一级做a爰片久久毛片潮| 99精品久久精品一区二区| 国产精品久久毛片完整版| 欧美大战日韩91综合一区婷婷久久青草| 久久精品国产亚洲AV影院| 国产激情久久久久影院| 色欲综合久久中文字幕网| 伊人色综合久久天天人守人婷 | 久久露脸国产精品| 国产成人精品白浆久久69| 久久天天婷婷五月俺也去| 99热精品久久只有精品| 精品国产VA久久久久久久冰| 久久综合偷偷噜噜噜色| 99久久无码一区人妻| 久久精品国产清高在天天线| 综合网日日天干夜夜久久| 久久强奷乱码老熟女| 久久国产精品波多野结衣AV| 成人免费网站久久久| 久久久久亚洲av无码专区导航| 99久久这里只精品国产免费| 久久亚洲国产成人影院网站| 久久精品国产半推半就| 国产精品免费福利久久| 热re99久久6国产精品免费| 亚洲成色WWW久久网站| 免费无码国产欧美久久18| 免费一级欧美大片久久网| 久久久久久久综合综合狠狠| 久久99精品久久久久久秒播| 久久夜色精品国产亚洲av| 日韩va亚洲va欧美va久久| 亚洲综合久久久|