Почему D3DXCreateCylinder не окрашивает сетку/материал не работает?

89
5

Этот вопрос является продолжением "почему D3DXCreateCylinder не создает цилиндр?". Я могу нарисовать цилиндр, но он только рисует его как full white.


Код выглядит следующим образом


void draw_Cylinder(void){

D3DXMATRIX rot_matrix;
D3DXMATRIX trans_matrix;
D3DXMATRIX world_matrix;
static float rot_triangle=0.0f;
static float rot_triangle2=0.0f;

D3DXMatrixRotationY(&rot_matrix,rot_triangle); //Rotate the cylinder
D3DXMatrixRotationX(&rot_matrix,rot_triangle2); //Rotate the cylinder
D3DXMatrixTranslation(&trans_matrix,2.0f,0,20.0f); //Shift it 2 units to the left
D3DXMatrixMultiply(&world_matrix,&rot_matrix,&trans_matrix);

D3DMATERIAL9 material;// = new D3DMATERIAL9();

ZeroMemory( &material, sizeof(D3DMATERIAL9) );

// Set the RGBA for diffuse reflection.
material.Diffuse.r = 0.5f;
material.Diffuse.g = 0.0f;
material.Diffuse.b = 0.5f;
material.Diffuse.a = 1.0f;

// Set the RGBA for ambient reflection.
material.Ambient.r = 0.5f;
material.Ambient.g = 0.0f;
material.Ambient.b = 0.5f;
material.Ambient.a = 1.0f;

// Set the color and sharpness of specular highlights.
material.Specular.r = 1.0f;
material.Specular.g = 1.0f;
material.Specular.b = 1.0f;
material.Specular.a = 1.0f;
material.Power = 2.0f;

// Set the RGBA for emissive color.
material.Emissive.r = 0.0f;
material.Emissive.g = 0.0f;
material.Emissive.b = 0.0f;
material.Emissive.a = 0.0f;

g_d3d_device->SetMaterial(&material);

g_d3d_device->SetTexture(0,NULL);

g_d3d_device->SetTransform(D3DTS_WORLD,&world_matrix);
m_ppMeshCylinder->DrawSubset(0);
////Render from our Vertex Buffer
//g_d3d_device->DrawPrimitive(D3DPT_TRIANGLELIST, //PrimitiveType
// 0, //StartVertex
// g_pyramid_count); //PrimitiveCount

rot_triangle+=0.0007f;
if(rot_triangle > D3DX_PI*2)
{
rot_triangle-=D3DX_PI*2;
}

rot_triangle2+=0.0007f;
if(rot_triangle2 > D3DX_PI*2)
{
rot_triangle2-=D3DX_PI*2;
}
}


или загрузить проект.
Я привлек мои коды здесь код проекта"
Я хочу нарисовать его с трехмерными оттенками, которые обычно имеют любые 3D-сетки, если они отображаются по умолчанию.
Я не очень хорошо разбираюсь в материалах. Или это проблема с графической картой (я просто подумал: D).


Кроме того, где я могу получить информацию и образцы abt SetRenderState

спросил(а) 2011-04-13T08:08:00+04:00 9 лет, 5 месяцев назад
1
Решение
108

Попробуйте


g_d3d_device->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL );

В настоящий момент он по умолчанию использует "Цвет 1", который является первым из двух возможных вершинных цветов.

ответил(а) 2011-04-18T11:51:00+04:00 9 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема