У меня есть 3D -пирамида, сделанная из блоков, которую игрок может управлять, я думал о отображении текста, чтобы я знаю, как для будущих проектов, но когда я визуал текст, моя пирамида исчезает, оставляя только текст. Я следую учебному пособию, сделанную Bryanzersoft здесь ссылкой на учебник
, и он говорит, чтобы очистить штаты со следующим кодом < /p>
d3dDevice->OMSetDepthStencilState(0, 0);
d3dDevice->IASetInputLayout( VertexLayout );
d3dDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
< /code>
и сбросить геометрический шейдер с помощью этого кода в вершинном шейдере < /p>
technique10 Tech
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
}
}
< /code>
Значение является нулевым, потому что геометрия не было установлено.void DrawScene()
{
float bgColor[4] = { 0.54, 0.8, 1, 1.0f };
d3dDevice->ClearRenderTargetView(RenderTargetView, bgColor);
d3dDevice->ClearDepthStencilView(DepthStencilView, D3D10_CLEAR_DEPTH | D3D10_CLEAR_STENCIL, 1.0f, 0);
//set view
D3DXMatrixOrthoLH(&Projection, (Width / 30) * zoom,(Height / 30)* zoom, 1.0f, 1000.0f);
//reset states
d3dDevice->OMSetDepthStencilState(0, 0);
d3dDevice->IASetInputLayout(VertexLayout);
d3dDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
//fix rotation value
if (rot > (float)6.283185)
rot -= (float)6.283185;
else if (rot < 0)
rot = (float)6.283185 + rot;
//lighting junk
fxLightVar->SetRawValue(&light, 0, sizeof(Light));
D3D10_TECHNIQUE_DESC techDesc;
Technique->GetDesc(&techDesc);
//pyramid
for (int h = 9; h > 0; h -= 2) {
for (int y = 0; y < h; y++) {
int half = ceil(h / 2);
if (y < half) {
for (int x = 0; x < y + 1; x++) {
drawGridCube(x * 2 - y, (9 - h) / 2, half - y, grassMapResourceView,techDesc);
}
}
else {
for (int x = 0; x < h - y; x++) {
drawGridCube(x * 2 - ((h - 1) - y), (9 - h) / 2, half - y, grassMapResourceView,techDesc);
}
}
}
}
//set resource to diffuse map
fxDiffuseMapVar->SetResource(DiffuseMapResourceView);
//render text
D3DXCOLOR fontColor(1.0f, 1.0f, 1.0f, 1.0f);
RECT rectangle = { 10, 10, 0, 0 };
Font->DrawText(0, L"Finally, it works!", -1, &rectangle, DT_NOCLIP, fontColor);
}
//a shortcut to drawing blocks
void drawGridCube(int x, int y, int z, ID3D10ShaderResourceView* tex, D3D10_TECHNIQUE_DESC techDesc) {
D3DXVECTOR3 rotaxis(0.0f, 1.0f, 0.0f);
D3DXVECTOR3 rotaxisX(1.0f, 0.0f, 0.0f);
D3DXMatrixTranslation(&Translation, x * 2, y * 2, z * 2);
D3DXMatrixRotationAxis(&Rotation, &rotaxis, rot);
D3DXMatrixRotationAxis(&Rotationx, &rotaxisX, rotx);
D3DXMatrixScaling(&Scale, 1.0f, 1.0f, 1.0f);
Transformations = Translation * Rotation * Rotationx * Scale;
WVP = World * Transformations * View * Projection;
fxWVPVar->SetMatrix((float*)&WVP);
fxDiffuseMapVar->SetResource(tex);
for (UINT p = 0; p < techDesc.Passes; ++p) { //drawing a new cube, but with a different scale and rotation
Technique->GetPassByIndex(p)->Apply(0);
d3dDevice->DrawIndexed(36, 0, 0);
}
return;
}
< /code>
vertex.fx
technique10 Tech
{
pass P0
{
SetVertexShader(CompileShader(vs_4_0, VS()));
SetGeometryShader(NULL);
SetPixelShader(CompileShader(ps_4_0, PS()));
}
}
< /code>
Я - полный нулю, и вряд ли что -то понимаю, но < /p>
Мое желаемое поведение: нарисуйте 3D -объект, с 2D текстом, перекрывающим экран.
Моя конкретная проблема: моя сцена не покажет, когда текст рендерирован
short Code: Указан выше, если вы не хотите. Я должен включить. Функция DrawScene () рисует сцену и текст, и именно здесь возникает проблема. Задавать вопросы на этом веб -сайте мне сложно и всегда является последним средством для меня, бакаузе этого долгих процессов, когда я всегда ошибаюсь.
Подробнее здесь: https://stackoverflow.com/questions/795 ... s-my-world
C ++ Direct3D 10, D3DX10Device-> DrawText () Удаляет мой мир [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1745263144
Anonymous
У меня есть 3D -пирамида, сделанная из блоков, которую игрок может управлять, я думал о отображении текста, чтобы я знаю, как для будущих проектов, но когда я визуал текст, моя пирамида исчезает, оставляя только текст. Я следую учебному пособию, сделанную Bryanzersoft здесь ссылкой на учебник
, и он говорит, чтобы очистить штаты со следующим кодом < /p>
d3dDevice->OMSetDepthStencilState(0, 0);
d3dDevice->IASetInputLayout( VertexLayout );
d3dDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
< /code>
и сбросить геометрический шейдер с помощью этого кода в вершинном шейдере < /p>
technique10 Tech
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
}
}
< /code>
Значение является нулевым, потому что геометрия не было установлено.void DrawScene()
{
float bgColor[4] = { 0.54, 0.8, 1, 1.0f };
d3dDevice->ClearRenderTargetView(RenderTargetView, bgColor);
d3dDevice->ClearDepthStencilView(DepthStencilView, D3D10_CLEAR_DEPTH | D3D10_CLEAR_STENCIL, 1.0f, 0);
//set view
D3DXMatrixOrthoLH(&Projection, (Width / 30) * zoom,(Height / 30)* zoom, 1.0f, 1000.0f);
//reset states
d3dDevice->OMSetDepthStencilState(0, 0);
d3dDevice->IASetInputLayout(VertexLayout);
d3dDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
//fix rotation value
if (rot > (float)6.283185)
rot -= (float)6.283185;
else if (rot < 0)
rot = (float)6.283185 + rot;
//lighting junk
fxLightVar->SetRawValue(&light, 0, sizeof(Light));
D3D10_TECHNIQUE_DESC techDesc;
Technique->GetDesc(&techDesc);
//pyramid
for (int h = 9; h > 0; h -= 2) {
for (int y = 0; y < h; y++) {
int half = ceil(h / 2);
if (y < half) {
for (int x = 0; x < y + 1; x++) {
drawGridCube(x * 2 - y, (9 - h) / 2, half - y, grassMapResourceView,techDesc);
}
}
else {
for (int x = 0; x < h - y; x++) {
drawGridCube(x * 2 - ((h - 1) - y), (9 - h) / 2, half - y, grassMapResourceView,techDesc);
}
}
}
}
//set resource to diffuse map
fxDiffuseMapVar->SetResource(DiffuseMapResourceView);
//render text
D3DXCOLOR fontColor(1.0f, 1.0f, 1.0f, 1.0f);
RECT rectangle = { 10, 10, 0, 0 };
Font->DrawText(0, L"Finally, it works!", -1, &rectangle, DT_NOCLIP, fontColor);
}
//a shortcut to drawing blocks
void drawGridCube(int x, int y, int z, ID3D10ShaderResourceView* tex, D3D10_TECHNIQUE_DESC techDesc) {
D3DXVECTOR3 rotaxis(0.0f, 1.0f, 0.0f);
D3DXVECTOR3 rotaxisX(1.0f, 0.0f, 0.0f);
D3DXMatrixTranslation(&Translation, x * 2, y * 2, z * 2);
D3DXMatrixRotationAxis(&Rotation, &rotaxis, rot);
D3DXMatrixRotationAxis(&Rotationx, &rotaxisX, rotx);
D3DXMatrixScaling(&Scale, 1.0f, 1.0f, 1.0f);
Transformations = Translation * Rotation * Rotationx * Scale;
WVP = World * Transformations * View * Projection;
fxWVPVar->SetMatrix((float*)&WVP);
fxDiffuseMapVar->SetResource(tex);
for (UINT p = 0; p < techDesc.Passes; ++p) { //drawing a new cube, but with a different scale and rotation
Technique->GetPassByIndex(p)->Apply(0);
d3dDevice->DrawIndexed(36, 0, 0);
}
return;
}
< /code>
vertex.fx
technique10 Tech
{
pass P0
{
SetVertexShader(CompileShader(vs_4_0, VS()));
SetGeometryShader(NULL);
SetPixelShader(CompileShader(ps_4_0, PS()));
}
}
< /code>
Я - полный нулю, и вряд ли что -то понимаю, но < /p>
Мое желаемое поведение: нарисуйте 3D -объект, с 2D текстом, перекрывающим экран.
Моя конкретная проблема: моя сцена не покажет, когда текст рендерирован
short Code: Указан выше, если вы не хотите. Я должен включить. Функция DrawScene () рисует сцену и текст, и именно здесь возникает проблема. Задавать вопросы на этом веб -сайте мне сложно и всегда является последним средством для меня, бакаузе этого долгих процессов, когда я всегда ошибаюсь.
Подробнее здесь: [url]https://stackoverflow.com/questions/79583936/c-direct3d-10-d3dx10device-drawtext-removes-my-world[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия