Войти
ДельфинарийФорум

NVMeshMender

Страницы: 1 2 3 Следующая »
#0
10:43, 4 июня 2006

или как там его.. короче говоря, ЭТО есть для С++, а для родных Дельфей не нашел :(
А так правильный бамп хочецца увидеть. У кого-то есть сабж запихнутый, например, в ДЛЛ? Или переведенный в паскаль? Ну помогите, пожалуйста!


#1
15:00, 4 июня 2006

В принципе компильнуть MeshMender в длл не проблема. Кроме одного но. У меня не стоит DX SDK:)
Если со мной кто-нибудь поделится файлом d3dx9.h и либой к нему (или dllкой) то сделаю.

Демонстрация нефатальности кода:

/*********************************************************************NVMH4****
Path:  
File:  

Copyright NVIDIA Corporation 2003
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.


Comments:
  send questions or comments to , 

    MeshMender's main purpose is to generate a tangent space basis for
  per pixel lighting.  Given a set of vertices and normal map texture coordinates,
  MeshMender will return a set of normals, binormals, and tangents taking into
  account texture mirroring.  
  
  Meshmender also lets you choose a minimum angle between neighboring 
  triangles vectors to determine whether or not they can smooth together.
  If they can't smooth together, then MeshMender automagically mends the mesh
  so that each unsmoothable neighbor has it's own set of vectors in a unique vertex.



How to use MeshMender:
  assumes that you have an array of vertices in myVerts and an array
  of indices in myIndices.
  the verts should be of the format
    float x, float y, float z, 
    float s,
    float t

------------------------


  std::vector< MeshMender::Vertex > theVerts;
  std::vector< unsigned int > theIndices;
  std::vector< unsigned int > mappingNewToOld;

  //fill up the vectors with your mesh's data
  for(DWORD i = 0; i < numVerts; ++i)
  {
    MeshMender::Vertex v;
    v.pos = myVerts[i].pos;
    v.s = myVerts[i].s;
    v.t = myVerts[i].t;
    //meshmender will computer normals, tangents, and binormals, no need to fill those in.
    //however, if you do not have meshmender compute the normals, you _must_ pass in valid
    //normals to meshmender
    theVerts.push_back(v);
  }

  for(DWORD ind= 0 ; ind< numIndices; ++ind)
  {
    theIndices.push_back(myIndices[ind]);
  }

    //pass it in to the mender to do it's stuff
  mender.Mend( theVerts,  theIndices, mappingNewToOld,
          minNormalCreaseCos,
          minTangentCreaseCos,
          minBinormalCreaseCos,
          weightNormalsByArea,
          MeshMender::CALCULATE_NORMALS,
          MeshMender::DONT_RESPECT_SPLITS
          MeshMender::DONT_FIX_CYLINDRICAL);

    //then update your mesh with the data provided in the Vertex vector
  //NOTE that MeshMender may add vertices to your mesh if needs to split
  //because of smoothing groups.  So you can't just reuse your old vertex
  //and index data. you have to update it.
  //to help associate any special per vertex data you had in your original mesh
  //you can use the mappingNewToOld ( see notes in comments below for Mend )


******************************************************************************/

#2
17:17, 4 июня 2006

d3dx9.h и d3dx9.lib требуется, да? Но и у меня тож нет СДК... Может спросить в общем форуме?
Точно других файлов не надо?

#3
18:19, 4 июня 2006

скачал я себе SDK апрельский, так что на днях сделаю.
Веселые люди всё таки в майкрософте работают... эта тварь раза в три дольше устанавливается, чем качается.
Ещё и файл подкачки пришлось увеличить.

#4
18:51, 4 июня 2006

:)) Спасибо тебе большое!!

#5
22:04, 6 июня 2006

Jurec
В общем скомпилил я это дело в длл, но оно нифига не работает:)
То есть данные входят правильно, а где-то в методе все падает. Так что есть два варианта.
1. Я выкладываю что есть и ты сам разбираешься во входных параметрах
2. Я вкуриваю нвидевскую демку. (времени у меня щас мало, соответсвенно процесс может затянутся:)

#6
23:01, 6 июня 2006

А можно и то и то? "Ах..ть, дайте две" (с), так сказать...

Если не сложно, намыль пожалста:

#7
14:06, 7 июня 2006

Jurec
http://www.gamedev.ru/download/?id=3678
Лови. Если запустишь, выложи потом работающий пример.

