查看: 6223|回复: 3

GLSL教程(4) OpenGL GLSL程序概述

[复制链接]
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-6-2 22:11:23 | 显示全部楼层 |阅读模式
    GLSL教程

    译:FreeSouth
    OpenGL GLSL程序概述

    在本节将介绍创建基于OpenGL的GLSL程序,在这里假定你已经有了一个片元着色器与一个顶点着色器。你可以从橙皮书(即:OpenGL着色语言)提供的网站上下载一些,Shader Designer和Render Monkey里也包含一些着色器的例子。
    在OpenGL的程序构建方式与C程序很相似,每一个着色器就相当于一个C模块,你必须分开先编译完成,然后再链接到程序,最后执行,这与C程序的执行过程是相似的。
    现在可以使用ARB扩展和OpenGL2.0,如果你是新手,建议看一下glew库,glew对ARB扩展和OpenGL的新版本都有一些不错的应用。
    如果你的机器不支持OpenGL2.0,那只有使用ARB扩展了,在这里两个扩展需要支持:
            --GL_ARB_fragment_shader
            --GL_ARB_vertex_shader
    这里有一个小例子,使用GLEW去看一下扩展是不是可用:
    ________________________________________
            #include <GL/glew.h>
            #include <GL/glut.h>
           
            void main(int argc, char **argv) {
           
                    glutInit(&argc, argv);
                   
                    ...
                   
                    glewInit();
                    if (GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader)
                            printf("Ready for GLSL\n");
                    else {
                            printf("Not totally ready \n");
                            exit(1);
                    }
           
                    setShaders();
           
                    glutMainLoop();
            }
    ________________________________________
    下面的程序测试一下OpenGL2.0是不是可用:
    ________________________________________
            #include <GL/glew.h>
            #include <GL/glut.h>
           
            void main(int argc, char **argv) {
           
                    glutInit(&argc, argv);
                   
                    ...
                   
                    glewInit();
                    if (glewIsSupported("GL_VERSION_2_0"))
                            printf("Ready for OpenGL 2.0\n");
                    else {
                            printf("OpenGL 2.0 not supported\n");
                            exit(1);
                    }
           
                    setShaders();
           
                    glutMainLoop();
            }
    ________________________________________
    下图阐释了在OpenGL2.0中使用Shader的一些步骤,以后将分别介绍它们:

    下节我们将逐步创建一些Shader程序。
    原文地址:http://www.lighthouse3d.com/opengl/glsl/index.php?ogloverview
    OpenGL GLSL程序概述.pdf (167.85 KB, 下载次数: 911)

    该用户从未签到

    发表于 2010-12-7 00:03:38 | 显示全部楼层
    如果你的机器不支持OpenGL2.0,那只有使用ARB扩展了
    ——这句话的意味不太明白。
    一直没有搞懂gl库和显卡支持关系。
    是不是显卡支持的话就直接调用了显卡驱动中的相关接口,而不支持的话,就是用ARB软件模拟的接口?

    该用户从未签到

    发表于 2010-12-7 09:34:56 | 显示全部楼层
    “可能这么说不太准确,不过ARB就是在某个功能没有加入到核心之前使用的”
    “wglGetProcAddress,就是这个来获取扩展函数的地址,然后就可以用了,不用很麻烦地找glext.h”

    该用户从未签到

    发表于 2011-4-7 20:23:39 | 显示全部楼层
    我用的是glew不知道可否……
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表