html5 canvas webgl,Html5 Canvas + WebGL 简单示例 - JS / JScript / JavaScript - VBS求助&讨论 - 批处理之家 批处理_BAT...

#include

#include

#include

#include

#include

#include

#define SIZE_X 500

#define SIZE_Y 500

int winID;

int program;

GLuint vTest;

GLfloat test = 200.0;

GLuint vAng;

GLfloat ang = 0.0;

const GLchar* readShader( const char *filename );

void display(void)

{

static const GLfloat black[] = { 0.0f, 0.0f, 0.0f, 1.0f };

glClearBufferfv(GL_COLOR, 0, black );

glDrawArrays(GL_POINTS, 0, 1);

glutSwapBuffers();

}

void idle(void)

{

usleep(10000);

ang += 0.05;

glVertexAttrib1f( vAng, ang );

glutPostRedisplay();

}

void reshape(int Width,int Height)

{

glViewport(0, 0, Width, Height);     //视口范围

}

void keypress(unsigned char key, int mousex, int mousey)

{

switch (key)

{

case 'q':

glutDestroyWindow(winID);

exit(0);

break;

case 'Q':

glutDestroyWindow(winID);

exit(0);

break;

case ']':

test += test*0.1;

glVertexAttrib1f( vTest, test );

glutPostRedisplay();

break;

case '[':

test -= test*0.1;

glVertexAttrib1f( vTest, test );

glutPostRedisplay();

break;

}

}

void init(void)

{

glClearColor(0.0, 0.0, 0.0, 0.0);

//允许修改点元素大小

glEnable(GL_PROGRAM_POINT_SIZE);

srand(time(NULL));

}

int loadShader(void)

{

// Very Important !

glewInit();

const GLchar * vs_src;

const GLchar * fs_src;

vs_src = readShader( "pointTest.vert" );

fs_src = readShader( "pointTest.frag" );

GLuint vs = glCreateShader(GL_VERTEX_SHADER);

glShaderSource(vs, 1, &vs_src, NULL);

glCompileShader(vs);

GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);

glShaderSource(fs, 1, &fs_src, NULL);

glCompileShader(fs);

program = glCreateProgram();

glAttachShader(program, vs);

glAttachShader(program, fs);

glLinkProgram(program);

glUseProgram(program);

vTest = glGetAttribLocation( program, "vTest" );

glVertexAttrib1f( vTest, test );

printf("%d\n", vTest);

vAng = glGetAttribLocation( program, "vAng" );

glVertexAttrib1f( vAng, ang );

}

int main(int argc, char *argv[])

{

glutInit(&argc, argv);

//显示模式   双缓冲         RGBA

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

glutInitWindowSize(SIZE_X, SIZE_Y);       //窗口大小

glutInitWindowPosition(10, 10);         //位置

winID = glutCreateWindow("Simple");  //窗口句柄

init();

loadShader();

glutDisplayFunc(display);          //显示

glutKeyboardFunc(keypress);        //按键事件响应

glutReshapeFunc(reshape);          //窗口事件响应

glutIdleFunc(idle);                //闲时回调函数

glutMainLoop();                    //开始主循环

return 0;

}

const GLchar* readShader( const char *filename )

{

FILE *FILE = fopen(filename, "rb");

GLchar *source;

int size;

fseek( FILE, 0, SEEK_END  );

size = ftell(FILE) + 1;

fseek( FILE, 0, SEEK_SET  );  //turn back

source = (GLchar *) malloc( sizeof(GLchar) * size );

fread( source, 1, size, FILE);

return (const GLchar*)(source);  //强制转换

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值