글
Technical Article/펌 2003. 6. 10. 23:46삼각형을 그려보자~
1. 디바이스 생성하고 나서...
2. FVF(Flexible vertex format- 유동 정점 포맷)를 정의하고~~
// The 3-D vertex format and descriptor
typedef struct {
FLOAT x, y, z; // 3-D coordinates
FLOAT rhw; // rhw
D3DCOLOR Diffuse; // Diffuse color component
} sVertex;
#define VERTEXFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
// Vertex buffer
IDirect3DVertexBuffer8 *g_pVB = NULL;
3. 버텍스 값을 넣어준다!!!
BYTE *Ptr;
sVertex Verts[4] = {
{ 0.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,255,100) },
// { 100.0f, 110.0f, 110.0f, 1.0f, D3DCOLOR_RGBA(155,0,155,100) },
{ 150.0f, 300.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,0,100) },
{ 300.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0,0,255,100) },
{ 0.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,255,100) }
};
4. 버텍스 생성해서 락걸고 디바이스에 잡아넣는다!
// Create the vertex buffer and set data
g_pD3DDevice->CreateVertexBuffer(sizeof(sVertex)*4, 0, VERTEXFVF, D3DPOOL_DEFAULT, &g_pVB);
g_pVB->Lock(0,0, (BYTE**)&Ptr, 0);
memcpy(Ptr, Verts, sizeof(Verts));
g_pVB->Unlock();
5. 매 프레임 마다 뿌려준다!
g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_RGBA(0,0,0,255), 1.0f, 0);
// Begin scene
if(SUCCEEDED(g_pD3DDevice->BeginScene()))
{
// Set the vertex stream and shader
g_pD3DDevice->SetStreamSource(0, g_pVB, sizeof(sVertex));
g_pD3DDevice->SetVertexShader(VERTEXFVF);
g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
6. 밑에 부분 중요!!
D3DPT_TRIANGLESTRIP은 첫번째 폴리곤에는 처음 3개의 점을 사용해서 그담에 이어지는 각각의 폴리곤에는 추가되는 정점 하나만을 사용하여 폴리곤의 스트립을 그리는 옵션~~
흐흐.. 졸라 말이 어렵다...
그냥 삼각형 그릴려면 버텍스 4개로 다음과 같이해주니까 되드라 ㅡㅡ;;
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
// End the scene
g_pD3DDevice->EndScene();
}
// Display the scene
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
7. 이렇게 해주면 떙^^ 삼각형 나온다~ 으하하하
역시 코딩하고 결과보고 디버깅좀 하고 그래해야 맛이나지..ㅋㅋ
근데...
버텍스를 4개를 썼는데...저렇게 할필요가 있나..
트라이앵글리스트를 쓰면 3개로 끝낼수 있을꺼 같은데...
ㅎㅎ
2. FVF(Flexible vertex format- 유동 정점 포맷)를 정의하고~~
// The 3-D vertex format and descriptor
typedef struct {
FLOAT x, y, z; // 3-D coordinates
FLOAT rhw; // rhw
D3DCOLOR Diffuse; // Diffuse color component
} sVertex;
#define VERTEXFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
// Vertex buffer
IDirect3DVertexBuffer8 *g_pVB = NULL;
3. 버텍스 값을 넣어준다!!!
BYTE *Ptr;
sVertex Verts[4] = {
{ 0.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,255,100) },
// { 100.0f, 110.0f, 110.0f, 1.0f, D3DCOLOR_RGBA(155,0,155,100) },
{ 150.0f, 300.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,0,100) },
{ 300.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0,0,255,100) },
{ 0.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,255,100) }
};
4. 버텍스 생성해서 락걸고 디바이스에 잡아넣는다!
// Create the vertex buffer and set data
g_pD3DDevice->CreateVertexBuffer(sizeof(sVertex)*4, 0, VERTEXFVF, D3DPOOL_DEFAULT, &g_pVB);
g_pVB->Lock(0,0, (BYTE**)&Ptr, 0);
memcpy(Ptr, Verts, sizeof(Verts));
g_pVB->Unlock();
5. 매 프레임 마다 뿌려준다!
g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_RGBA(0,0,0,255), 1.0f, 0);
// Begin scene
if(SUCCEEDED(g_pD3DDevice->BeginScene()))
{
// Set the vertex stream and shader
g_pD3DDevice->SetStreamSource(0, g_pVB, sizeof(sVertex));
g_pD3DDevice->SetVertexShader(VERTEXFVF);
g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
6. 밑에 부분 중요!!
D3DPT_TRIANGLESTRIP은 첫번째 폴리곤에는 처음 3개의 점을 사용해서 그담에 이어지는 각각의 폴리곤에는 추가되는 정점 하나만을 사용하여 폴리곤의 스트립을 그리는 옵션~~
흐흐.. 졸라 말이 어렵다...
그냥 삼각형 그릴려면 버텍스 4개로 다음과 같이해주니까 되드라 ㅡㅡ;;
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
// End the scene
g_pD3DDevice->EndScene();
}
// Display the scene
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
7. 이렇게 해주면 떙^^ 삼각형 나온다~ 으하하하
역시 코딩하고 결과보고 디버깅좀 하고 그래해야 맛이나지..ㅋㅋ
근데...
버텍스를 4개를 썼는데...저렇게 할필요가 있나..
트라이앵글리스트를 쓰면 3개로 끝낼수 있을꺼 같은데...
ㅎㅎ
![](https://lh3.googleusercontent.com/-hYZb_novCPQ/V5HuGPkGFUI/AAAAAAAAANk/f8zcKkeTBbA1A-W6yuqfk12fs8bd8FeOQCL0B/banner_468_60.png)
RECENT COMMENT