#8
16:03, 7 июня 2006

ага, спасибо..


Итак, итоги:
1. выходные данные - они вообще где? Откуда, в твоем варианты высовывать tangent и binormal?
2. чёто не то с входными данными

bool MeshMender::Mend(
std::vector< Vertex >&    theVerts,
std::vector< unsigned int >& theIndices,
std::vector< unsigned int >& mappingNewToOldVert,
const float minNormalsCreaseCosAngle,
const float minTangentsCreaseCosAngle,
const float minBinormalsCreaseCosAngle,
const float weightNormalsByArea,
const NormalCalcOption computeNormals,
const ExistingSplitOption respectExistingSplits,
const CylindricalFixOption fixCylindricalWrapping)

и

function (vertexes: pointer; numVerts: DWORD;
                  indexes : pointer; numIndices: DWORD;
      minNormalCreaseCos: single;
      minTangentCreaseCos: single;
      minBinormalCreaseCos: single;
      weightNormalsByArea: single;
                  CALCULATE_NORMALS: BOOL;
      RESPECT_SPLITS: BOOL;
      FIX_CYLINDRICAL: BOOL): BOOL;
разница в отсутствии в Делфи mappingNewToOldVert и появлении numVerts и numIndices.
Но это не особо важно, т.к. основное (наверно =) здесь:

type
NVVERTEX = record
  x,y,z: single;
  s,t: single;
end;
Это, конечно так, в сорце так и написано:

How to use MeshMender:
  assumes that you have an array of vertices in myVerts and an array
  of indices in myIndices.
  the verts should be of the format
    float x, float y, float z,
    float s,
    float t

Но! В сам mend пихается массив из другой опыры :)

class Vertex
    {
    public:
      D3DXVECTOR3 pos;
      D3DXVECTOR3 normal;
      float      s;
      float      t;
      D3DXVECTOR3 tangent;
      D3DXVECTOR3 binormal;
      enum
      {
        FVF = D3DFVF_XYZ |
            D3DFVF_NORMAL |
            D3DFVF_TEX3 |
            D3DFVF_TEXCOORDSIZE2( 0 ) |
            D3DFVF_TEXCOORDSIZE3( 1 ) |
            D3DFVF_TEXCOORDSIZE3( 2 )
      };
      Vertex::Vertex():pos(0.0f ,0.0f ,0.0f )
                    ,normal(0.0f ,0.0f ,0.0f )
                    ,s(0.0f )
                    ,t(0.0f )
                    ,tangent(0.0f ,0.0f ,0.0f )
                    ,binormal(0.0f ,0.0f ,0.0f ){}
    };

короче, парюсь, можт что-то и выйдет.

Большое спасибо!!

#9
16:15, 7 июня 2006

Jurec
ой, блин:) Выходные данные, то я и забыл.

В

NVVERTEX = record
  x,y,z: single;
  s,t: single;
end;

надо нормали, бинормали, и тангенты добавить... ща перезалью:)

#10
16:25, 7 июня 2006

во http://www.gamedev.ru/download/?id=3678

короче заполняешь  x,y,z,s,t
а после mend заполняются нормали, бинормали...

#11
18:00, 7 июня 2006

Отлично, все работает!!

Вот только появились черные треугольники на модели, может я неправильные данные даю в Mend?
И что туда давать, если нормали уже есть.. или считать нормали на нем?

#12
19:14, 7 июня 2006

>Отлично, все работает!!
Что именно работает-то?

>Вот только появились черные треугольники на модели, может я неправильные данные даю в Mend?
на самом деле в оригинальной демке, у меня на тарелке тоже были черные треугольники.
Но я запускал на машине с интегрированной видео карточкой:)

Посмотри пример http://download.developer.nvidia.com/developer/SDK/Individual_Sam… _samples.html
самый последний

>И что туда давать, если нормали уже есть.. или считать нормали на нем?
Это точно не ко мне вопросы.

#13
19:34, 7 июня 2006

ну работает - вываливает назад тангенсы и бинормали. уже хорошо. Правда у меня был расчетчик - результат одинаковый вышел :(

>Посмотри пример
уже есть.


а я на ГеФорс 6600... но при колдовании с входными параметрами - все ок. Вся проблема шас в них

Спасибо еще раз!!

#14
20:32, 7 июня 2006

Выложи потом демку рабочую, плиз

Страницы: 1 2 3 Следующая »
ДельфинарийФорум

Тема в архиве.