기본적으로 점 하나를 띄우는 코드를 가지고있다
void addNewPoint(int button, int state, int x, int y) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
points.push_back(make_pair(x, y));
fprintf(stdout, "(%d,%d)\n", x, y);
}
}
마우스를 클릭하면 좌표를 얻을 수 있다
float* newArr = new float[points.size()];
for (int i = 0; i < points.size(); i++) {
newArr[i] = points[i];
}
//동적 vector 안의 값을 배열에 넣어주기
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * points.size(), newArr, GL_STATIC_DRAW);
//동적 vector에 담겨있는 점의 개수만큼 Buffer에 전달해주기
glVertexAttribPointer(a_Position, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)(0));
//클릭의 x,y값만 전달하므로 두 값만 a_Position에 넣기
glEnableVertexAttribArray(a_Position);
glDrawArrays(GL_POINTS, 0, points.size()/2);
//Vec2개만큼 점을 만들어 찍어주기
float vtxs[] = { 0.0f,0.3f, 1.0f,
0.2f,0.0f, 1.0f,
-0.2f,0.0f, 1.0f,
-0.5f, 0.6f, 1.0f,
-0.7f, 0.3f, 1.0f,
-0.3f, 0.3f, 1.0f,
0.5f, -0.6f, 1.0f,
0.7f, -0.3f, 1.0f,
0.3f, -0.3f, 1.0f,
0.8f,0.3f, 1.0f,
0.6f,0.0f, 1.0f,
0.8f,0.0f, 1.0f,
}; //12개의 점
glGenBuffers(1, Buffers);
glBindBuffer(GL_ARRAY_BUFFER, Buffers[0]); //버퍼를 만들어주고 Bind해줌
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 12 * 3, vtxs, GL_STATIC_DRAW);
// 버퍼에 12개의 점 정보를 Vec3 형태로 전달한다
GLuint a_Position = glGetAttribLocation(programID, "a_Position");
//a_Position 값을 VS에 전달
glVertexAttribPointer(a_Position, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)(0));
//Vec3 값을 0간격으로 0인덱스부터 전달
glEnableVertexAttribArray(a_Position);
glDrawArrays(GL_TRIANGLES, 0, 12);
// 12개의 점으로 삼각형을 만들어준다