[OpenGL] 원하는 지점에 점찍기

혀니앤·2022년 10월 24일
0

컴퓨터 그래픽스

목록 보기
5/7

1. 기본단계

기본적으로 점 하나를 띄우는 코드를 가지고있다

2. 마우스 클릭 받기

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

마우스를 클릭하면 좌표를 얻을 수 있다

3. 마우스 클릭한 위치에 점 찍어주기

	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개만큼 점을 만들어 찍어주기

4. 삼각형 만들기

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개의 점으로 삼각형을 만들어준다

최종 결과

profile
일단 시작하기

0개의 댓글