컴퓨터그래픽스 - Bunny Model 회전 코드

2023. 4. 5. 15:06·수업

 

#include <glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "BunneyModel.h"
#include <stdio.h>

GLuint g_stanfordBunnyID = -1;

GLint xValue = 0;
GLint yValue = 0;
GLint zValue = 0;

GLint clickDown = 0;
GLint fixX = 0;
GLint fixY = 0;

GLint GenerateCallList()
{
	GLint lid = glGenLists(1);

	glNewList(lid, GL_COMPILE);
	glColor3f(1.0f, 0.0f, 0.0f);

	unsigned int i;

	for (int i = 0; i < (sizeof(face_indicies) / sizeof(face_indicies[0])); i++)
	{
		int vi;
		glBegin(GL_LINE_LOOP);

		vi = face_indicies[i][0];
		glVertex3f(vertices[vi][0], vertices[vi][1], vertices[vi][2]);
		//glVertex3fv(vertices[vi])와 같음. glVertex3fv(vertices[face_indicies[i][1]]);도 가능

		vi = face_indicies[i][1];
		glVertex3f(vertices[vi][0], vertices[vi][1], vertices[vi][2]);

		vi = face_indicies[i][2];
		glVertex3f(vertices[vi][0], vertices[vi][1], vertices[vi][2]);

		glEnd();
	}
	glEndList();

	return lid;
}

void MyDisplay()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0, 0.0, 0.0);
	glLoadIdentity(); //초기화해야 정상적으로 회전함. 아니면 매우 빨리 회전함.
	

	// 위치에 따라 좌표축 회전
	glRotatef(xValue, 1.0, 0.0, 0.0);
	glRotatef(yValue, 0.0, 1.0, 0.0);
	glRotatef(zValue, 0, 0, 1.0);

	// Axis
	glLineWidth(2);
	glBegin(GL_LINES);
	glColor3f(1.0f, 0.0f, 0.0f);	glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(1.0f, 0.0f, 0.0f);
	glColor3f(0.0f, 1.0f, 0.0f);	glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f);
	glColor3f(0.0f, 0.0f, 1.0f);	glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 1.0f);
	glEnd();
	unsigned int i;

	glCallList(g_stanfordBunnyID);

	glFlush();
}


void MyKeyboard(unsigned char KeyPressed, int X, int Y)
{
	switch (KeyPressed)
	{
		case 'Q':
		case 'q':
			exit(0); break;
		case 'x':
		case 'X':
			xValue += 1; break;
			if (xValue > 360) xValue -= 360;
		case 'y':
		case 'Y':
			yValue += 1; break;
			if (yValue > 360) yValue -= 360;
		case 'z':
		case 'Z':
			zValue += 1; break;
			if (zValue > 360) zValue -= 360;
		case 32: //spacebar
			xValue = 0; yValue = 0; zValue = 0; break;

	}
	printf("%d\n", KeyPressed);
	glutPostRedisplay();
}

void MyMouseClick(GLint Button, GLint State, GLint X, GLint Y)
{
	if (Button == GLUT_LEFT_BUTTON && State == GLUT_DOWN)
	{
		xValue = X;
		yValue = Y;
		clickDown = 1;
	}

	if (Button == GLUT_LEFT_BUTTON && State == GLUT_UP)
	{
		clickDown = 0;
	}
}

void MyMouseMove(GLint X, GLint Y)
{
	if (clickDown == 1)
	{
		xValue = xValue + (fixX - X);
		yValue = yValue + (fixY - Y);
		fixX = X;
		fixY = Y;
	}
	glutPostRedisplay();
}



int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitWindowSize(700, 700);
	glutCreateWindow("OpenGL Example");

	g_stanfordBunnyID = GenerateCallList();

	glutDisplayFunc(MyDisplay);


	glutKeyboardFunc(MyKeyboard);
	glutMouseFunc(MyMouseClick);
	glutMotionFunc(MyMouseMove);

	glutMainLoop();
	return 0;
}
저작자표시 비영리 변경금지 (새창열림)

'수업' 카테고리의 다른 글

컴퓨터그래픽스 - 좌표계 변환 vs 물체 변환  (0) 2023.04.10
웹프로그래밍 - 자바스크립트 javascript 함수  (0) 2023.04.06
컴퓨터그래픽스 - 12. 그래픽스 기본 이론2  (0) 2023.04.05
웹프로그래밍 - 자바스크립트 javascript 기초  (0) 2023.04.04
모바일프로그래밍 - Fragment_Navigation(모바일 앱에서 화면 전환)  (0) 2023.04.04
'수업' 카테고리의 다른 글
  • 컴퓨터그래픽스 - 좌표계 변환 vs 물체 변환
  • 웹프로그래밍 - 자바스크립트 javascript 함수
  • 컴퓨터그래픽스 - 12. 그래픽스 기본 이론2
  • 웹프로그래밍 - 자바스크립트 javascript 기초
eunslog
eunslog
코딩 잘하는 개발자가 꿈입니다. 꾸준히 열심히 코딩공부를 하고 있습니다.
  • eunslog
    오늘도 코딩
    eunslog
  • 전체
    오늘
    어제
    • 분류 전체보기 (93)
      • 일상 (0)
      • 코딩 (31)
        • Spring (1)
        • Database (3)
        • Server (8)
        • Error (11)
        • Git (2)
        • NodeJS (0)
      • SQL (0)
      • 수업 (34)
      • IT 관련 (7)
      • 자격증 (11)
      • 멘토링 (9)
      • 그외 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github 주소
  • 공지사항

  • 인기 글

  • 태그

    html
    멋사 11기
    자바 기초
    안드로이드 스튜디오
    androidStudio
    멋사
    안드로이드스튜디오
    java
    Android Studio
    코틀린
    멋쟁이사자처럼 11기
    java 기초
    웹프로그래밍
    모바일프로그래밍
    자바
    Kotlin
    멋쟁이사자처럼
    컴퓨터그래픽스
    AWS 서버
    CSS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
eunslog
컴퓨터그래픽스 - Bunny Model 회전 코드
상단으로

티스토리툴바