컴그

CJB_ny·2022년 5월 4일
0

3D 좌표계

#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <cmath>


// p43 3차원 표현 코드

// 정점 부분 8개
GLfloat MyVertices[8][3] = 
{ 
	{-0.25,-0.25,0.25}/* 0번 */, {-0.25,0.25,0.25}/* 1번 */, {0.25,0.25,0.25}/* 2번 */, {0.25,-0.25,0.25}/* 3번 */,
	{-0.25,-0.25,-0.25}/* 4번 */, {-0.25,0.25,-0.25}/* 5번 */, {0.25,0.25,-0.25}/* 6번 */, {0.25,-0.25,-0.25}/* 7번 */
};
GLfloat MyColors[8][3] = 
{
	{0.2,0.2,0.2}, {1.0,0.0,0.0}, {1.0, 1.0, 0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0},
	{1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0} 
};
GLubyte MyVertexList[24] = { 0,3,2,1, /* 4개씩 끊으면 면이됨 */ 2,3,7,6, 0,4,7,3, 1,2,6,5, 4,5,6,7, 0,1,5,4 };
// 반시계 방향으로 4개를 호출해야 앞면 나옴 ex 0321

void MyDisplay() {
	glClear(GL_COLOR_BUFFER_BIT);
	glFrontFace(GL_CCW);
	glEnable(GL_CULL_FACE);
	glEnableClientState(GL_COLOR_ARRAY);
	glEnableClientState(GL_VERTEX_ARRAY);
	glColorPointer(3, GL_FLOAT, 0, MyColors);
	glVertexPointer(3, GL_FLOAT, 0, MyVertices);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glRotatef(30.0, 1.0, 1.0, 1.0);
	for (GLint i = 0; i < 6; i++)
		glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &MyVertexList[4 * i]);
	glFlush();
}


int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB);
	glutInitWindowSize(300, 300);
	glutInitWindowPosition(0, 0);
	glutCreateWindow("OpenGL Drawing Example");
	glClearColor(1.0, 1.0, 1.0, 1.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
	glutDisplayFunc(MyDisplay);
	glutMainLoop();
	return 0;
	
}

반시계 방향으로 돌림

GLubyte MyVertexList[24] = { 0,3,2,1, / 4개씩 끊으면 면이됨 / 2,3,7,6, 0,4,7,3, 1,2,6,5, 4,5,6,7, 0,1,5,4 };
// 반시계 방향으로 4개를 호출해야 앞면 나옴 ex 0321

에서 반시계 방향으로 돌린다.

glFrontFace(GL_CCW);

glEnable(GL_CULL_FACE); // CULL FACE 보이지 않는 면은 지워라 = 기능

계층구조적 표현

이렇게 정점들을 관리하는게 메모리 관리에 좋다.

왜? =>

960 = 6(면 6개) x 4(한 면에 정수 4개 0321) x 8 + 3 x 8 x 32

2304 비트 = 6 x 4 x 3 x 32

지엘의 실행모드

보류모드

pythin -> DLL -> 유니티 import -> c# 사용가능

6장

모델 x -> 전역

3차원 물체표현

삼각형 평면 보장

와이어 프레임과 솔리드 렌더링

어파인 공간

집중해야됨

V = 종점 - 시점 == "벡터"

Q = V + P

Q = 벡터 + 점

점 P를 벡터 V 만큼 더해서 보내라 -> Q됨

V = P + (1/2)(Q - P)

P = 점, (1/2)(Q - P) = 점

V = P + t (Q - P) = (1 - t)P + (t)Q (0 ≤ t ≤ 1)

t = 0일 떄 P 나옴

t = 1일 때 Q 나옴

모든 점 표현가능.

Q1)

(1 - t)P + (t)Q

( (1 - 2/5) x (-2, -4) ) + 2/5 x (4, 2)

3/5 x (-2, -4) => (-6/5, -12/5)

  • (8/5, 4/5)
    V` = (2/5, -8/5)

Q2) P(-2, -4)이고 Q(4, 2)인 경우 V = (10/4, 2/4)일 때 t값을 구하시오

= (1 - t)P + (t)Q = (10/4, 2/4)
(1 - t) x (-2, -4) + t x (4, 2) = (10/4, 2/4)
-2 x (1 - t) + 4t = 10/4
-4 x (1 - t) + 2t = 2/4

-2 + 2t + 4t = 10/4
-4 +4t + 2t = 2/4

6t -2 = 10/4
6t -4 = 2/4

6t = 10/4 + 8/4
6t = 14/4
t = 16/4 * 1/6
t = 1/3

??

profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글