zoukankan      html  css  js  c++  java
  • opengl学习笔记(二)

    这段时间终于接触到一点点shader了,应该说shader是非常有用的东西吧,它就是能够把一些固定渲染管线的东西改变了,按照自己的意愿进行渲染,这样的话图形就可以自由发挥了。

    我也只是试验了一下shader,然后有一些经验:

    一、windows上面的gl版本只有1.1,永远只有1.1,微软太万恶了。。

    1.1没有GLSL,不能写shader,,,,,,

    所以要用一个开源的库,叫glew,用它才能在windows上写shader。。

    蛋疼的微软。。。

    二、glew使用之前要初始化,glewinit。

    而且要在创建窗口之后初始化,

    初始化之后才能用,才能写shader


    下面是我试验了一下shader能不能用,只是试验这个东西好不好使,可以跑起来的:

    #include <windows.h>
    #include <GL/glew.h>
    #include <GL/glut.h>
    #include <iostream>
    #include <string>
    #include <cstdio>
    using namespace std ;
    
    void  init() ;
    void  display() ;
    void  reshape( int , int ) ;
    void  makeShader() ;
    
    int  main( int argc , char ** argv )
    {
        //glewInit() ;
        glutInit( &argc , argv ) ;
        glutInitWindowSize( 500 , 500 ) ;
        glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ) ;
        glutCreateWindow( "cube" ) ;
        glewInit() ;
        makeShader() ;
        init() ;
        glutDisplayFunc( display ) ;
        glutReshapeFunc( reshape ) ;
        glutMainLoop() ;
        return 0 ;
    }
    
    void  makeShader()
    {
        int   shader , program , compiled , linked ;
    
        const GLchar* shaderSrc[] = {
            "void main()"
            "{"
            "   gl_Position = gl_ModelViewProjectionMatrix *gl_Vertex ; "
            "}"
        } ;
        shader = glCreateShader( GL_VERTEX_SHADER ) ;
        glShaderSource( shader , 1 , shaderSrc , NULL ) ;
        glCompileShader( shader ) ;
    
        glGetShaderiv( shader , GL_COMPILE_STATUS , &compiled) ;
    
        if( !compiled )
        {
            GLint Length ;
            GLchar *log ;
            glGetShaderiv( shader , GL_INFO_LOG_LENGTH , &Length ) ;
            log = (GLchar*)malloc( Length ) ;
            glGetShaderInfoLog( shader , Length , &Length , log ) ;
            fprintf( stderr , "compile log = '%s '
    " , log ) ;
            free( log ) ;
        }
    
        program = glCreateProgram() ;
    
        glAttachShader( program , shader ) ;
        glLinkProgram( program ) ;
    
        glGetProgramiv( program , GL_LINK_STATUS , &linked ) ;
        if( linked )
        {
            glUseProgram( program ) ;
        }
        else
        {
            cout << "error" << endl ;
        }
    
    }
    
    void  init()
    {
        //makeShader() ;
        glClearColor( 0 , 0 , 0 , 0 ) ;
        glClear( GL_COLOR_BUFFER_BIT ) ;
    }
    
    void  reshape( int w , int h )
    {
        glViewport( 0 , 0 , w , h ) ;
        glMatrixMode( GL_PROJECTION ) ;
        glLoadIdentity() ;
        glFrustum( -1 , 1 , -1 , 1 , 1 , 5 ) ;
        glMatrixMode( GL_MODELVIEW ) ;
        glLoadIdentity() ;
    }
    
    void  display()
    {
        glColor3f( 1 , 1 , 0 ) ;
        gluLookAt( 0 , 0 , 5 ,
                0 , 0 , 0 ,
                0 , 1 , 0
                ) ;
        glTranslatef( 1 , 0 , 0 ) ;
        glRotatef( 30 , 0 , 0 , 1 ) ;
        glutWireCube( 1 ) ;
        glRotatef( -30 , 0 , 0 , 1 ) ;
        glTranslatef( 1 , 0 , 0 ) ;
        glBegin( GL_TRIANGLES ) ;
            glVertex3f( 0 , 0 , 0 ) ;
            glVertex3f( 0 , 0.5 , 0 ) ;
            glVertex3f( 0.5 , 0.5 , 0 ) ;
        glEnd() ;
        glFlush() ;
    }
    


  • 相关阅读:
    time 模块学习
    day 14 自定义模块,常用模块 time .datetime ,time 模块
    day 13 课后作业
    day 12 课后作业
    day 11课后作业
    树状数组最值
    hdu 1059 Dividing bitset 多重背包
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    最长公共子序列板/滚动 N^2
    Uva 10635
  • 原文地址:https://www.cnblogs.com/riasky/p/3435961.html
Copyright © 2011-2022 走看看