CS

CS/HCI 윈도우즈프로그래밍

[OpenGL] 17. Transformation (5) - Projection & Perspective Normalization

투상 (Projection) 3D 물체를 2D 평면에 사상하는 것을 말한다. 지난 글까지 각종 행렬 변환을 통해 ' Model 좌표계 → World 좌표계 → View 좌표계 ' 까지 변환했다면 이렇게 변환된 좌표계 위에 놓인 3D 물체를 2차원 화면에 사상하는 과정이다. 먼저 용어부터 정리하자. 1. 투상면, View Plane = Projection Plane 화면에 그리기 전 최종 변환된 좌표계 위 3D 물체를 투상하는 2D 화면을 의미한다. 물체 영상이 이 곳에 맺힌다. 2. 관찰자 위치, View Point, Eye Position, Camera Position 투상의 기준은 관찰자의 위치로부터 결정된다. 이 위치를 '시점 좌표' 라고 한다. 3. 투상 중심 (COP = Center Of Pro..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 16. Transport Layer (2) : UDP

UDP user datagram protocol RFC 768 에 정의된 매우 오래된 프로토콜이다. 트랜스포트 계층이지만, 네트워크 계층에서 포트만 더해주기 때문에, 데이터그램이라는 네트워크 계층 전송단위를 그대로 사용하기도 한다. 네트워크 계층과 동일한 서비스 모델을 제공한다. 따라서 UDP 세그먼트는 중간에 유실되더라도 복구하거나 재전송하는 서비스는 없다. send 순서와 receive 순서가 동일하다는 보장도 하지 않는다. UDP 장점 1. connectionless 미리 연결을 설정할 필요가 없어서 오버헤드 시간이 절약된다 연결 설정이 없다는 말은, 같은 목적지로 보내는 같은 내용의 세그먼트도 모두 독립적으로 여긴다는 특징이 있다. TCP와 달리 RTT 딜레이가 없다. 2. stateless se..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 15. Transport Layer (1) : 트랜스포트 계층 개요

Transport Layer가 제공하는 서비스 트랜스포트 계층은 어플리케이션 계층과 네트워크 계층 사이에 존재한다. 1장에서 공부했던 레이어 개념을 다시 생각해보면, 트랜스포트 계층은 네트워크 계층이 제공하는 서비스를 이용하여 어플리케이션 계층에 서비스를 제공한다고 볼 수 있다. 그렇다면 트랜스포트 계층은 어떤 서비스를 제공해야 할까? 간단히 말해서 process to process 커뮤니케이션 기능을 제공한다. 프로세스와 프로세스가 통신하기 위해서는 그 프로세스가 실행되는 컴퓨터와 컴퓨터 사이 통신이 제공되어야 하는데, 이 서비스는 네트워크 계층에서 제공한다. 또는 이 서비스를 logical communication 이라고도 한다. 서로 다른 두 호스트 사이에 어플리케이션 프로세스가 존재하는데, 그 프..

CS/컴퓨터 구조

[컴퓨터 구조] 13. Single Cycle MIPS - Execute

MIPS CPU의 Execute 단계가 어떻게 실행되는지 명령어의 기능에 따라 구분하여 정리하였다. 산술/논리 연산자 실행 add, sub, addi, or, and 와 같은 명령어를 실행하는 과정을 먼저 생각해보자. 우선 위 연산을 실질적으로 실행하는 유닛은 ALU 라는 유닛이 수행한다. 산술 연산과 직접적으로 관련된 명령어 포맷은 R 포맷과 I 포맷 밖에 없다. R 포맷은 모든 피연산자가 레지스터고, 연산 결과가 레지스터로 들어간다. I 포맷은 피연산자가 하나는 레지스터, 하나는 상수고, 연산 결과가 레지스터로 들어간다. 우선 피연산자 하나는 반드시 레지스터에서 오고, 연산 결과는 레지스터로 들어가는 것이 동일하므로 아래와 같이 그릴 수 있다. 이제 결정해야 하는 것은 R 포맷이면 레지스터로부터 AL..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 14. Application Layer (7) : Socket Programming

소켓 소켓은 인터넷 어플리케이션을 개발할 때, 4계층이 제공하는 서비스를 이용할 수 있는 일종의 API 이다. 소켓을 이용하면 클라이언트 / 서버 어플리케이션을 만들 수 있다. 그리고 멀리 떨어진 두 프로세스는 소켓을 이용해서 서로 통신할 수 있다. 소켓을 사용하면 어플리케이션 계층에서 짤 비즈니스 로직에만 집중하고, 데이터가 어떻게 전송되는지는 신경쓰지 않아도 된다. 소켓에는 크게 UDP 소켓과 TCP 소켓이 있다. UDP, TCP는 4계층의 프로토콜로, UDP는 신뢰성을 보장하지 않지만, 빠르고 가벼운 프로토콜이고 TCP는 경우에 따라 느려지기도 하고 무겁지만, 신뢰성을 보장해주는 byte stream-oriented (바이트 단위 전송) 프로토콜이다. 바이트 단위 전송이라는 뜻은 TCP가 어플리케이..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 16. Transformation (4) - 셰이더에 행렬 변환 적용하기

이번 글에서는 셰이더에 행렬 변환을 적용해보려고 한다. 이 예제로 한번 사람의 팔과 비슷하게 동작하는 프로그램을 작성해보려고 한다. 키보드를 눌러 각도를 조작하면 팔이 회전할 수 있다. 팔의 회전은 상박따로, 하박 따로 회전한다. 기본 코드 틀 #include #include #include "Shader.h" #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" #include #include #include float vertice[] { -0.3, -0.2, 1.0, // left - bottom +0.3, -0.2, 1.0, // right - bottom -0.3, +0.0, 1.0, // left - top +0.3, +0.0, 1.0, // ri..

CS/컴퓨터 구조

[컴퓨터 구조] 12. Single Cycle MIPS - Decode

MIPS Decode 회로 지난 글에 이어 MIPS의 Decode 회로를 설계해보자. Decode 과정은 명령어를 해석하는 과정이다. 명령어를 실행하려면 크게 2가지 정보를 알아야 한다. 1. 무슨 명령어인가? ( = 연산자 정보) 2. 무엇을 가지고 실행하는가? ( = 피연산자 정보) MIPS 명령어는 포맷별로 아래와 같은 형태를 갖추고 있다. 3가지 포맷은 모두 공통적으로 6bit 크기의 opcode 필드를 갖고 있다. 이 opcode를 통해서 지금 주어진 명령어가 어떤 명령어인지 식별한다. R 포맷은 opcode 에 더해 function 필드 정보를 조합하여 실행할 명령어를 식별한다. 그리고 opcode 와 funct 를 제외한 나머지 필드가 모두 피연산자로서 활용하는 필드가 된다. 우선 J 포맷은..

CS/컴퓨터 구조

[컴퓨터 구조] 11. Single Cycle MIPS - Fetch

Fetch 회로도 fetch는 명령어를 가져오는 과정이다. 명령어를 가져올 때, 컴퓨터는 PC (Program Counter) 라는 특별한 레지스터를 이용한다. 이 레지스터에는 현재 실행할 명령어가 메모리 어디에 담겨있는지, 그 주소값이 담겨있다. 컴퓨터가 처음 실행되면, PC는 0으로 초기화되고, 메모리 0번지에 있는 명령어를 가져와 실행할 것이다. 하나의 명령어를 실행한 이후에는, 다음 명령어를 실행하기 위해 PC 값을 4 증가시킨다. (32bit 시스템 기준) 이 과정이 점프나 분기가 없는, 순차적으로 실행되는 프로그램 기준 Fetch 의 과정이다. 이를 회로도로 그려보자. 먼저 CPU 공간과 명령어를 가져오는 메모리 공간을 따로 그려보자. CPU 안에는 PC 라는 특별한 레지스터가 있다. 32bi..

CS/프로그래밍언어론

[프로그래밍언어론] 7. Parsing Problem

파서의 목표는 소스코드를 받아서 파싱을 한 뒤, Parse Tree 를 만드는 것이다.만약 파싱하다가 실패했다면 소스코드에서 문법에 맞지 않는 부분이 있었다는 뜻이므로,파서는 syntax error 가 발생했다는 걸 알려줘야 한다. 잘 동작하는 파서는 파싱할 때 토큰 1개를 더 앞서 볼 수 있다. (look ahead, LA)그래야 알맞는 BNF 문법을 체크할 수 있다. 파서에는 2가지 카테고리가 있다.첫번째는 탑-다운 / 두번째는 바텀-업 이다.탑 - 다운 파서탑-다운 파서는 root 부터 시작해서 아래로 내려가면서 파스 트리를 만든다.탑-다운 파서는 왼쪽에서부터 파고들어 본다. (즉 pre-order 순으로 파싱트리를 만든다.)xAα 라는 sentential form 이 주어..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 15. Transformation (3) - GLM 사용하기

이제 지금까지 정리한 변환을 실제 코드로 구현해보려고 한다. OpenGL 과 관련하여 행렬 연산을 간편하게 지원하는 glm 라이브러리를 사용하면 편하게 행렬을 만들고 연산할 수 있다. https://github.com/g-truc/glm GitHub - g-truc/glm: OpenGL Mathematics (GLM) OpenGL Mathematics (GLM). Contribute to g-truc/glm development by creating an account on GitHub. github.com 우선 위 깃허브에 가서 최신버전의 glm 을 다운받는다. 다운받은 glm 파일은 외부 include 디렉터리로 꼭 등록해주자. 이제 glm 을 사용하여 행렬연산을 할 수 있다. 이때는 위와 같은 헤더..

에버듀
'CS' 카테고리의 글 목록 (2 Page)