메쉬하나 불러와서 띄워봤는데 평소엔 잘작동하던 깊이버퍼가 작동않하는겁니다..멍미;;
프로그래밍하면서 이렇게 길게 하나가지고 끌어본적이업... 간단한걸수록 한번 헤메면 답이않서더라구요.
그리하려 깊이버퍼 (z버퍼 혹은w버퍼) 작동않할때의 대처법들에 대해서 나열해보겠습니다.

일단 D3D프로그래밍을 배울땐 DIRECT_DEBUG 플래그를 켜두는게 좋습니다.
이것은 다이렉트 유틸에 보시면 옵션설정하는 부분가시면 됩니다.
이 플래그를 켜두면 다이렉트라이브러리를 이용하여 디버깅을 시도할때
출력창에 여러 디버그 정보들을 출력해주어서 디버깅시 좋습니다.

자 그럼 일단 D3DDEVICE메서드로 Z버퍼를 활성화시켜줍니다. 그래도 않뜬다.. 출력창을 한번보죠

Direct3D9: (ERROR) :************************************************************
Direct3D9: (ERROR) :ASSERTION FAILED! File d:\vista_rtm\multimedia\directx\dxg\d3d9\fe\d3dbase.cpp Line 6664: !bDoZClear || ((dvZ>=0.0) && (dvZ<=1.0))
Direct3D9: (ERROR) :************************************************************

이런 메세지가 뜬다면 이것은 D3DDEVICE::Clear 메서드 상에서 5번째인자의 z값을 주는부분을
0~1.0 사이로 넣지않았을때 발생합니다.

자 Clear의 z범위를 제대로 줬음에도 않나오거나 위의 D3D9에러가 않뜬다..
그럼 남은 한가지는 프로젝션행렬설정을 잘못해줬을때 생길수있습니다.


여기에서 D3DXMatrixPerspectiveFovLH 함수의 인자값을 잘못넣어 줬을때 발생할수있습니다.
그것에 관한 해답은 밑에 제가 gpg에 질문 해놓은게 있으니 밑의 링크를 타고 참고해보시길~

http://www.gpgstudy.com/forum/viewtopic.php?topic=23982
Creative Commons License
Creative Commons License
Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/116
  2. 매못찌ㅠ 2009/08/18 04:05  Modify/Delete  Reply  Address

    매핑강좌해줘ㅠ
    랜스는 자웅동체ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

[로그인][오픈아이디란?]


버텍스 버퍼(Vertex Buffer)란 ?
 우리가 Direct3D를 사용하면서 가장 많이 그리고 자주 쓰게될 인터페이스라고 생각하면된다.
만약 엔진이나 라이브러리에서 모델을 불러 띄어놔놓고 않쓴다고 하면 그것은 내부적으로 버텍스버퍼가있는것이다ㄱ-;
 정점을 저장해서 그릴려면 물론 인덱스버퍼사용시에도 버텍스버퍼는 필요하므로 무조건 버텍스버퍼가 필요하기 때문이다!!
 한마디로 요약해서 정점의 정보를 저장해두는 버퍼 정도로 알아두면 될것이다.

 
버텍스 버퍼를 사용하는 과정
 버텍스버퍼를 사용하는 과정은 간단하게 몇가지 단계로 나눌수있다.

1. 버텍스버퍼의 생성
  IDirect3DDevice9::CreateVertexBuffer 메서드를 통하여 버텍스 버퍼를 생성한다.
(파라미터밑 리턴값은 위의 메서드명을 클릭해서 참조하도록 ,MSDN)
 생성시엔 동적버퍼 와 정적버퍼로 생성하는것중 고를수있으니 MSDN을 참고해보면서
자신의 경우엔 어떤 방식의 버퍼를 적용하는게 좋은지 생각해서 적용해보길 바란다.
(보통 변화가많은 파티클시스템에서 동적버퍼를 지형이나 오브젝트같은경우엔 정적버퍼를 사용한다.)

2. 버텍스버퍼의 데이터 채워넣기
- 일단 버텍스 버퍼에 접근하기 위해선IDirect3DVertexBuffer9::Lock 메서드를 호출해주어서
버텍스버퍼의 메모리에대한 독점권과 동시에 버텍스버퍼의 포인터를 얻어온다.
- 그후 얻어온 포인터를 이용해서 데이터를 복사,혹은 삽입
- 삽입후에는IDirect3DVertexBuffer9::Unlock 메서드를 호출해주어서  버텍스버퍼에 대한
독점권을 해제해준다.

3. 버텍스버퍼의 데이터로 정점그리기
 버텍스 버퍼의 데이터로 정점을 그리는것은 매우 간단하다.
