Реализация загрузки и отрисовки множества мешей

Тема в разделе "WASM.DirectX", создана пользователем kryndach, 8 июл 2007.

  1. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Собственно вопрос - как удобнее реализовать загруску множества мешей?
    Распробовал много вариантов, но как дело доходит до загрузки, прога вылетает.
    Если у кого есть исходник или ссылочка на исходник то я буду очень рад если вы их выложите.
    Заранее блогадарен.
     
  2. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Забыл уточнить что загрухаю я из *.x файла и использую DirectX
     
  3. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Ну рас исходников нет - хотябы идеями поделитесь
     
  4. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Вот сдесь должна быть ошибка

    Код (Text):
    1. LoadingMesh proc MeshStrucAddr , NameFileMeshAddr
    2.    
    3.    
    4.      invoke  D3DXLoadMeshFromXA, NameFileMeshAddr, D3DXMESH_SYSTEMMEM, pd3dDevice, NULL, MeshStrucAddr+4,NULL, MeshStrucAddr,  MeshStrucAddr+8      
    5.    
    6.     mov ebx, MeshStrucAddr  
    7.     d3dxbuf GetBufferPointer, [ebx].MESHSTRUC.pd3dxBuffer                                      ; Ýòîò áóôåð íàáèò ñòðóêòóðàìè òèïà D3DXMATERIAL + DWORD óêàçàòåëü íà èìÿ òåêñòóðû.  
    8.                                                                                 ; D3DXMATERIAL = 4*COLORVALUE (COLORVALUE=4 float'àì) + float
    9.     mov     [ebx].MESHSTRUC.pMeshMatrl, eax
    10.     mov     esi, eax                                                                ; Íà÷èíàåì ãðóçèòü òåêñòóðû
    11.     lea     edi, [ebx].MESHSTRUC.pMeshTexture
    12.    
    13.     mov     ecx, [ebx].MESHSTRUC.NumMaterial    
    14.     @2:
    15.     push    ecx                                                                                
    16.     add     esi, 16*4+4
    17.     mov     eax, [esi]
    18.     add     esi, 4
    19.     push    edi
    20.     test    eax, eax
    21.     jz      @1
    22.     push    esi
    23.    
    24.     push    eax
    25.     invoke  MessageBox, hwnd, eax, eax, 0
    26.     pop     eax
    27.     pop     esi
    28.     pop     edi
    29.     push    edi
    30.     push    esi
    31.    
    32.     invoke  D3DXCreateTextureFromFileA, pd3dDevice, eax, edi
    33.            
    34.        
    35.     pop     esi
    36.     @1:          
    37.     pop     edi
    38.     add     edi, 4
    39.     pop     ecx  
    40.     loop    @2
    41.    
    42.    
    43.     ret
    44.  
    45. LoadingMesh endp
    Это функция загрузки меша. первый параметр это структура

    MESHSTRUC STRUC
    NumMaterial dd ?
    pd3dxBuffer dd ?
    pMesh dd ?
    ;pMeshMaterial D3DXMATERIAL 20 DUP (<>)
    pMeshMatrl dd ?
    pMeshTexture dd 20 DUP (?)
    MESHSTRUC ENDS

    а второй имя файла
     
  5. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    :) видимо ты ее сам и внес да? потому что когда я писал этот пример загрузки .x файлов, он замечтально работал.
     
  6. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    :) лень было самому писать
    Твой пример работает отлично, но проблема в том что если я захочу загрузить к примеру 30 мешей, то это станет непосильной задачей.
    Придется описывать каждую переменную каждую ссылку на меш и т.п.

    Поэтому я вынес твой алгоритм в отдельную функцию. Но хотя все на мой взгляд правильно - прога вылетает
     
  7. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Если признаться - то без твоих трудов я бы и сместа не сдвинулся
    За это тебе большое спасибо.
     
  8. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Раз вылетает в чем-то есть причина. К сожалению я потерял примерчик тот старый, потестить не на чем :dntknw:
     
  9. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
  10. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
  11. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Попробовал убрать код который ниже этой функции

    invoke D3DXLoadMeshFromXA, NameFileMeshAddr, D3DXMESH_SYSTEMMEM, pd3dDevice, NULL, MeshStrucAddr+4,NULL, MeshStrucAddr, MeshStrucAddr+8

    Тоже вылетело, но вот что интересно. Посмотрев подробности ошибки я увидел адрес где она была. Так вот, что до удаления кода что после - один и тотже адрес.
    Значит ошибка в этой функции загрузки меша (может еще где, но сдесь точно есть). Круг поиска сузился
     
  12. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Скачал, смотрю.
     
  13. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Ну что, есть прогресс? Как у меня, так никакого
     
  14. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Видимо эта задачка не для нас смертных :)