GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (71 стр.)

Сообщения на форуме пользователя Andrey (71 стр.)

Wolfenstein 200921 авг. 200919:17#36
Drazd
>А непонятно чтоли? :)
ну я думал серьезно как фанат типа :)
All
так все ясно вспомнил действительно ID Software и OpenGL.
Wolfenstein 200921 авг. 200919:12#34
Drazd
>Кризис, превед!!!
прикалываешься что-ли?
Nikopol
>Блин, графика просто убогая...
согласен. да и арт немного подкачал.
All
народ игра я так понимаю на OpenGL ? шейдеры ресурсы ковыряли? что там? GLSL ? какая версия ? какая сложность шейдеров?
GL_ARB_half_float_vertex или float -> half_float на CPU19 авг. 200922:51#16
SNVampyre
по идее на слабых картах увеличиться и быстродействие. да и в 2 раза  можно уменьшить памяти прост овсе что float заменять на half float.
GL_ARB_half_float_vertex или float -> half_float на CPU19 авг. 200922:37#14
SNVampyre
Расскажи о своих результатах, если ли прирост используя half float.
Спецификация OpenGL 3 от сегодня! (+инфа в посте №1)15 авг. 200914:27#1321
innuendo
>> Да, OpenGL уже давно идёт на шаг позади.

>Хороший пинок им бы не помешал бы :)
Эх, пинать то некому

