전체 글 (93)
-
2015.11.26 [OpenGL] 기본 도형 그리기
오픈지엘로 여러개 도형을 그리는 방법을 알아보자 ///////////////////////////////////기본////////////////////////////////// ★ 도형 1개 그리기 ㄱ. 삼각형123456789101112131415161718192021222324#include #include #include #include void DoDisplay(); void main(){ glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); // glutMainLoop(); //} void DoDisplay(){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(0, 0.1); glVer..
-
2015.11.19 [OpenGL] 윈도우 좌표를 OpenGL 좌표로 변환하기 1
마우스 클릭한 위치로 도형을 이동시키거나 다시 그릴 때, 윈도우(디바이스) 좌표랑 OpenGL 좌표랑 달라서 값이 전혀 이상하게 들어가는 경우가 있다. 이런 경우, 윈도우 좌표를 OpenGL 좌표로 맞춰보자 *윈도우 좌표계 *OpenGL 좌표계 출처:soen 윈도우 클라이언트 창의 max 값 변수 winWidth, winHeight 변수가 있다고 가정할 때, void convertDeviceXYOpenGLXY(int x, int y, float* ox, float* oy) /* x,y : 윈도우 마우스 좌표 변수 , ox, oy : Open GL 좌표로 변환 후 저장할 변수 */{int w = winWidth;int h = winHeight;*ox = (float)(x - (float)w / 2.0)*(..
-
2015.11.06 배열 할당 : 메모리 상태
배열은 메모리가 일자로 잡힌다. 배열의 인덱스는 참조하는 메모리를 의미한다 1차원 배열 : arr[10] -> 메모리가 1자로 10개 일자로 잡힘 2차원 배열 : arr[10][10] -> 10개의 메모리가 10번 일자로 잡힘 근데 인덱스가 [8][20] 이거라면, 10개 할당 8번째에서 20번 더 간 곳을 참조하는거임 3차원 배열 : arr[10][10][10] -> 10개의 메모리가 10번 할당되고 그 메모리를 10번 할당
-
2015.10.28 [API] WPARAM , LPARAM
WPARAM : 어떤 키를 눌렀는지에 대한 정보를 가진다LPARAM : 보통 위치정보를 가진다
-
2015.10.26 [API] Graphics.DrawImage (Image*, INT x, INT y, INT srcx, INT srcy, INT srcwidh, INT srcheight, Unit) 함수 정리
Graphics.DrawImage(Image*, INT x, INT y, INT srcx, INT srcy, INT srcwidh, INT srcheight, Unit)함수 정리 하나의 이미지에 여러개의 스프라이트가 있을 경우, 스프라이트의 정보를 받아 이미지의 위치에 따라 출력하여 애니메이션 만들기 사용한 함수출처 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms536053(v=vs.85).aspx Graphics.DrawImage(Image*, INT x, INT y, INT srcx, INT srcy, INT srcwidh, INT srcheight, Unit) Image* : 이미지 소스 객체x : 화면 x 좌표 y : 화면 y 좌표sr..
[OpenGL] 기본 도형 그리기2015. 11. 26. 21:23
오픈지엘로 여러개 도형을 그리는 방법을 알아보자
///////////////////////////////////
기본
//////////////////////////////////
★ 도형 1개 그리기
ㄱ. 삼각형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <Windows.h> #include <gl/glut.h> #include <stdio.h> #include <conio.h> void DoDisplay(); void main() { glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); // glutMainLoop(); // } void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(0, 0.1); glVertex2f(-0.1, -0.1); glVertex2f(0.1, -0.1); glEnd(); glFlush(); } | cs |
glutDisplayFunc 함수로 실제 도형을 출력하는 함수(DoDisplay)를 등록합니다.
glutMainLoop 함수는 말 그대로 메인 루프(=무한반복)
GL_TRIANGLES : 말 그대로 삼각형을 그린다는 것 (세 개씩 연결한다)
glVertex2f(0, 0.1);
glVertex2f(-0.1, -0.1);
glVertex2f(0.1, -0.1);
이 부분은 원점을 피벗으로 하여, 크기가 0.1 인 삼각형을 그린 것이다.
2. 사각형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <Windows.h> #include <gl/glut.h> #include <stdio.h> #include <conio.h> void DoDisplay(); void main() { glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); // glutMainLoop(); // } void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(0.1, 0.1); glVertex2f(-0.1, 0.1); glVertex2f(-0.1, -0.1); glVertex2f(0.1, -0.1); glEnd(); glFlush(); } | cs |
GL_POLYGON : 연결된 다각형을 그린다는 의미
glVertex2f(0.1, 0.1);
glVertex2f(-0.1, 0.1);
glVertex2f(-0.1, -0.1);
glVertex2f(0.1, -0.1);
이 부분은 원점을 피벗으로 하여, 크기가 0.1 인 사각형을 그린 것이다.
3. 원
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <Windows.h> #include <gl/glut.h> #include <stdio.h> #include <conio.h> void DoDisplay(); void main() { glutCreateWindow("OpenGL"); glutDisplayFunc(DoDisplay); // glutMainLoop(); // } void DoDisplay() { glClear(GL_COLOR_BUFFER_BIT); float radius = 0.1; float angle = 3.141592 / 180 // 라디안 = 파이(==180), 파이 / 180 = 1도 int max_angle = 360; glBegin(GL_POLYGON); for (int i = 0; i < max_angle; i++) { float angle = i*angle1; glVertex2f((cos(angle)*radius), (sin(angle)* radius)); } glEnd(); glFlush(); } | cs |
원점을 기준으로
반지름은 0.1
각은 1도 : PI 는 라디안이다. 1라디안은 180도다.(PI=180), PI/180 = 1 => 1˚
가장 큰 각도의 값은 360
1도씩 증가시키면서 원을 그리는데
glVertex2f((cos(angle)*radius), (sin(angle)* radius));
이 부분은 삼각함수 항등식 개념을 사용한 것이다.
단위원을 생각해볼때
cosΘ = x / 1
1은 생략 가능하므로, cosΘ = x 를 의미
sinΘ = y / 1
1은 생략 가능하므로, sinΘ = y 를 의미
여기에
반지름 r
원점 O
임의의 점 P
라고 할 때,
cosΘ = x / r
sinΘ = y / r
이 식을 x 와 y 로 정리하면
x = cosΘ * r
y = sinΘ * r
그래서 glVertex2f((cos(angle)*radius), (sin(angle)* radius)); 를 사용
이외에는 여기서 응용
'(구) 자니..?' 카테고리의 다른 글
[퍼온 자료] Lua와 C 바인딩 (0) | 2018.10.25 |
---|---|
[Lua] 기초 : if 문법 / end expected near eof (0) | 2016.09.09 |
[OpenGL] 윈도우 좌표를 OpenGL 좌표로 변환하기 (1) | 2015.11.19 |
[OpenGL] 초기 설정 및 셋팅 (1) | 2015.10.24 |
[OpenGL] 윈도우 좌표를 OpenGL 좌표로 변환하기2015. 11. 19. 17:49
마우스 클릭한 위치로 도형을 이동시키거나 다시 그릴 때,
윈도우(디바이스) 좌표랑 OpenGL 좌표랑 달라서
값이 전혀 이상하게 들어가는 경우가 있다.
이런 경우, 윈도우 좌표를 OpenGL 좌표로 맞춰보자
*윈도우 좌표계
*OpenGL 좌표계
출처:soen
윈도우 클라이언트 창의 max 값 변수 winWidth, winHeight 변수가 있다고 가정할 때,
void convertDeviceXYOpenGLXY(int x, int y, float* ox, float* oy)
/* x,y : 윈도우 마우스 좌표 변수 , ox, oy : Open GL 좌표로 변환 후 저장할 변수 */
{
int w = winWidth;
int h = winHeight;
*ox = (float)(x - (float)w / 2.0)*(float)(1.0 / (float)(w / 2.0)));
*oy = -(float)(y - (float)h / 2.0)*(float)(1.0 / (float)(h / 2.0)));
}
cf. 변수가 전역변수일 경우에는 따로 매개변수로 함수를 지정할 필요가 없다.
출처 http://mtsparrow.blogspot.kr/2013/04/opengl.html
'(구) 자니..?' 카테고리의 다른 글
[퍼온 자료] Lua와 C 바인딩 (0) | 2018.10.25 |
---|---|
[Lua] 기초 : if 문법 / end expected near eof (0) | 2016.09.09 |
[OpenGL] 기본 도형 그리기 (0) | 2015.11.26 |
[OpenGL] 초기 설정 및 셋팅 (1) | 2015.10.24 |
배열 할당 : 메모리 상태2015. 11. 6. 00:40
배열은 메모리가 일자로 잡힌다.
배열의 인덱스는 참조하는 메모리를 의미한다
1차원 배열 : arr[10] -> 메모리가 1자로 10개 일자로 잡힘
2차원 배열 : arr[10][10] -> 10개의 메모리가 10번 일자로 잡힘
근데 인덱스가 [8][20] 이거라면, 10개 할당 8번째에서 20번 더 간 곳을 참조하는거임
3차원 배열 : arr[10][10][10] -> 10개의 메모리가 10번 할당되고 그 메모리를 10번 할당
'CS' 카테고리의 다른 글
컴퓨터와 프로그램 메모리 (0) | 2022.05.02 |
---|---|
메모리의 구조과 프로그램 완성과정 (0) | 2015.06.03 |
[API] WPARAM , LPARAM2015. 10. 28. 16:44
WPARAM : 어떤 키를 눌렀는지에 대한 정보를 가진다
LPARAM : 보통 위치정보를 가진다
'API · MFC' 카테고리의 다른 글
QueryPerformanceFrequency / QueryPerformanceCounter 사용 방법 (0) | 2018.08.14 |
---|---|
[API/GDI+] Graphics.DrawRectangle (0) | 2015.12.04 |
[API] Graphics.DrawImage (Image*, INT x, INT y, INT srcx, INT srcy, INT srcwidh, INT srcheight, Unit) 함수 정리 (0) | 2015.10.26 |
MultiByteToWideChar 함수의 이해와 사용법 (0) | 2015.10.16 |
[API] GetAsyncKeyState 함수 정리 (0) | 2015.09.24 |
[API] Graphics.DrawImage (Image*, INT x, INT y, INT srcx, INT srcy, INT srcwidh, INT srcheight, Unit) 함수 정리2015. 10. 26. 17:55
Graphics.DrawImage
(Image*, INT x, INT y, INT srcx, INT srcy, INT srcwidh, INT srcheight, Unit)
함수 정리
하나의 이미지에 여러개의 스프라이트가 있을 경우,
스프라이트의 정보를 받아 이미지의 위치에 따라 출력하여 애니메이션 만들기
사용한 함수
출처 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms536053(v=vs.85).aspx
Graphics.DrawImage
(Image*, INT x, INT y, INT srcx, INT srcy, INT srcwidh, INT srcheight, Unit)
<매개변수>
Image* : 이미지 소스 객체
x : 화면 x 좌표
y : 화면 y 좌표
srcx : 소스 이미지의 lect.left
srcy : 소스 이미지의 lect.top
srcwidh : 소스 이미지의 lect.right
srcheight : 소스 이미지의 lect.bottom
Unit : Gdiplus::Unit::UnitPixel
★★★
lect 의 right / bottom 은 위치값(position)이 아니라 너비, 높이를 의미한다!!
그래서 right, bottom 에는 위치값 (pos)를 스프라이트 정보로 주는 것이 아니라
left (pos) - right (pos) => 값 : 너비
top (pos) - bottom (pos) => 값 : 높이
값을 정보로 주어야한다!
왜냐하면
지정 x,y위치로부터 이만큼의 너비, 높이 만큼 출력할 것이다
라는 것이기 때문!!!!
★ left의 right, bottom은 position으로 계산할 수도 있지만,
너비, 높이를 의미할 수도 있습니다. 상황에 따라 다른점 유의! ★
'API · MFC' 카테고리의 다른 글
[API/GDI+] Graphics.DrawRectangle (0) | 2015.12.04 |
---|---|
[API] WPARAM , LPARAM (0) | 2015.10.28 |
MultiByteToWideChar 함수의 이해와 사용법 (0) | 2015.10.16 |
[API] GetAsyncKeyState 함수 정리 (0) | 2015.09.24 |
[API] 마우스 커서 위치 받아오기 (1) | 2015.09.24 |