·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发设计
考试公务员高考考研
业界互联网通信探索
您现在的位置:天新网 > 软件开发 > 开发语言 > 汇编
Win32 OpenGL编程(12) 混合及半透明效果
http://www.21tx.com 2009年11月16日 CSDN 九天雁翎

上一页 1 2 3 4 下一页

  的确,简单的使用真的是非常简单,(虽然参数的组合可以很多)事实上,见下例,仅仅那么几行代码,就实现了一个半透明效果。

//OpenGL初始化开始
void SceneInit(int w,int h)
{
    GLenum err = glewInit();
    if(err != GLEW_OK)
    {
        MessageBox(NULL, _T("Error"), _T("Glew init failed."), MB_OK);
        exit(-1);
    }
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_DST_COLOR);
}
void DrawSmoothColorPyramid(GLfloat adSize)
{
    static GLfloat fPyramidDatas[] = {    0.0, 1.0, 0.0,    // 三角锥上顶点
        -1.0, 0.0, 1.0,    // 底面左前顶点
        1.0, 0.0, 1.0,    // 底面右前下顶点
        0.0, 0.0, -1.0}; // 底面后下顶点
    GLfloat fPyramidSizeDatas[sizeof(fPyramidDatas)/sizeof(GLfloat)] = {0};
    // 计算大小
    for( int i = 0; i < 12; ++i)
    {
        fPyramidSizeDatas[i] = fPyramidDatas[i] * adSize;
    }
    static GLfloat fPyramidColors[] = { 0.0, 0.0, 0.0, 0.7,
        1.0, 0.0, 0.0, 0.7,
        0.0, 1.0, 0.0, 0.7,
        0.0, 0.0, 1.0, 0.7};
    static GLubyte ubyIndices[] = {    0, 1, 2,    // 正面
        0, 3, 1,    // 左侧面
        0, 2, 3,    // 右侧面
        1, 3, 2};    // 底面
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, fPyramidSizeDatas);
    glColorPointer(4, GL_FLOAT, 0, fPyramidColors);
    for(int i = 0; i < 4; ++i)
    {
        glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, ubyIndices+i*3);
    }
}
//这里进行所有的绘图工作
void SceneShow(GLvoid)        
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 0.0, 0.0);

    glPushMatrix();
    DrawSmoothColorPyramid(0.5);
    DrawSmoothColorPyramid(1);
    glPopMatrix();
    glLoadIdentity();
    gluLookAt(gViewPosX, gViewPosY, gViewPosZ, gViewDirX, gViewDirY, gViewDirZ, gViewUpDirX, gViewUpDirY, gViewUpDirZ);
    glFlush();
}  

上一篇: Win32 OpenGL编程(10) 视口变换
下一篇: Win32 OpenGL编程(7) 3D视图变换——真3D的关键

上一页 1 2 3 4 下一页

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2011 21tx.com, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net