• <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 暗金裝備
            先繪制全部的場景之后再繪制透明物體, 并且透明物體要按照相反的次序來繪制, 即先繪制最遠(yuǎn)的物體.  回復(fù)  更多評論
              

            久久国产欧美日韩精品| 国产精品久久久久久| 亚洲精品国精品久久99热| 中文成人无码精品久久久不卡| 亚洲人成网站999久久久综合| 亚洲精品tv久久久久久久久 | 精品国产乱码久久久久软件| 一本一本久久A久久综合精品| 精品国产乱码久久久久久郑州公司| 一级做a爰片久久毛片16| 无码任你躁久久久久久老妇App| 久久精品国产亚洲av麻豆色欲 | 91久久精品视频| 久久99精品国产麻豆宅宅| 色综合久久综精品| 久久久精品国产免大香伊| 狠狠久久亚洲欧美专区| 性色欲网站人妻丰满中文久久不卡| 久久青青草原综合伊人| 欧美一区二区三区久久综| 久久国产视频99电影| 国产精品久久久久9999| 国产成人精品综合久久久久| 久久久久久国产精品免费免费| 久久综合狠狠综合久久| 亚洲人成伊人成综合网久久久| 久久无码AV中文出轨人妻| 97久久精品人人做人人爽| 精品乱码久久久久久久| 亚洲精品白浆高清久久久久久 | 久久精品免费观看| 久久国产免费观看精品3| 久久精品成人欧美大片| 国产成人精品综合久久久| 精品国产乱码久久久久软件| 久久婷婷五月综合97色直播| 亚洲国产精品嫩草影院久久| 要久久爱在线免费观看| 伊人久久大香线蕉综合网站| 国产精品久久网| 欧美精品丝袜久久久中文字幕 |