Loading...
2017. 10. 15. 00:41

12. point, vector, ray, box, matrix, transform

Point : 점. 위치값. 3d 좌표일 경우 (x,y,z,1)로 w 컴포넌트를 1로 두어 벡터와 구분한다. (동차좌표계)계산 편의를 위해 연산자 오버로딩 제공Vector : 벡터, 방향와 크기값. 3d 좌표일 경우 (x,y,z,0)로 w 컴포넌트를 0으로 두어 점과 구분한다. (동차좌표계)계산 편의를 위해 연산자 오버로딩 제공Length, Swap, Normalize, Scale, Dot, Angle, IsThereFront(가시성 판단), Projection, Cross 제공Ray : 원점과 방향이 지정된 반 무한의 선. 광선은 스칼라값 t의 함수로 광선이 지나가는 점의 집합.물체와의 교차를 체크, 모션블러를 위한 시각값, 반사 횟수 제한을 위한 depth값이 필요하다.Box : 물체를 둘러싸는 경계..

2016. 6. 17. 23:07

shader 구조를 대략 만들고 결과물을 띄웠다.

그냥 x파일을 로드해서 띄움.셰이더 구조와 엔진 구조를 짜는데 시간이 좀 걸렸음.내일부터는 기존에 해 뒀던 자체포맷, 케릭터 애니메이션 관련 작업을 다시 정리하면서 붙여야 겠다. 이 결과물을 얻기 까지 삽질이 너무 많았다. ㅜㅜ.그냥 몇년동안 작업하던 자체엔진 소스를 통채로 날리고 새로 짜는데 기억도 안나고 죽겠다...마음에 안들어도 그냥 기존거 수정으로 갈걸그랬나벼.... 완료1. dxut를 쓰지 않는 멀티 플랫폼 엔진 기본 구조2. dx shader(hlsl)을 사용하는 dx9용 셰이더 기본 파서.3. 벡터, 행렬, 트렌스폼 관련 라이브러리 제작. 해야할 거.1. 버텍스, 인덱스 구조2. 케릭터 구조 (엔진상에서 어떻게 관리할 건지) 생각중인것.1. 셰이더 고치고 fxo 컴파일 하고....이거 너무 ..

static function 실수

물체를 열심히 찍는데 물체가 안보인다....머지?? 상단에서는 graphic api 독립적이고 camera도 상단에 붙어있어서dx 라이브러리는 안쓴다.하단에서 dx9을 쓴다면 자체 api를 dx9로 바꿔주는 함수들을 제공한다.그런데 행렬의 곱셈에서 삽질을 했다. // 행렬 곱static MgMatrix4x4 Mul(const MgMatrix4x4 &m1, const MgMatrix4x4 &m2) {MgMatrix4x4 r;for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){r.m[i][j] = m1.m[i][0] * m2.m[0][j] +m1.m[i][1] * m2.m[1][j] +m1.m[i][2] * m2.m[2][j] +m1.m[i][3] * m2.m..

하루동안 삽질한 버그.

메모리가 자꾸 샌다.어디일까 싶어서 _CrtSetBreakAlloc(); 와 vld를 사용했는데 정확한 위치는 안나옴.그래서 기존에 추가한거 하나씩 빼면서 했는데도 절반정도 제거함. 마지막 해결은 결국 내가 실수한 컨버팅 때문이었다. 우선 각각의 manager들을 managerList_ 에 넣어두고 종료시에 이 managerList_ 에 있는manager들을 지워주는데 이렇게 했었다. for(int index=cnt-1; index>= 0; --index){((MgManagerBase*)managerList_[index])->Destroy();delete managerList_[index];}managerList_는 void* 를 담고있고 모든 manager들은 MgManagerBase를 상속받는다.그래..

10. shader compile (fxo)

컴파일 부하를 줄이고 원본 셰이더를 숨기기 위해 fxo 사용. 배치파일을 만들어서 사용하면 편하다.배치파일의 내용은 아래와 같다. xc -nologo /Tfx_2_0 /Fo"생성파일경로\파일.fxo" "원본파일경로\파일.fx"pause /T : 셰이더 버전./Fo : 오브젝트 파일을 생성 만약 /Fh로 하면 헤더파일을 출력한다. 이 경우에는 결과파일은 파일.fxh로 해야 한다. Reference Link- http://blog.naver.com/sorkelf/40142758648

9. 유니코드

유니코드로 작업을 해야할지 멀티바이트로 작업을 해야할지 고민에 대한 고민. 처음 자체엔진을 만들때는 멀티바이트를 사용하였고두번째 자체엔진을 만들때는 유니코드를 사용하였다. 멀티바이트 코드 : 문자 하나의 길이를 다양하게 처리. 숫자나 영문자나 인용부호는 1바이트, 그 이외 한글이나 중국어, 일본어등의 글자는 2바이트로 표현. 1바이트와 2바이트 값을 구분하기 위해 2바이트는 무조건 128(0x80)이후의 값으로 시작. 유니코드 : 각각의 문자에 유니크한 값을 주어 모든 문자는 동일한 길이를 지닌다. (2byte) 유니코드 탄생 배경 : 몇몇 언어와 글쓰기 방법이 상당히 많은 문자들로 구성되어 있어서 1바이트의 최대값인 256의 경우의 수를 초과한다는 문제점이 있다. 이 문제의 해결방안으로 제시된 것이 유..

8. application

현재 구조 assert - 컴파일 assert- 런타임 assert- 무결성 체크 | core - math - geometry- transform- memory- device (렌더러 기본 포맷) | application (툴이나 클라이언트의 기본을 만들어 주는 녀석)- renderapi 지원 - dx9 (현재 작업중) - dx10 - dx11 - dx12 (visual studio를 변경해야 할 듯) - opengl- window type 지원 - winth dxut (dx일 경우 내부 call용) - window api (클라이언트용) - mfc (tool 용) rendererX9 (dx9용 렌더러)- core의 device 상속 rendererX10 (dx10용 렌더러)- core의 device 상..

6. 그래픽스 api

opengl은 아예 배제하고 dx9과 dx11을 지원하도록 한다.이전에 dx9, dx10 지원하는 엔진을 개발했을 때 만든 라이브러리를 재사용 할 예정.이번에도 dxut 기반으로 제작한다. dxut 붙이면서 발생했던 에러1. error C4996: 'GetVersionExA': was declared deprecated error C4996: 'GetVersionExW' was declared deprecated비추하는거 사용할 경우 발생.해결방법- 걍 프로젝트상에서 무시. 프로젝트 속성/c c++/ 일반/ sdl 체크에서 꺼주던지 하면된다.- 해당 에러 disable. #pragma warning(push) #pragma warning(disable: 4996) #include "multimon.h" ..