FBO + GLSL не работает11 авг. 200913:22#14
innuendo
>есть более простое glPushAttrib( GL_VIEWPORT_BIT ); :)
>но я забыл - это не круто :) -
ну да устарело. в gl3.h отсутствует.
FBO + GLSL не работает11 авг. 200910:11#11
ALTAIR
попробуй  ставить перед отрисовкой glViewPort(0,0,width, height)и перед биндингом FBO glViewPort(0,0,fbo_width, fbo_height)
Спецификация OpenGL 3 от сегодня! (+инфа в посте №1)8 авг. 200923:47#1273
ud1
>Работает ли cg с gl 3.0fc?
ну вообще GLSL в nVidia компилиться через него.
вопрос по экспорту из макса3 авг. 200917:39#11
olegf
только скин. Я проверку модификатора то что он скин делаю при формироании списка модификаторов.
вопрос по экспорту из макса3 авг. 200916:43#8
olegf
>А можно посмотреть как ты сделал вытаскивание скин инфо из нода в native API?
//get the skin interface
    ISkin *skin = static_cast<ISkin *>(animNodeData.modifier->GetInterface(I_SKIN));
    if (!skin) {
      continue;
    }
    int boneCount = skin->GetNumBones();
    outLog << "Total Bones: " << boneCount << "\n";
    // цикл по костям
    for(int i = 0; i < boneCount; ++i) {
      INode *node = skin->GetBone(i);
      // получить родителя
      INode *parent = node->GetParentNode();
      outLog << "Bone Index: " << i << " Bone Name: " << node->GetName();
      if (parent) {
        outLog << " Parent: " << parent->GetName() <<  "\n";
      }
      else {
        outLog << "\n";
      }
      // попуск дублей
      if (std::find(Bones.begin(), Bones.end(), node) != Bones.end()) {
        continue;
      }
      Bones.push_back(node);
    }
    //loop through the vertices
    ISkinContextData *skinData = skin->GetContextInterface(nodeData.node);
    if (!skinData) {
      continue;
    }
    // число точек
    int numberOfPoints = skinData->GetNumPoints();
    weights.resize(numberOfPoints);
    std::fill(weights.begin(), weights.end(), Weight());
    for(int i = 0; i < numberOfPoints; ++i) {
      // число весов
      int numOfWeights = skinData->GetNumAssignedBones(i);
      if (numOfWeights > NUM_BONES_VERTEX) {
        outLog << "Warning num Weight > " << NUM_BONES_VERTEX << "\n";
      }
      Weight& weight = weights[i];
      for(int j = 0; j < numOfWeights; ++j) {
        float weightVal = skinData->GetBoneWeight(i, j);
        // индекс кости для вершины
        int boneIndex = skinData->GetAssignedBone(i, j);
        INode* bone = skin->GetBone(boneIndex);
        // поиск индекса кости как разность итераторов
        boneIndex = static_cast<int>(std::find(Bones.begin(), Bones.end(), bone) - Bones.begin());
        assert(boneIndex < Bones.size());
        if (j >= NUM_BONES_VERTEX) {
          // цикл поиска незанятой пары индекс кости + вес
          for(int k = 0; k < NUM_BONES_VERTEX; ++k) {
            if (weight.weights[k]) {
              continue;
            }
            weight.weights[k] = weightVal;
            weight.boneIndices[k] = boneIndex;
            break;
          }
          break;
        }
        weight.weights[j] = weightVal;
        weight.boneIndices[j] = boneIndex;
      }
    
вопрос по экспорту из макса3 авг. 200913:16#1
olegf
>в некоторых мешах не равно общему количеству вершин меша.
ну дак может не влияет на какие-то вершины кости вообще. Я не помню как это будет в IGame и в обычном Max API. Может в IGame сразу отбросили вершины на которые не влияет не одна кость для удобства? что говорит об этом MAX SDK ?
Давно писал через IGame, поптом переделал через Native Max API. Говорят в IGame баги есть и недоработки. Помню тупо возвращает IGameNode == NULL и хоть убейся непонятно в чем дело. Мало кто его использует из разработчиков.
Вот кусок кода как делал я. Но то точно не помню работае ли он, возможно что из него ты что-то подчеркнешь.
enum {
NUM_BONES_VERTEX = 4
};
...
// структура веса
  struct Weight {
    // индекс костей
    unsigned char boneIndices[NUM_BONES_VERTEX];
    // веса влияния
    float weights[NUM_BONES_VERTEX];
    Weight();
  };
...
std::vector<Weight> weights;
...
int numSkinVertes = skin->GetNumOfSkinnedVerts();
      weights.resize(numSkinVertes);
      for(int n = 0; n < numSkinVertes; ++n) {
        Weight& weight = weights[n];
        int numWeight = skin->GetNumberOfBones(n);
        for(int j = 0; j < numWeight; ++j) {
          if (NUM_BONES_VERTEX - 1 == j) {
            break;
          }
          weight.weights[j] = skin->GetWeight(n, j);
        }
        for(int j = 0; j < numWeight; ++j) {
          if (NUM_BONES_VERTEX - 1 == j) {
            break;
          }
          //IGameNode* bone = skin->GetIGameBone(n);
          INode* bone = skin->GetBone(n, j);
// избегаем дублирования костей. храня свой список костей, а не тот что дает Max
          if (std::find(Bones.begin(), Bones.end(), bone) == Bones.end()) {
            Bones.push_back(bone);
          }
// выбираем свой индекс кости через свой список.
          unsigned char boneIndex = static_cast<unsigned char>(std::find(Bones.begin(), Bones.end(), bone) - Bones.begin());
          weight.boneIndices[j] = boneIndex;
        }
      }
ffmpeg, libavcodec доки, примеры?3 авг. 200912:09#25
gexogen
ну если это быстро чем через шейдеры то вперед. Единственное DirectDraw устаревшая технология.
ffmpeg, libavcodec доки, примеры?3 авг. 20091:19#23
gexogen
что-бы выводить через DirectDraw нужно конвертировать софтварно YUV->RBG.
со звуком проще либо DirectSound либо OpenAL.
Boost - цикл статей.31 июля 200921:51#1
Пиши, для новичков полезно будет. Удели внимание. boost::asio boost::spirit
XBox360 быстрее PS3 ?31 июля 200915:45#1
innuendo
очень удивлен если честно результатами...

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр