2015. 8. 11. 14:33

"rtsp://127.0.0.1:8554/testStream"


* Innosetup command


D:\publish\${JOB_NAME}\${GIT_BRANCH}\${BUILD_NUMBER}-${GIT_COMMIT}\x86


copy latest\CameraViewer\Release\*.exe latest\SetupFile

copy latest\live555Sample\win32\ProxyServer\Release\*.exe latest\SetupFile

copy latest\live555Sample\win32\ProxyServer\Release\*.dll latest\SetupFile

del /f /s /q Output

"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" ojt_md.iss /dMyBuildNumber="%BUILD_NUMBER%"


* DirectDraw 순서


1. LPDIRECTDRAW 객체를 선언하고 DirectDrawCreate( )를 호출한다.

2. 윈도우 모드를 위해 협력 수준을 정한다. SetCooperativeLevel( )

3. 디스플레이 모드를 정한다. SetDisplayMode( )

4. 주요 평면을 생성한다. CreateSurface( )

5. 배경 평면을 생성한다. GetAttachedSurface( )



* 리눅스 순서


1. CentOS 설치

2. 이더넷 설치

3. SSH 설치

4. Samba 설치

5. g++ 설치

6. Hello world 출력


* WebRTC 책 이름


Getting Started with WebRTC

WebRTC Blueprints

Browser Networking

WebRTC Integrator's Guide

WebRTC Cookbook

Real-time communication with WebRTC

WebRTC: APIs and WebRTC Protocols


* 리눅스 주소


http://kldp.org

http://man.kldp.org/wiki

http://debianusers.org/

http://www.gnome.or.kr

http://www.suse.or.kr

http://www.ubuntu.or.k


* 리눅스 명령어


yum install net-tools

service network restart

g++ -c : no entire program - just object

g++ -o : 실행 파일의 경로와 이름을 알려주는 용도

이 옵션을 생략하면 컴파일러는 a.out 파일 생성


jQuery 명령어들의 리스트

getElementByID('myUser')

<head>

<meta charset="UTF-8"/>

<script src="greeting.js"></script>

jQuery : 1. jQuery의 로직을 쓰기 위해 

jQuery의 자바스크립트 파일을 

자신의 웹페이지로 가져와야 함

jQuery의 자바스크립트 코드 다운 받아 읽어옴

2. API documentation


2015. 8. 11. 11:47
1. 다음 사이트로 들어가서 MongoDB를 다운받아 설치한다

 

2. 커맨드 창을 띄우고 MongoDB가 설치된 폴더로 이동한다

  • 일반적으로 C:\Program Files\MongoDB\Server\3.0\bin 에 있다(mongo.exe가 있는 디렉토리)

3. 데이터를 저장할 폴더를 생성하고 경로를 설정한다

  • 여기서 테스트로 C:\data\book 폴더를 설정하고 경로를 다음과 같이 입력한다
  • mongod --dbpath c:/data/book




  • 경로를 설정하면 waiting for connections 라는 문구가 마지막에 나오고 대기 상태로 있다


  • 잘 생성이 되었으면 c:/data/book 경로에 다음과 같은 파일이 생성된다

4. 새로운 커맨드 창을 띄우고 mongo.exe 가 있는 디렉토리로 이동한 후 mongo 명령어를 입력하여 Mongo 쉘로 들어간다


  • connecting to: test 라고 뜨는데 디폴트로 test db가 생성되고 아무 명령어도 안 치면 여기에 데이터가 저장됨

5. book DB 를 사용하기 위해 use book 명령어 입력

  • db book 으로 변경되었다고 나온다

6. book DB 로 변경 후 member와 page에 데이터를 4개씩 8개 생성

> db.member.insert({name:"Kim hayoung", age:29, skill:["Java", "Oracle"]});

> db.member.insert({name:"Park sumin", age:27, skill:["Node.js", "Express"]});

> db.member.insert({name:"Lee naeun", age:31, skill:["MongoDB", "Elastic"]});

> db.member.insert({name:"Hong jinho", age:33, skill:["Linux", "Phthon"]});

> db.page.insert({number:"243", year:2011});

> db.page.insert({number:"216", year:2013});

> db.page.insert({number:"142", year:2015});

> db.page.insert({number:"72", year:2014});

  • 위의 그림은 page 입력 후 insert를 입력하지 않아 에러가 난 것이다

7. 잘 생성되었는지 확인해본다

> db.member.find()

> db.page.find()

> show collections

8. book 폴더에 local db와 book db가 생성된 것을 확인


위와 같은 결과가 나오면 일단 MongoDB 생성은 성공이다



2015. 8. 7. 17:22

cbuffer cbPerOjbect

{

float4x4 gWorldViewProj;

};


cbuffer 형식의 객체 cbPerObject를 정의한다. 상수 버퍼(constant buffer)는 셰이더가 접근할 수 있는 다양한 자료를 저장하는 유연한 자료 블록이다.

지금 예의 상수 버퍼는 gWorldViewProj라는 4 x 4 행렬 하나만 저장한다.

이 행렬은 한 점을 국소 공간에서 동차 절단 공간으로 변환하는 데 쓰이는, 세계, 시야, 투영 행렬을 하나로 결합한 것이다

HLSL은 4 x 4 행렬을 위한 내장 형식 float4x4를 제공한다. 그 외에도 여러 행렬 형식이 있는데, 예를 들어 3 x 4 행렬이나 2 x 2 행렬을 선언하려면 float3x4 형식이나 float2x2 형식을 사용하면 된다.