(1) IDirect3DDevice9::SetStreamSource 메서드를 호출해서 정점을 그리는데 사용할 버텍스버퍼와
연결한다.
(2) IDirect3DDevice9::SetFVF 메서드를 호출해서 그리게 될 정점의 포맷을 설정한다.
(3) 대망의 마지막 그려주는 과정IDirect3DDevice9::DrawPrimitive 메서드를 호출해서
정점들을 그려준다.

4. 버텍스 소멸시켜주기
 위에서 만들었던 버텍스버퍼가 더이상 사용되지않을때 (프로그램종료시라던지)
우리는 ->Release 메서드를 이용해서 만들어주었던 버텍스버퍼를 소멸시켜준다.



PS.. 잡설인데 요즘 학원에서 D3D를 진도를 나가는데 예전에 혼자 독학했을때보다 심도있게 나가서 그냥 공부하면서 몇몇가지들을 적어두어 다른분들이 참고하실때 도움이 되고자합니다...Orz
 그나저나 글쓰다가 실수로 한번 날려먹었었다는... 흑흑 ㅠㅠ

Creative Commons License
Creative Commons License
Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/111
  2. 그라파 2009/07/30 17:55  Modify/Delete  Reply  Address

    좋은 정보 감사합니다. 퍼갈께요^^( 출처도 꼭 적겠습니다.)

  3. 체육복萌!! 2010/12/28 09:12  Modify/Delete  Reply  Address

    sprite와 vertex buffer 의 차이는 뭘까요?
    (2D 와 3D라는 차이점 빼고)

[로그인][오픈아이디란?]


 쉐이더까지 순차적으로 이렇게 자세히 진행되는 예제는 처음보는듯?
학원에서 요즘 D3D 공부해서 다시 D3D잡고 공부하는데 열심히 배워뒀던 수학적개념들
8:45 하늘나라로?? 다시 빡신 공부를 시작해야겠다...
 쉐이더도 오랜만에 깔짝깔짝~
Creative Commons License
Creative Commons License
Posted by 랜스.

Leave your greetings here.

[로그인][오픈아이디란?]
http://loozend.cafe24.com/moniwiki/wiki.php/FrontPage 에서 퍼왔습니다

튜터리얼
Lesson 01 - 12
Direct3DLesson01.gif Direct3DLesson01
?Direct3D 윈도우 생성
윈도우에서 ?Direct3D를 설정하고 사용하기 위한 예제입니다. 이 프로그램은 화면에 아무것도 출력하지는 않지만, 이후 예제를 위한 기본적으로 틀(Framework)을 잡아 놓았습니다.
Direct3DLesson02.gif Direct3DLesson02
삼각형 그리기
3D공간상에서 점 3개를 이용하여 삼각형을 출력하는 예제입니다. 뷰행렬(View Matrix)과 삼각형을 그릴 때 그리는 방향에 따라 보여지는 면(Face)의 관계 그리고 법선벡터(Normal Vector)에 대한 것에 대해 익히게 됩니다.
Direct3DLesson03.gif Direct3DLesson03
색을 포함한 삼각형 그리기
각 정점(Vertex)에 색을 적용시킨 삼각형을 출력하는 예제입니다. 정점마다 색을 가질 수 있으며 삼각형의 정점사이로 색이 보간되어 출력되는 것에 대해 알 수 있습니다.
Direct3DLesson04.gif Direct3DLesson04
회전
회전행렬을 이용하여 시간에 삼각형을 Y축으로 회전하는 예제입니다. 왼손좌표계이기 때문에 시계방향으로 회전한다는 것과 뒷면은 보이지 않는다는 것을 확인할 수 있습니다.
Direct3DLesson05.gif Direct3DLesson05
정육면체(3D Object) 출력
정육면체를 출력하여 Y축, X축으로 회전하는 예제입니다. 드디어 3D Object를 출력하는데 각 면(Face)마다 다른 색이기 때문에 회전하는 모습을 금방 알아볼 수 있습니다.
Direct3DLesson06.gif Direct3DLesson06
텍스쳐 맵핑(Texture Mapping)
정육면체에 텍스쳐 맵핑을 하는 예제입니다. 텍스쳐를 설정하면서 필터등의 텍스쳐 관련 설정을 해주어야 하는데 이것에 대해 알아보겠습니다.
Direct3DLesson07.gif Direct3DLesson07
텍스쳐 축소/확대/밉맵 필터(Texture Min/Mag/Mip Filter)
거리가 멀어서 작게 출력되거나 원래 이미지 크기보다 크게 출력되는 경우에 사용되는 필터와 속도를 빠르게 하기 위해 거리가 멀 경우 원본보다 작게 축소된 텍스쳐를 이용하여 맵핑하는 필터에 대해 알아보겠습니다.
Direct3DLesson08.gif Direct3DLesson08
텍스쳐 어드레스 필터(Texture Address Filter)
텍스쳐 UV Address값을 이용하는 방법에 대해서 알아보겠습니다. 추후 배경으로 반복되는 이미지를 찍는다면 유용히 사용할 수 있습니다
Direct3DLesson09.gif Direct3DLesson09
텍스쳐 알파 블렌딩(Texture Alpha Blending)
32bit TGA파일의 Alpha이용하여 알파블렌딩을 사용해 보겠습니다. 특히 파티클에서 텍스쳐 픽셀 연산과 연동하여 활용하거나 2D 이미지를 찍는데도 활용할 수 있습니다.
Direct3DLesson10.gif Direct3DLesson10
텍스쳐 연산(Texture Operation)
텍스쳐 스테이지를 사용하는 예제입니다. 총 8개가 주어지며 텍스쳐는 보통 2장까지 설정하여 연산가능합니다. 이번 예제는 가장 기본적인 라이트 맵을 표현하였습니다
Direct3DLesson11.gif Direct3DLesson11
고정 정점 포멧과 라이트(Fixed Vertex Format & Light)
정점의 고정 파이프라인 3가지와 라이트와의 관계에 대한 예제입니다. 특히 ?TnL가속이란 것이 어떤부분에 해당하는지 알 수 있게 됩니다.
Direct3DLesson12.gif Direct3DLesson12
3가지 라이트(Light)
3가지 라이트(Directional/Point/Spot Light)에 대한 간단한 예제입니다. 일반적으로 속도가 가장 빠른 방향성 라이트(Directional Light)를 많이 사용하게 됩니다.

