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() ;
    }
    


  • 相关阅读:
    程序员修炼之道:从小工到专家
    2020.12.16收获
    2020.12.15收获
    2020.12.14收获
    2020.12.13收获
    Android学习第二天——对Android的简单了解
    Java学习12.18
    考试加分项
    Java学习12.17
    Java建议
  • 原文地址:https://www.cnblogs.com/riasky/p/3435961.html
Copyright © 2011-2022 走看看