본문 바로가기

프로그래밍

[맵툴] 11일차? 그동안 어설프게 토익공부를 했고, 결과도 안좋은지라... 시간도까먹고 하던것도 못했고 참 안타까웠으나, 하던걸 계속 이어해야한다는 생각에 다시 프로그래밍을 하였다. 오늘도 작업시간은 짧았지만 나름 진전이 보였기에 기분은 나쁘지않다. 최초의 화면, 일단 텍스쳐는 배제시켰고, 임시의 조명을 달았다. 메뉴에서 텍스쳐를 선택하면 텍스쳐가 저장되는 방식으로다가 담을 예정이기때문이다. 이제부터 와이어프레임으로 보겠다. 새로만들기 크기 35x35사이즈의 plane을 생성하고, 정점을 누르면 정점수정이 된다. 다음목표로는 브러쉬 형태를 삼아서 높이를 조율하는 방법으로 수정될것이다. 그동안 문제점이었던 화면 사이즈를 수정하였을 때 픽킹도 화면사이즈에 변화되어 수정이 되어야했다. 이부분에 대해서 아쉽지만, 디바이스 리셋을.. 더보기
D3D reSet 과 lostDevice을 고려하고 시작을 했어야 했는데........ 이것을 참고해서 밑바탕을 깔고 시작했어야 했는데........ 창 사이즈가 변경되서 픽킹이 제대로 안되는것, 전체화면에서 알트탭(?)으로 인하여 디바이스소실이 발생되는것 진짜 이런건 쉽게 넘어가서는 안되는 거같다. 더보기
d3d 라이트 조명의 수학적 계산 Microsoft® Direct3D® 의 조명 모델은, 앰비언트 라이트, 디퓨즈 라이트, 스펙큐러 라이트, 에미션(emission) 라이트를 대상으로 하는 것이다. 광범위한 조명 상황에 대응할 수 있는 충분한 유연성을 갖추고 있다. 장면(scene)내의 빛의 총량은,글로벌 일루미네이션으로 불려 다음의 방정식을 사용해 계산한다. 글로벌 일루미네이션 = 앰비언트 라이트 + 디퓨즈 라이트 + 스펙큐러 라이트 + 에미션(emission) 라이트 앰비언트 라이트는 균일한 조명이다. 모든 방향으로 균일해, 개체의 모든 픽셀에 같은 첨가한다. 단시간에 계산할 수 있지만, 개체는 평탄하고 리얼하게 안보인다. Direct3D 에 의한 앰비언트 라이트의 계산방법에 대해서는, 「앰비언트 라이트」를 참조할.. 더보기
[맵툴] 11일차 조명샘플추가 대략적으로 몇일간 텍스쳐와 조명을 집중적으로 다루게 되겠다. 더보기
[맵툴] 10일차분 재수정 10일차 문제제기과정중 띠두르기방식(트라이앵글스트립)을 포기 삼각형리스트로 재정리 아~~ 다시금 인덱스버퍼 for문하고 나름정리된 변수를 재수정했는데 참.. 머리가 나빠서인지 여러번 연습장에 그리고 그려서 결국 완성되었다. 트라이앵글스트립의 해결법을 알고도 이것을 적용하지못한 이유는...... 애초에 버텍스버퍼 설정할 때 각 버퍼값을 저장과 더불어 저 정점위의 픽킹영역까지 관리하는 저장컨테이너(STL-vector)을 넣는 방식으로다가 해버려서, 차라리 인덱스버퍼 두르기부분에서 약간의 수정과 더불어 삼각형리스트로 가는 방법이 낫겠다고 생각하였다. 음..... 그래도 퍼포먼스는 큰 차이가 없지만 애초에 계획이 살짝어긋난것에 대해 아쉽지만, 계속 한군데서 발목잡힐수야 없지. 더보기
문제점 발생 D3DPT_TRIANGLESTRIP 으로 그리는것이 D3DPT_TRIANGLELIST 보다 빠르다. 리스트가 정점 3개씩해서 삼각형을 하나 겨우 그리지만, 스트립은 정점 2개에 정점이 하나추가될때마다 삼각형이 하나씩 생겼기에 속도가 빠르다고 판단하였고, 작업을 진행하였는데.. 문제점 발생 1그림에서는 큰 문제가 없다. 2,3그림을 토대로 문제를 알수있는데.. 라인따라 한줄한줄그려주다가 다음 열로 넘어갈때 정점이 연결된다. 그래서 저런 엿가락모양이 생긴것이다. 사실 처음 계산할때 이럴것같더라니... 항상 오른쪽으로 비틀어서 봤으니 이걸 감지못했다. 해결방법모색 : 맨끝과 그리고 맨처음에 정점들을 하나씩 추가한다. 전에 친절히 알려주셨던 형님의 "무효화삼각형" 이걸 말씀하셨던거였구나...... 더보기
[맵툴] 8일차. 생각보다 많은 진도를 못나갔지만, 그래도 오늘 작업한 결과를 기록해본다. D3DX함수 시리즈중에서 관련 기하물체를 만드는 것이 있다. 그것을 셋업하고 렌더하는데 디테일한 설명은 생략하겠다. D3DXCreateBox, D3DXCreateSphere, D3DXCreateCylinder, D3DXCreateTeapot, D3DXCreatePolygon, D3DXCreateTours 등등.. 붉은 부분의 박스와 픽킹이 가능한 영역(바운드스피어)의 크기는 동일하다. 박스(메쉬데이터LPD3DXMESH),바운드스피어,위치정보가 구조체를 이뤄 STL로 관리해준다. 이거는 대략적으로 7일차에 기록해놓았기때문에 넘어가겠다. 일단은 테스트적으로 텍스쳐를 입혀보았고, 디렉션라이트를 적용해보았다. 프로그램을 짤 때 내 스타일은.. 더보기
Directx9.0c 버퍼관련.. 기하정보 저장 버퍼 버퍼사용 이유 배열이 아닌 버퍼에 저장하는 이유는 버퍼를 비디오 메모리에 저장할 수 있기 때문으로, 시스템 메모리의 데이터를 렌더링하는 것보다는 비디오 메모리의 데이터를 렌더링하는 것이 훨씬 빠르기 때문이다. 버텍스 버퍼 버텍스 데이터를 보관하는 연속적인 메모리 덩어리 HRESULT IDirect3DDevice9::CreateVertexBuffer( UNIT Length, //버퍼에 할당할 바이트 수 DWORD Usage, //버퍼가 이용되는 몇 가지 부가적인 특성 DWORD FVF, //버텍스 보관될 버텍스 포멧 D3DPOOL Pool, //버퍼가 위치할 메모리 풀 IDirect3DVertexBuffer9** ppVerTexBuffer, //만들어질 버텍스 버퍼를 받을 포인터 HAN.. 더보기
[맵툴] 7일차 그림1은 Plane평면 3x3을 생성한 후의 화면이다. 어떤 값을 가지는 셀이던 생성시에 버텍스와 육면체가 하나의 쌍이 되어져 그려진다 보면된다. 버텍스버퍼에 의해 정점값이 저장될 때, 육면체가 그려질 정보도 넣는다고 보면된다. 육면체가 있을 위치, 육면체 자체의 바운드박스, 육면체를 담을 LPD3DXMESH형의 데이터를 구조체로 담아 STL의 벡터를 이용했다.ㅡㅡ; (개인적으로 무리없다면 stl을 선호하기에...) 그림2는 그림1상태에서 육면체를 픽킹하면 그 육면체위치에 상주하고있는 버텍스와 연계되어... 1차적으로 육면체가 올라가고, 2차적으로 적절하게나마 정점값이 저장된 것과 육면체의 위치가 있는 데이터를 매칭하여 해당 정점을 올리거나 내려준다. 더보기
[맵툴] 6일차. 픽킹적용 및 픽킹으로 인한 지형 버텍스y축값도 올려봤다. 거의 샘플의 개념으로 접근이다. 곧할일.. 버텍스 0번을 보면 작은 점이 표시되어있는데, 이것은 육각형메쉬. 즉 정점위에 육각형메쉬를 올려놓았는데, 이 육각형메쉬는 정점과 하나의 짝을 이루어 피킹이 된 메쉬로 하여금 그 짝이되는 정점은 y축의 변화를 갖게 된다. y축의 변화를 갖는 정점에 의해서 메쉬도 정점따라 올라가야겠다. 고려사항 : 셀의갯수 (CX+1)*(CZ+1)의 버텍스를 갖는만큼, 이만큼의 메쉬도 가져야한다. 어짜피 이 지형툴은 지형정보를 저장하는데 목적을 둔다. 즉 저장부분에대해서는 정점정보가 중요하다. 정점위의 메쉬는 관계가 없다. 그렇기에 링크드리스트로 접근하건 stl로 접근하건 큰 문제가 없다고본다. 링크드리스트 : 가볍다. 신중.. 더보기