69,369
社区成员
发帖
与我相关
我的任务
分享
#include <GL/gl.h>
#include <GL/freeglut.h>
void display();
int main(int argc, char ** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(512, 512);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutMainLoop();
}
void display(){
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
GLuint array;
glGenVertexArrays(1, &array);
glBindVertexArray(array);
GLfloat vertex_data[3][3] = {{-1.0, -1.0, 0.0}, {1.0, -1.0, 0.0}, {0.0, 1.0, 0.0}};
GLuint buffer;
buffer=glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, vertex_data, GL_STATIC_DRAW);
GLuint VertexShader = glCreateShader(GL_VERTEX_SHADER);
GLuint FragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
char * VertexShaderCode = "#version 120\nvoid main(){gl_Position = vec4(vertexPosition, 1.0);}\n";
char * FragmentShaderCode = "#version 120\nvoid main(){gl_FragColor = vec4(1,0,0,1);}\n";
glShaderSource(VertexShader, 1, &VertexShaderCode, NULL);
glShaderSource(FragmentShader, 1, &FragmentShaderCode, NULL);
glCompileShader(VertexShader);
glCompileShader(FragmentShader);
GLuint Program=glCreateProgram();
glAttachShader(Program, VertexShader);
glAttachShader(Program, FragmentShader);
glLinkProgram(Program);
glUseProgram(Program);
GLuint vertexattrpos = glGetAttribLocation(Program, "vertexPosition");
glEnableVertexAttribArray(vertexattrpos);
glVertexAttribPointer(vertexattrpos, 3, GL_FLOAT, GL_FALSE, 0, (void *)0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glFinish();
}
gcc test.c -lGL -lglut -o test
./test