设为首页 加入收藏

TOP

glsl着色器(c语言)(一)
2014-11-23 18:02:47 来源: 作者: 【 】 浏览:18
Tags:glsl 着色 语言
basic.vert
#version 400

layout(location =0) in vec3 VertexPosition;
layout(location =1) in vec3 VertexColor;

out vec3 Color;

uniform mat4 Matrix;

void main()
{
    Color= VertexColor;
	
    gl_Position= Matrix *vec4(VertexPosition,1.0);
}
basic.frag
#version 400  
  
in vec3 Color;  
  
out vec4 FragColor;  
  
void main()  
{  
    FragColor = vec4(Color,1.0);  
}  



主程序main.c
#include 
   
    
#include 
    
      #include 
     
       #include "readtext.h" #ifdef __APPLE__ #include 
      
        #else #define FREEGLUT_STATIC #include 
       
         #endif #pragma comment(lib,"../readtext.lib") #pragma comment(lib,"../glew32.lib") GLuint vShader, fShader,programHandle; int infologLength = 0; int charsWritten = 0; char *infoLog; //顶点位置数组 float positionData[] = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f}; //颜色数组 float colorData[] = { 0.2f, 0.8f, 0.0f, 0.4f, 0.6f, 0.0f, 0.1f, 0.9f, 1.0f }; float matrix[16]; matrix[16] ={0.5 , 0.0, -0.866, 0.0, 0.0, 1.0, 0.0, 0.0, 0.866 , 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0 }; /////////////////变换矩阵 ///////////////////////////////////////////////////// // cos(angle), 0, -sin(angle), //列向量 //0, 1, 0, //sin(angle), 0,cos(angle) // GLint matrixLocation; GLuint vaoHandle;//vertex array object void initShader() { char *renderer, *vender, *version, *glslVersion; char *vs, *fs; char *vv, *ff; //检测版本 renderer = glGetString( GL_RENDERER ); vender = glGetString( GL_VENDOR ); version = glGetString( GL_VERSION ); glslVersion = glGetString( GL_SHADING_LANGUAGE_VERSION ); printf("%s \n", renderer); printf("%s \n", vender); printf("%s \n", version); printf("%s \n", glslVersion); //着色器处理 vShader= glCreateShader(GL_VERTEX_SHADER); vs=readText("../basic.vert"); printf("%s\n", vs); if(vShader ==0) { printf("fail to creat vertex shader"); exit(1); } //将源代码与着色器相关联 vv =vs; glShaderSource(vShader, 1, &vv, NULL); glCompileShader(vShader); free(vs); //检查是否编译成功 glGetShaderiv(vShader, GL_INFO_LOG_LENGTH,&infologLength); if (infologLength > 0) { infoLog = (char *)malloc(infologLength); glGetShaderInfoLog(vShader, infologLength, &charsWritten, infoLog); printf("%s\n",infoLog); free(infoLog); } ////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////// fShader = glCreateShader(GL_FRAGMENT_SHADER); if(fShader ==0) { printf("fail to creat shader\n"); exit(1); } fs= readText("../basic.frag"); printf("%s \n",fs); ff= fs; glShaderSource(fShader, 1, &ff, NULL); glCompileShader(fShader); free(fs); //检查编译是否成功 glGetShaderiv(fShader, GL_INFO_LOG_LENGTH,&infologLength); if (infologLength > 0) { infoLog = (char *)malloc(infologLength); glGetShaderInfoLog(fShader, infologLength, &charsWritten, infoLog); printf("%s\n",infoLog); free(infoLog); } ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// //创建程序对象 programHandle= glCreateProgram(); glAttachShader(programHandle, vShader); glAttachShader(programHandle, fShader); glLinkProgram(programHandle); glGetProgramiv(programHandle, GL_INFO_LOG_LENGTH,&infologLength); if (infologLength > 0) { infoLog = (char *)malloc(infologLength); glGetProgramInfoLog(programHandle, infologLength
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇skip list跳表C语言代码。 下一篇C指针原理(87)-helloworld的C程..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: