저는 DirectX를 처음 접했고 API 기능에 대한 이해를 시작했습니다.DirectX9 C++ 실시간으로 버텍스 데이터 다시 그리기
을 정점 초기화 :
나는 삼각형이 보여주는 이러한 기능을 사용하여 제대로 렌더링 얻을 관리했습니다 여기
void Menu::InitializeMenu(float x, float y, float width, float height, D3DCOLOR color, IDirect3DDevice9* d3dDevice)
{
CUSTOMVERTEX vertices[] =
{
{ x, y, 0.5f, 1.0f, color },
{ x + width, y, 0.5f, 1.0f, color },
{ x + width, y + height, 0.5f, 1.0f, color },
{ x, y, 0.5f, 1.0f, color },
{ x , y + height, 0.5f, 1.0f, color },
{ x + width, y + height, 0.5f, 1.0f, color },
};
if (FAILED(d3dDevice->CreateVertexBuffer(6 * sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &m_vertexBuffer, NULL)))
return;
void *locked_buffer;
if (FAILED(m_vertexBuffer->Lock(0, sizeof(vertices), (void **)&locked_buffer, 0)))
return;
memcpy(locked_buffer, vertices, sizeof(vertices));
m_vertexBuffer->Unlock();
}
모든 것은 메뉴 클래스 내에서 정의된다.
그리기 : 내가 다시 반투명 쿼드을 생산 렌더링 내 두 개의 삼각형을 완벽하게 얻을 작품
void Menu::RenderMenu(IDirect3DDevice9 *d3dDevice)
{
d3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
d3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
d3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
d3dDevice->SetRenderState(D3DRS_SRCBLENDALPHA, D3DRS_DESTBLENDALPHA);
d3dDevice->SetStreamSource(0, m_vertexBuffer, 0, sizeof(CUSTOMVERTEX));
d3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
d3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
}
다.
이제 문제 : 나는 프로그램이 (모든 것이 이미 초기화 적어도 한 번 렌더링 된) 렌더링 시작된 후 내 삼각형의 정점의 색상을 변경할 수 있어야합니다. 내가 생각했습니다
것 : 다른 색으로 정점을 초기화하기 위해 서로 다른 매개 변수를 사용하여 InitializeMenu 함수를 호출에 대해 나 빨리 생각, 이유는 나는 그것이 매우 비효율적 인 것 같습니다하지 때문입니다하지 않은 실용적인.
-Materials : 자료를 구현하지 않았습니다. 이는 (아직) 어떻게 알지 못하기 때문에, 그리고 더 간단한 대안을 찾기를 희망하기 때문입니다. 필요한 것은 정점 색상입니다. 이것을 달성 할 수있는 유일한 방법이 재료라면, 구현할 것입니다.
- 셰이더 : 셰이더로 버텍스를 색칠 할 수 있다고 생각하지만, 셰이더 경험이 거의 없으며 이전에 설명한 것처럼 간단한 대안을 찾고 싶습니다. 네, 셰이더가 단순하다는 것을 알고 있습니다. 셰이더의 버텍스 색상을 실시간으로 변경할 수있는 지점까지 도달했습니다. 그것은 GLSL에 있었지만 너무 많이 다르지 않을 것이라고 확신합니다. 여러 개의 쿼드 (ea 쿼드에 2 개의 삼각형 컬렉션)를 추가하려고 할 때 문제가 발생합니다. 버텍스 쉐이더에 들어오는 모든 버텍스의 색상을 변경하는 방법 만 알고 있습니다. 이전처럼 셰이더 만 수행하는 유일한 방법이라면 구현하겠습니다. 제게 올바른 방향으로 가르쳐주십시오. 셰이더가 낮은 레벨에서 작동하는 방법에 대해 거의 이해하지 못했습니다 (개념과 흐름을 이해하고 효과적으로 사용하는 방법을 사용하는 방법을 모르겠습니다).
- 연구 : 어디서나 보았습니다. 질문을 제대로하지는 못했지만 어딘가에서 답을 찾을 수 없습니다.
사실 이것은 처음으로 질문을 게시 한 사람입니다. 일반적으로 누군가 내 질문에 답했습니다. 가능한 한 최선을 다해 문제를 설명하려고 시도했지만 더 많은 코드 또는 정보를 요청하는 것이 여전히 불명확 한 경우
P .: Windows 8 바탕 화면을 사용하고 있습니다. 실제로 중요한지 확실하지 않습니다.
당신이 의미하는 바는 그려진 각 삼각형이 고유 한 색으로 그려져 있다는 것입니까? 삼각형의 각 줄마다 다른 색을 사용하려고합니까? – Juniar