상수 버퍼의 자료는 정점마다 바뀌는 것이 아니다. 그러나 C++ 응용 프로그램은 효과 프레임워크를 통해서 상수 버퍼의 내용을 실행시점에서 변경할 수 있다. 예를 들어 세계 행렬은 물체마다 다르므로 세계, 시야, 투영 행렬이 결합된 행렬도 물체마다 달라야 한다. 따라서 앞에 나온 정점 셰이더로 여러 개의 물체를 그리는 경우 각 물체를 그리기 전에 gWorldViewProj 변수를 적절히 갱신해 주어야 한다

- 내용을 얼마나 자주 갱신할 것인지

- 상수 버퍼를 나누어 만들라는 것인지

에 근거해서 상수 버퍼를 나누어 만들라는 것이다

2015. 8. 7. 16:52

다음은 간단한 정점 셰이더의 구현 코드이다


cbuffer cbPerObject

{

float4x4 gWorldViewProj;

};


void VS(float3 iPosL : POSITION,

  float4 iColor : COLOR,

  out float4 oPosH : SV_POSITION,

  out float4 oColor : COLOR)

{

// 동차 절단 공간으로 변환한다

oPosH = mul(float4(iPosL, 1.0f), gWorldViewProj);


// 정점 색상을 그대로 픽셀 셰이더에 전달한다

oColor = iColor;

}


하나의 정점 셰이더는 본질적으로 하나의 함수이다.

지금 예의 정점 셰이더는 매개변수가 4개인데, 처음 둘은 입력 매개변수이고 나머지 둘은 out 키워드가 붙어있으므로 출력 매개변수이다.

HLSL에는 참조나 포인터가 없으므로, 함수가 여러 개의 값들을 돌려주려면 구조체를 사용하거나 이처럼 out이 지정된 출력 매개변수를 사용해야 한다.

정점 셰이더의 처음 두 입력 매개변수는 정점 셰이더의 입력 서명을 형성하며, 커스텀 정점 구조체의 자료 멤버들에 대응된다. 매개변수 의미소: POSITION과 :COLOR는 정점 구조체의 멤버들을 정점 셰이더 입력 매개변수들에 대응시키는 역할을 한다.

출력 매개변수에도 의미소가 부여되어 있다. 이들은 정점 셰이더의 출력을 파이프라인의 다음단계(기하 셰이더, 픽셀 셰이더)의 해당 입력에 대응시키는 역할을 한다. SV_POSITION 의미소는 특별한 의미소임을 주목할 것. SV는 이것이 system value(시스템 값) 의미소입을 뜻한다.


행렬 변수 gWorldViewProj는 상수 버퍼에 있는 것인데, 상수 버퍼에 대해서는 다음 절에서 이야기하겠다.

mul은 HLSL의 내장함수로, 벡터, 행렬의 곱셈을 수행한다. 


다음은 이 정점 셰이더와 정확히 같은 일을 하는 정점 셰이더로, 다른 점은 반환 형식과 입력 서명에 구조체들을 사용한다는 것


cbuffer cbPerObject

{

float4x4 gWorldViewProj;

};


struct VertexIn

{

float3 PosL : POSITION;

float4 Color : COLOR;

};


struct VertexOut

{

float4 PosH : SV_POSITION;

float4 Color : COLOR;

};


VertexOut VS(VertexIn vin)

{

VertexOut vout;


// 동차 절단 공간으로 변환

vout.PosH = mul(float(vin.PosL, 1.0f), gWorldViewProj);


// 정점 색상을 그대로 픽셀 셰이더에 전달

vout.Color = vin.Color;


return vout;

}


* 참고

- 기하 셰이더를 사용하지 않는다면 정점 셰이더에서 투영 변환을 반드시 수행해야 한다. 기하 셰이더가 쓰이지 않는 경우 하드웨어는 정점 셰이더를 떠난 정점이 동차 절단 공간에 있다고 가정하기 때문이다. 기하 셰이더를 사용하는 경우에는 투영 변환을 기하 셰이더에게 미룰 수 있다.


* 참고

- 정점 셰이더(또는 기하 셰이더)가 원근 나누기까지 수행하지는 말아야 한다. 투영 행렬을 곱하는 부분만 책임지면 된다. 원근 나누기는 나중에 하드웨어가 수행한다.







2015. 8. 7. 16:23

GPU가 정점 배열에 접근할 수 있으려면 배열의 정점들을 버퍼라고 부르는 특별한 자원에 담아 두어야 한다. Direct3D 코드에서 버퍼는 ID3D11Buffer 인터페이스로 대표된다.


정점들을 담는 버퍼를 정점 버퍼라고 부른다. Direct3D의 버퍼들은 자료를 담을 뿐만 아니라, CPU나 GPU가 자료에 어떻게 접근할 수 있고 버퍼가 파이프라인의 어디에 묶이는지에 대한 정보도 가진다.

정점 버퍼를 생성하려면 다음과 같은 과정을 거쳐야 한다.

1. 생성할 버퍼를 서술하는 D3D11_BUFFER_DESC 구조체를 채운다.

2. 버퍼의 초기화에 사용할 자료를 서술하는 D3D11_SUBRESOURCE_DATA 구조체를 채운다

3. ID3D11Device::CreateBuffer를 호출해서 버퍼를 생성한다.