почему D3DXCreateCylinder не создает цилиндр?

#c #directx

#c #directx

Вопрос:

Я пытаюсь создать трассировку шара.
rBallPos выполняется корректное обновление. Следующий код не работает при создании цилиндра как следа шара. Как это решить?

 LPD3DXMESH /*ID3DXMesh*/ ppMeshCylinder = NULL;
hr = D3DXCreateCylinder(g_d3d_device,0.1f,0.1f,0.1f,1,1,amp;ppMeshCylinder,0);
  

здесь также ОШИБКА hr != D3D_OK

 D3DXMATRIX cylinder, cylinder2, cylinderRotate, cylinderTrans;
D3DXMatrixRotationX(amp;cylinderRotate, 1.5f);
D3DXMatrixTranslation(amp;cylinderTrans, rBallPos.fX, rBallPos.fY, rBallPos.fZ);
D3DXMatrixMultiply(amp;cylinder, amp;cylinderRotate, amp;cylinderTrans);
g_d3d_device->SetTransform(D3DTS_WORLD, amp;cylinder);
ppMeshCylinder->DrawSubset(0);
  

Нужна помощь.

Ответ №1:

Вам нужно передать указатель на LPD3DXMESH , поэтому ваш параметр mesh должен быть amp;ppMeshCylinder вместо ppMeshCylinder . На самом деле, ваш компилятор должен был уже предупредить вас.

Обновление: Попробуйте передать большее значение для Slices и Stacks , скажем, 5 или 10. Невозможно создать цилиндрическую сетку всего с 1 полигоном.

Комментарии:

1. прошу прощения за мою ошибку здесь .. это amp;ppMeshCylinder. Возникает ошибка времени выполнения. Я обновил его.

2. хороший момент .. теперь он работает без какой-либо ошибки во время выполнения и создает меш. теперь я не могу его нарисовать (я думаю) .. потому что местоположения в порядке. На данный момент я делаю это и должен сделать это в Render() fn. что я могу сделать неправильно? Спасибо, что указали ‘Slice’ и ‘Stack’. … А насчет значения no. для них это нигде не объясняется на MS-сайтах .. или я это пропустил. и с помощью 1 фрагмента и стека можно создать цилиндр, не так ли (как в MAYA)?

3. Теперь я могу его нарисовать .. большое спасибо. Однако теперь я хочу придать ему цвет, текстуру или материал. Просто работаю над этим. любой указатель по-прежнему будет полезен.

4. Просто используйте device->SetMaterial и передайте структуру материала с нужными свойствами. Или используйте device->SetTexture и передайте текстуру (которую вы можете создать с помощью D3DXCreateTextureFromFile ).

5. Это должно работать, но не работает, в чем может быть причина?