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

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::

            The solution is to enable depth-buffering but make the depth buffer read-only while drawing the 

            translucent objects. First you draw all the opaque objects, with the depth buffer in normal operation. 

            Then, you preserve these depth values by making the depth buffer read-only. When the translucent 

            objects are drawn, their depth values are still compared to the values established by the opaque objects, 

            so they aren't drawn if they're behind the opaque ones. If they're closer to the viewpoint, however, they 

            don't eliminate the opaque objects, since the depth-buffer values can't change. Instead, they're blended 

            with the opaque objects. To control whether the depth buffer is writable, use glDepthMask(); if you 

            pass GL_FALSE as the argument, the buffer becomes read-only, whereas GL_TRUE restores the 

            normal, writable operation. 

            void GLWidget::paintGL() {

            glLoadIdentity();

            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            gluLookAt(0, 0, 8, 0, 0, 0, 0, 1, 0);

            glPushMatrix();

            {

            glColor3f(1.0, 0.0f, 0.0f);

            glTranslatef(0.0f, 0.0f, -1.0f);

            this->drawCube(1.0f, 1.0f, 1.0f, 0.1f);

            }

            glPopMatrix();

            glPushMatrix();

            {

            glColor3f(0.0, 0.0f, 1.0f);

            glTranslatef(0.60f, 0.0f, -0.5f);

            this->drawCube(1.0f, 1.0f, 1.0f, 0.1f);

            }

            glPopMatrix();

            glPushMatrix();

            {

            glEnable(GL_BLEND);

            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

            glDepthMask(GL_FALSE);

            glColor4f(0.0, 1.0f, 0.0f, 0.5f);

            glTranslatef(0.20f, 0.0f, 0.0f);

            this->drawCube(0.60f, 1.0f, 1.0f, 0.1f);

            glDepthMask(GL_TRUE);

            glDisable(GL_BLEND);

            }

            glPopMatrix();

            }

            void GLWidget::drawCube(GLfloat len, GLfloat xFactor, GLfloat yFactor,

            GLfloat zFactor) {

            GLfloat x = len * xFactor / 2;

            GLfloat y = len * yFactor / 2;

            GLfloat z = len * zFactor / 2;


            // GLfloat p0[3] = { -x, -y, -z };

            // GLfloat p1[3] = { x, -y, -z };

            // GLfloat p2[3] = { x, y, -z };

            // GLfloat p3[3] = { -x, y, -z };

            // GLfloat p4[3] = { -x, -y, z };

            // GLfloat p5[3] = { x, -y, z };

            // GLfloat p6[3] = { x, y, z };

            // GLfloat p7[3] = { -x, y, z };


            glBegin(GL_QUADS);

            {

            // Draw left surface.

            glNormal3f(-1.0f, 0.0f, 0.0f);

            glVertex3f(-x, y, -z);

            glVertex3f(-x, -y, -z);

            glVertex3f(-x, -y, z);

            glVertex3f(-x, y, z);


            // Draw front surface.

            glNormal3f(0.0f, 0.0f, 1.0f);

            glVertex3f(-x, -y, z);

            glVertex3f(x, -y, z);

            glVertex3f(x, y, z);

            glVertex3f(-x, y, z);


            // Draw right surface.

            glNormal3f(1.0f, 0.0f, 0.0f);

            glVertex3f(x, -y, z);

            glVertex3f(x, -y, -z);

            glVertex3f(x, y, -z);

            glVertex3f(x, y, z);


            // Draw back surface.

            glNormal3f(0.0f, 0.0f, -1.0f);

            glVertex3f(x, y, -z);

            glVertex3f(x, -y, -z);

            glVertex3f(-x, -y, -z);

            glVertex3f(-x, y, -z);


            // Draw top surface.

            glNormal3f(0.0f, 1.0f, 0.0f);

            glVertex3f(x, y, z);

            glVertex3f(x, y, -z);

            glVertex3f(-x, y, -z);

            glVertex3f(-x, y, z);


            // Draw bottom surface.

            glNormal3f(0.0f, -1.0f, 0.0f);

            glVertex3f(-x, -y, -z);

            glVertex3f(x, -y, -z);

            glVertex3f(x, -y, z);

            glVertex3f(-x, -y, z);

            }

            glEnd();


            // glBegin(GL_QUADS);

            // {

            // // Draw left surface.

            // glNormal3f(-1.0f, 0.0f, 0.0f);

            // glVertex3fv(p3);

            // glVertex3fv(p0);

            // glVertex3fv(p4);

            // glVertex3fv(p7);

            //

            // // Draw front surface.

            // glNormal3f(0.0f, 0.0f, 1.0f);

            // glVertex3fv(p4);

            // glVertex3fv(p5);

            // glVertex3fv(p6);

            // glVertex3fv(p7);

            //

            // // Draw right surface.

            // glNormal3f(1.0f, 0.0f, 0.0f);

            // glVertex3fv(p5);

            // glVertex3fv(p1);

            // glVertex3fv(p2);

            // glVertex3fv(p6);

            //

            // // Draw back surface.

            // glNormal3f(0.0f, 0.0f, -1.0f);

            // glVertex3fv(p2);

            // glVertex3fv(p1);

            // glVertex3fv(p0);

            // glVertex3fv(p3);

            //

            // // Draw top surface.

            // glNormal3f(0.0f, 1.0f, 0.0f);

            // glVertex3fv(p6);

            // glVertex3fv(p2);

            // glVertex3fv(p3);

            // glVertex3fv(p7);

            //

            // // Draw bottom surface.

            // glNormal3f(0.0f, -1.0f, 0.0f);

            // glVertex3fv(p0);

            // glVertex3fv(p1);

            // glVertex3fv(p5);

            // glVertex3fv(p4);

            // }

            // glEnd();

            }

             

             

            posted on 2008-09-25 05:15 逛奔的蝸牛 閱讀(1077) 評論(1)  編輯 收藏 引用 所屬分類: OpenGL

            評論

            # re: OpenGL: Blend 2009-06-01 21:37 暗金裝備
            先繪制全部的場景之后再繪制透明物體, 并且透明物體要按照相反的次序來繪制, 即先繪制最遠的物體.  回復  更多評論
              

            精品久久亚洲中文无码| 午夜精品久久影院蜜桃| 男女久久久国产一区二区三区| 国产成人无码精品久久久性色| 久久99国产综合精品女同| 精品久久久久久无码专区不卡| 一本久久久久久久| 伊色综合久久之综合久久| 99国产欧美精品久久久蜜芽| 99热成人精品免费久久| 国产成人精品久久| 国产免费久久精品99久久| 狠狠色婷婷久久综合频道日韩| 国产成人无码精品久久久久免费| 久久久久se色偷偷亚洲精品av | 亚洲精品无码久久久久AV麻豆| 久久香综合精品久久伊人| 麻豆精品久久精品色综合| 色欲综合久久中文字幕网| 久久精品国产一区二区三区不卡| 久久久久AV综合网成人| 一97日本道伊人久久综合影院| 婷婷综合久久狠狠色99h| 精品无码久久久久国产动漫3d| 国内精品久久久久久麻豆| 久久久久人妻一区精品色| 久久无码高潮喷水| 亚洲国产成人乱码精品女人久久久不卡 | 99久久久久| 97久久久久人妻精品专区| 7777久久久国产精品消防器材| 久久综合狠狠综合久久97色| 久久99精品九九九久久婷婷| 久久99久久99小草精品免视看 | 最新久久免费视频| 久久久久国产一区二区 | 色青青草原桃花久久综合| 久久国产精品视频| 狠狠人妻久久久久久综合| 久久精品国产亚洲7777| 久久久精品波多野结衣|