먼저, 모든 소프트웨어 개발자에게 멋진 리소스 인 Stack Overflow를 사용하는 모든 사용자에게 감사드립니다.D3DXCreateText로 생성 된 3D 메쉬를 어떻게 채울 수 있습니까?
요즘 프로젝트 용으로 DirectShow + DirectX 9를 사용하고 있으며 D3DXCreateText() 메소드를 사용하여 3D로 텍스트를 표시하려고합니다. 이 방법은 나에게 메시, 내가 쉽게 (I가 필요로하는 세계 변환을 사용하여 변환하고, DrawSubset로 표시 할 수 있습니다) 메소드를 제공합니다
HDC hdc = CreateCompatibleDC(NULL);
HFONT font = CreateFont(0,0,0,0,FW_NORMAL,false,false,false,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"Calibri");
SelectObject(hdc, font);
ID3DXMesh *mesh;
D3DXCreateText(d3dDevice,hdc,"Hello World",0.001f,0.0f,&mesh,NULL,NULL);
--------------------- Now inside beginScene()
...
D3DXMATRIX translation;
D3DXMATRIX scaling;
D3DXMatrixTranslation(&translation,0,0,1);
D3DXMatrixScaling(&scaling,-0.1f,0.1f,0.1f);
d3dDevice->SetTransform(D3DTS_WORLD, &(translation * scaling));
mesh->DrawSubset(0);
...
모든 괜찮을 것 같다,하지만 나는 문제가있다 : I 돈 이 메쉬를 간단한 색으로 채우는 법을 알지 못합니다. 필자는 많은 예제를 읽었으며 DirectX 9 SDK와 함께 제공된 3D Text 예제를 사용했습니다 (D3DMATERIAL9를 사용하여 채 웁니다). 그러나 작동하지 않습니다.
더 구체적으로,이 텍스트 만 화면에 채우면 밝은 흰색으로 표시됩니다 (색상을 변경할 수는 없지만 적어도 흰색 임). 나는 (내가 DirectShow를 가진 카메라에서 캡처 한 프레임을 보여주기 위해 사용하고 있습니다) 텍스처와 쿼드 렌더링 경우이 텍스처를 사용하는 것처럼 그리고, 다음 텍스트가 표시 너무! :
...
d3dDevice->SetStreamSource(0, vertexBuffer, 0, sizeof(SCREENVERTEX));
d3dDevice->SetTexture(0, texture);
// World transformations for this VertexBuffer in here
d3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
...
수있는 당신, 제발, 이걸 도와 줘?
P .: 나는 유사한 결과를 얻기 위해 D3DXVec3Project()에서 dxDrawText() 메서드를 사용하는 방법이 있지만 깊이있는 실제 3D 텍스트가 필요하다는 것을 알고 있습니다.
--------------------------------------------- ----- 관심있는 사람을위한 솔루션 --------------------------------------- -----------
한편으로및 @NicoSchertler는 권고로, 나는의 DrawPrimitive() 함수를 그림 후 텍스처를 null로 설정해야합니다
d3dDevice->SetTexture(0, NULL);
이것은 텍스트 만 표시하지만 SDK 예제에 표시된 SetMaterial() 메서드를 사용하여도 메쉬를 칠할 수 없습니다. 그래서 @Gnietschow는 그것을 채울 수있는 방법으로 대답했습니다 :
d3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CONSTANT);
d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_CONSTANT);
d3dDevice->SetTextureStageState(0, D3DTSS_CONSTANT, /* D3DCOLOR HERE */);
그리고이 작품! 그러나 다른 텍스쳐를 다시 그리기 전에 SetTextureStageState() 메소드로 정의 된 각 속성을 재설정해야합니다 (그렇게하지 않으면 이전에 텍스트 용으로 정의 된 색상이 유지됩니다).
d3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
희망이 사람에게 도움이 다시 당신의 도움 :)에 대한 너희들 감사합니다 : 이것은이 (doc)로 이루어집니다.
자료를 적용하는 코드를 추가 할 수 있습니까? 이전에 텍스처를 적용한 경우 재설정해야합니다 (텍스처를 null로 설정). 조명이 있으십니까? –
빠른 답변 주셔서 감사합니다 @ NicoSchertler.텍스처를 null로 설정하면 텍스트가 흰색으로 표시되지만 색상은 변경할 수 없습니다. 흠 ... 아니, 나는 내 생각에 내가 필요로하지 않는 조명을 사용하지 않는다. 요청한 코드를 추가하도록 수정하겠습니다. – SRG