Download

관련 페이지


Creative Commons License
Creative Commons License
Posted by 랜스.

Leave your greetings here.

[로그인][오픈아이디란?]
사용자 삽입 이미지
Direct객체를 잘 생성하다가 풀스크린모드로 한번 켜보고 싶어서 풀스크린 모드로 켜보니 바로 밑에와 같은결과가 발생하며 프로그램이 종료되었다.
사용자 삽입 이미지
그리고 알아보니 D3DPRESENT_PARAMETERS 의 멤버변수중 BackBufferFormat 이라는분이
D3DFMT_UNKNOWN으로 설정되있으면 풀스크린시에 에러가 발생할수있다는 것이다.
사용자 삽입 이미지
이렇게 수정해주면 풀스크린으로 아주 잘뜬다.....쿄쿄
Creative Commons License
Creative Commons License
Posted by 랜스.

Leave your greetings here.

[로그인][오픈아이디란?]
스프라이트툴을 제작하고 저만의 스프라이트 커스텀 포맷형식을 만들었었습니다.
그런고로 스프라이트를 사용할 프로그램에서 이 형식을 불러오는게 중요한데
API상에선 불러오는것에 대해서 성공하였습니다만 Direct상에선 조금 난관을 겪었었는데요.
정보 빈약국 한국의 멋진 모습입니다. -ㅇ-;;;;; 네이버검색 구글검색 않뜹니다 떠도 이상하게 떠요
잘않된다는거죠

함수원형
HRESULT WINAPI
    D3DXCreateTextureFromFileInMemory(
        LPDIRECT3DDEVICE9             pDevice,
        LPCVOID                              pSrcData,
        UINT                                    SrcDataSize,
        LPDIRECT3DTEXTURE9 *       ppTexture);

이것이 이 함수의 원형입니다.

pDevice : DIRECT3DDEVICE9의 포인터를 넘기면 됩니다.
pSrcData : 읽기를 할 버퍼의 포인터형을 넘기면 됩니다.
ScrDataSize : 읽어올 데이터의 크기를 넘기면됩니다.
ppTexture : 텍스쳐를 불러와 저장할 텍스쳐의 포인터를 넘기면됩니다.


사용예

이렇게 사용하는것이이렇게 사용하는것과 같은효과를 나타냅니다.

고로 스프라이트 파일제작한후 불러와서 잘 실행됩니다!!!
Creative Commons License
Creative Commons License
Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/9
  2. 숭악 2009/11/01 23:33  Modify/Delete  Reply  Address

    잘보고 갑니다. 수정할 부분이 한군데 있어서 적고갈게요..
    D3DXCreateTextureFromFileInMemory를 쓰기 전에
    fseek( fp, 0, SEEK_SET );
    을 사용하여 파일포인터의 위치를 초기위치로 돌려놔야 되더군요..

[로그인][오픈아이디란?]