분류 전체보기

    DirectX와 HLSL간의 행렬 순서와 연산

    예제 프로그램의 셰이더 코드에서는 'World * View * Projection' 순으로 행렬연산을 수행하는게, 내 프로그램에서는 'Project * View * World' 순으로 연산해야 정상적인 결과가 나왔기 때문이다. 컴퓨터에서 다차원 배열로 행렬을 구성할 때, 행렬을 어떤 순서로 접근할 것인지에 대한 순서가 있다. DirectX에서는 행렬 순서가 row-major(행우선)이고, HLSL에서는 column-major(열우선)이다. 위와 같이 행렬을 접근하는 순서가 다르기 때문에, 사용하는 라이브러리에 명시된 순서를 확인하고 그에 맞게 연산을 하지 않으면 제대로 된 결과가 나오지 않는다. 서로간의 행렬 순서가 달랐기 때문에, DirectX에서는 'World * View * Projection' 순..

    [DX11] 튜토리얼 2 - 삼각형 렌더링

    우선적으로 봐야할게 ID3D11DeviceContext*에 대한 포인터 변수다 / 디바이스 컨텍스트란? 디스플레이 또는 프린터와 같은 디바이스의 그리기 특성에 대한 정보를 포함하는 Windows 데이터 구조다. 모든 그리기 호출은 선, 도형 및 텍스트를 그리기 위해 Windows API를 캡슐화하는 디바이스 컨텍스트 개체를 통해 수행된다. ID3D11DeviceContext* g_pImmediateContext = NULL; 아래는 InitDevice 함수에 해당하는 내 / 렌더 타겟 뷰 개념 참조 // 하나 이상의 렌더링 대상을 원자성으로 바인딩하고 깊이 스텐실 버퍼를 // 출력-병합 단계에 바인딩합니다. g_pImmediateContext->OMSetRenderTargets( 1, &g_pRender..

    DirectX 렌더 대상 뷰 (RTV) 생성

    Direct3D는 자원 자체를 직접 파이프라인의 단계에 묶지 않는다. 대신 반드시 자원에 대한 뷰(서술자)를 생성해서 그 뷰를 파이프라인 단계에 묶어야 한다. 특히 후면 버퍼를 파이프라인의 출력 병합기(Output Merger) 단계에 묶으려면(그래야 Direct3D가 장면을 후면 버퍼에 렌더링 할 수 있다.) 후면 버퍼에 대한 렌더 대상 뷰를 생성해야 한다. 우선 할 일은 교환 사슬에 저장되어 있는 버퍼 자원을 얻는 것인데, 이를 위해 다음과 같은 메서드를 사용한다. HRESULT IDXGISwapChain::GetBuffer( UINT Buffer, REFIID riid, void **ppSurface ); 1. Buffer: 얻고자 하는 특정 후면 버퍼를 식별하는 색인(교환 사슬에 버퍼가 여러 개 ..

    [DX11 물방울책] 챕터 7 - 광원

    7.0 개념 왼쪽 동그라미는 광원이 꺼져있어서 2D처럼 보인다 그에 반해 오른쪽 동그라미는 광원과 그림자가 추가되었기 때문에 3D처럼 인식된다. 이 모델에선 광원이 다양한 색상을 비추기 위해 rgb 색상 중 임의의 밝기로 조절할 수 있다. 빛이 어떠한 물체와 충돌 시 그 빛은 흡수 후 반사 되고 그렇게 소멸된다. 로컬 광원은 밝기의 중점이 물체에 있고, 각기 다른 밝기를 가지고있고 다른 물체와 독립적이다. 글로벌 광원은 각 물체의 밝기를 고려할 뿐만 아니라 전체 씬의 존재하는 오브젝트의 반사되는 빛 또한 고려한다. 상대적으로 비용이 매우 비싸며 이를 보완하기 위해 계속해서 연구 중에 있다. 7.2 단일 벡터 면이라는건 하나의 물체가 바라보고 있는 방향을 뜻한다. 표면이라는건 땅으로부터 바라보고 있는 방향..

    Ambient and Diffuse Lighting / 환경 및 반사되는 광원

    보통은 물체마다 '고유한'색이 있다고 생각한다. 하지만 엄밀히 물체는 광원으로부터 빛을 반사할 뿐이고 그 반사된 빛이 적색계열에 민감한 L형, 녹색계열에 민감한 M형, 청색계열에 민감한 S형 원추세포들의 반응에 따라 색을 구분한다. 그래서 광원의 세기, 색 등에 따라 물체의 색은 달라질수있다. 컴퓨터에서도 원추세포들처럼 R, G, B값들의 조합에 따라 색을 표현한다. 빛을 컴퓨터상에서 표현할때 주로 rasterization과 ray tracing방식을 쓴다. ray tracing방식은 계산비용이 커서 게임과 같은 실시간 렌더링에서는 쓰지 않는다. (하드웨어의 발전으로 요새는 차차 쓰인다고 한다.) 그래서 rasterization방식을 이용하여 빛을 그리고 색을 표현해볼 것이다. 빛의 종류 빛은 크게 3가..

    데드 레커닝 - 온라인 게임의 이동처리 기법

    현재 3D 온라인 게임 프로젝트에서 게임서버를 제작하면서 미처 예상하지 못한 부분에서 많은 문제들이 있다 그 중 캐릭터의 이동처리 부분이고 해결해 나가면서 큰 도움이 되고 있다. 사용자가 키보드를 이용한 방향키 입력으로 이동 패킷을 서버에 보내주고 그것을 서버에서는 브로드캐스트로 뿌려주는 가장 기본적이고 간단한 방법이 있지만 60프레임으로 돌아가는 게임이라고 한다면 1초에 60번이나 이동에 대한 패킷을 보내고 받게 됨으로 엄청난 서버 부하를 가져오게 된다. 이를 해결하기 위해선 기존 상태를 계속 유지하고 있다면 일정한 규칙을 가진 행동을 반복하고 있을테니 패킷을 보내지 않고 같은 처리를 계속 하도록 하고, 상태의 변화가 있을때만 패킷을 보내서 상태변화를 알리게 되면 서버는 이를 브로드캐스트하여 다른 클라..

    [React] 리스트 List

    const numbers = [1, 2, 3, 4]; const exponentialNumbers = numbers.map(function (number) { return number * number; }); console.log(exponentialNumbers); // [1, 4, 9, 16] src/App.jsx import * as React from 'react'; const list = [ { title: 'React', url: 'https://reactjs.org/', author: 'Jordan Walke', num_comments: 3, points: 4, objectID: 0, }, { title: 'Redux', url: 'https://redux.js.org/', author: '..

    [React] 리액트 .js vs .jsx 차이점

    정의 jsx는 JavaScript 확장 문법 JavaScript안에서 HTML 사용 가능 jsx 사용이 필수는 아니지만 추천 (리액트 공식 홈페이지 - 문서 - JSX 소개 탭) 기능적인 차이는 없으나 팀 내 협의의 문제 .jsx란? JSX는 JavaScript XML의 약자로 자바스크립트에서 XML을 추가한 확장형 문법이다. 큰 특징은 자바스크립트에서 HTML 문법을 사용할 수 있다는 점이고 주로 리액트나 다른 프론트엔드 프레임워크에서도 사용이 가능하다. // jsx const element = Hello, world!; .js vs .jsx // JS class Hello extends React.Component { render() { return React.createElement("div", n..

    [React] 다양한 방법으로 Hello World 띄우기

    App.jsx 파일 내 수정 import * as React from 'react'; const title = 'World'; function App() { return ( Hello {title} ); } export default App; 검색창 띄우기 import * as React from 'react'; const title = 'World'; function App() { return ( Hello {title} // 여긴 검색창 띄우기 용도 Search: ); } export default App; 리액트 구조) 코드 > 내부 작업 > 브라우저에 띄 아래는 구조체 사용 import * as React from 'react'; const welcome = { greeting: 'Hey', ti..

    Select 모델

    Select 모델은 select() 함수가 핵심 역할을 한다는 뜻에서 붙인 이름이다. Select 모델을 사용하면 소켓 모드(블로킹, 넌블로킹)에 관계없이 여러 소켓을 한 스레드로 처리할 수 있다. Select 모델의 동작 원리 Select 모델을 사용하면 소켓 함수 호출이 성공할 수 있는 시점을 미리 알 수 있다. 따라서 소켓 함수 호출 시 조건이 만족되지 않아 생기는 문제를 해결할 수 있다. 소켓 모드에 따른 Select 모델의 사용 효과는 다음과 같다. 블로킹 소켓(blocking socket): 소켓 함수 호출 시 조건이 만족되지 않아 블로킹되는 상황을 막을 수 있다. 넌블로킹 소켓(nonblocking socket): 소켓 함수 호출 시 조건이 만족되지 않아 나중에 다시 호출해야하는 상황을 막을..