• <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 逛奔的蝸牛 閱讀(1080) 評論(1)  編輯 收藏 引用 所屬分類: OpenGL

            評論

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

            91精品国产91久久久久久蜜臀| 久久精品成人| 亚洲精品国产自在久久| 亚洲熟妇无码另类久久久| 亚洲国产成人久久精品99| 精品无码久久久久久久动漫| 99久久精品免费看国产一区二区三区 | 久久中文字幕一区二区| 国产精品九九久久免费视频 | 大香伊人久久精品一区二区 | 精品永久久福利一区二区| 精品久久久久久久久久中文字幕| 久久精品中文字幕一区| 97精品伊人久久久大香线蕉| 久久综合久久久| 99久久99久久精品国产片果冻| 亚洲综合久久综合激情久久| 久久久久亚洲AV片无码下载蜜桃| 国产精品无码久久久久| 亚洲av成人无码久久精品| 欧美精品一区二区久久| 久久精品国产亚洲7777| 欧美亚洲色综久久精品国产| 国产精品久久久久久久人人看 | 亚洲国产日韩综合久久精品| 欧美激情精品久久久久| 日本五月天婷久久网站| 人人狠狠综合88综合久久| 国产成人香蕉久久久久| 久久精品国产第一区二区三区| 久久国产劲爆AV内射—百度| 国内精品久久久久久久久电影网 | 精品水蜜桃久久久久久久| 久久噜噜电影你懂的| 人妻精品久久久久中文字幕一冢本| 亚洲人成网站999久久久综合| 99久久精品国产综合一区| 69久久夜色精品国产69| 99久久99这里只有免费费精品 | 久久久久久久99精品免费观看| 伊人久久大香线蕉亚洲|