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

            9191精品国产免费久久| 午夜久久久久久禁播电影 | 中文字幕无码久久人妻| 久久久久亚洲AV片无码下载蜜桃| 蜜臀av性久久久久蜜臀aⅴ| 久久精品国产精品亚洲精品| 久久久国产亚洲精品| 精品久久久久久久| 亚洲愉拍99热成人精品热久久| 曰曰摸天天摸人人看久久久| 久久久久久久久久久精品尤物| 久久99国产精品一区二区| 久久久久久久波多野结衣高潮| 精品无码人妻久久久久久| 久久不见久久见免费视频7| 亚洲国产香蕉人人爽成AV片久久 | 久久成人国产精品免费软件| 国产成人香蕉久久久久| 久久亚洲精品中文字幕| 久久天天躁狠狠躁夜夜avapp| 精品国产综合区久久久久久| 久久99国产综合精品| 亚洲国产欧美国产综合久久| 久久久久综合国产欧美一区二区| 久久免费精品一区二区| 69国产成人综合久久精品| 亚洲香蕉网久久综合影视| 久久久久久久免费视频| 亚洲精品国精品久久99热| 中文成人久久久久影院免费观看| 久久精品女人天堂AV麻| 久久久久久久国产免费看| 久久国产美女免费观看精品 | 亚洲精品无码久久久久| 欧美精品乱码99久久蜜桃| 久久久久免费精品国产| 色综合久久无码中文字幕| 国内精品久久九九国产精品| 99久久精品国产麻豆| 丁香五月综合久久激情| 午夜精品久久久久久久无码|