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

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

Проблема с PointSprites (DirectX)18 авг. 200614:53#2
Striker_Dev.
соглашусь ret
не расшмряемы они но на первых парх пойдет. Хотя OGRE их юзает.

Сg Еффект - не могу получить технику.18 авг. 200614:51#14
Executor
да ты прав :) опечатка я поправил
а вообще идеи есть?
Разбиение простраства18 авг. 200610:42#3
xapac
следует добавить что тут несколько вариантов. Узел Octree/QuadTree может наследоваться от узла в дереве сцены. тогда можно к этому узлу присоединять другие объекты.
Следует учеться что обюъект сцены также может наследоваться от узла сцены(из которых состоит дерево сцены), так и может не наследоваться. Тогда будет массив объектов присоедененных к узлу дерева сцены такой подход в движке Ogre.
Подход в котором наследование объекта от узла применяется, в движке irrlicht. Выбирай ято удобнее. Но в любом случае сцену надо представлять ввиде дерева. тогда все операции трансформации рендеринга и т.д. можно применять сразу к группе объектов. Хорошее начало может дать статья:
http://www.gamedev.ru/articles/?id=70101
Сg Еффект - не могу получить технику.18 авг. 200610:35#12
keltar
Кстати я разделил эффект на пиксельный и вершинный шедер интересно то что они отдельно не скомпилились были ошибки и в тех и
других. Тогда вопрог почему тогда скомпилися эффект?
пришлось исправить ошибки в результате вот разделленные шедеры:
Пиксельный
uniform sampler2D Texture0; // текстура
uniform sampler2D Texture1; // текстура
float4 horizon = {0.9f, 0.7f, 0.7f, 1.0f};  

//////////////////////////////////////////////////////////////
//Structures
//////////////////////////////////////////////////////////////

struct PS { // пиксельный шейдер
    float4 position : POSITION;
    float2 texCoord0 : TEXCOORD0;    
    float2 texCoord1  : TEXCOORD1;
    float2  intensity : TEXCOORD2;
};

//////////////////////////////////////////////////////////////
//Pixel Shader
//////////////////////////////////////////////////////////////
float4 PS_shader(in PS IN) : COLOR
{
  float4 clouds_0 = tex2D(Texture0, IN.texCoord0);
  float4 clouds_1 = tex2D(Texture1, IN.texCoord1);
  
     float4 clouds = (clouds_0 + clouds_1) * IN.intensity.y;

     float4 cloud_color = float4((1.0 - IN.intensity.x) * horizon.x, (1.0 - IN.intensity.x) * horizon.y, IN.intensity.x * horizon.z, 0.0);
     return cloud_color * (1.0 - clouds.x) + clouds;  
}
Вершинный:
//
struct VS {  // вершинный шейдер
    float4 position : POSITION;
    float3 normal   : NORMAL;
    float2 texCoord0 : TEXCOORD0;
    float2 texCoord1 : TEXCOORD1;
};

//Vertex shader to pixel shader
struct PS { // пиксельный шейдер
    float4 position : POSITION;
    float2 texCoord0 : TEXCOORD0;    
    float2 texCoord1  : TEXCOORD1;
    float2  intensity : TEXCOORD2;
};

//////////////////////////////////////////////////////////////
//Vertex Shader
//////////////////////////////////////////////////////////////
void VS_shader( in VS IN, uniform float4x4 worldViewProj, uniform float time, out PS OUT) 
{
    float4 bbox = {2.0f, 0.3f, 2.0f, 1.0f};
    OUT.position = mul(IN.position, worldViewProj);        
    
    OUT.intensity.x    = OUT.position.y / bbox.y;
     OUT.intensity.x    = exp(clamp(OUT.intensity.x, 0.0f, 1.0f)) / 1.8f;
     OUT.intensity.y = OUT.intensity.x * OUT.intensity.x;     
     OUT.texCoord0 = float2(OUT.position.x / 2.0f + time, OUT.position.z / 1.0f);
     OUT.texCoord1 = float2(OUT.position.x + time / 2.0f, OUT.position.z);
}
Эти шедеры отдельно точно скомпилились. Соеденив их в тот-же эффект в результате он тоже скомпилися без ошибок, но опять
техника == NULL
вот код результирующего эффекта:
//
float4x4 worldViewProj : ModelViewProjection;    // произведение World * View * Projection
uniform sampler2D Texture0;    // текстура
uniform sampler2D Texture1;    // текстура
uniform float time;      // просто переменная  
float4 horizon = {0.9f, 0.7f, 0.7f, 1.0f};  
float4 bbox = {2.0f, 0.3f, 2.0f, 1.0f};  
    
//////////////////////////////////////////////////////////////
//Structures
//////////////////////////////////////////////////////////////

//Application to vertex shader
struct VS {  // вершинный шейдер
    float4 position : POSITION;
    float3 normal   : NORMAL0;
    float2 texCoord0 : TEXCOORD0;
    float2 texCoord1 : TEXCOORD1;
};

//Vertex shader to pixel shader
struct PS { // пиксельный шейдер
    float4 position : POSITION;
    float2 texCoord0 : TEXCOORD0;    
    float2 texCoord1  : TEXCOORD1;
    float2  intensity : TEXCOORD2;
};

//////////////////////////////////////////////////////////////
//Vertex Shader
//////////////////////////////////////////////////////////////
void VS_shader( in VS IN, out PS OUT) 
{
    OUT.position = mul(IN.position, worldViewProj);        
    
    OUT.intensity.x    = OUT.position.y / bbox.y;
     OUT.intensity.x    = exp(clamp(OUT.intensity.x, 0.0f, 1.0f)) / 1.8f;
     OUT.intensity.y = OUT.intensity.x * OUT.intensity.x;     
     OUT.texCoord0 = float2(OUT.position.x / 2.0f + time, OUT.position.z / 1.0f);
     OUT.texCoord1 = float2(OUT.position.x + time / 2.0f, OUT.position.z);
}

//////////////////////////////////////////////////////////////
//Pixel Shader
//////////////////////////////////////////////////////////////
float4 PS_shader(in PS IN) : COLOR
{
  float4 clouds_0 = tex2D(modelTextureSampler0, IN.texCoord0);
  float4 clouds_1 = tex2D(modelTextureSampler1, IN.texCoord1);
  
     float4 clouds = (clouds_0 + clouds_1) * IN.intensity.y;

     float4 cloud_color = float4((1.0 - IN.intensity.x) * horizon.x, (1.0 - IN.intensity.x) * horizon.y, IN.intensity.x * horizon.z, 0.0);
     return cloud_color * (1.0 - clouds.x) + clouds;  
}

technique Sky {
    pass {
        VertexProgram = compile vp1 VS_shader();
        FragmentProgram = compile fp1 PS_shader();
    }
}
неужели остается вариант отослать баг репорт??? ;)))
Правка: лишняя переменная

Правка: 18 авг. 2006 10:58

Сg Еффект - не могу получить технику.17 авг. 200618:48#11
чпасибо за совет попробую..
Сg Еффект - не могу получить технику.17 авг. 200618:47#10
keltar
я тут одно предупреждение убрал:
вместо
OUT.texCoord0 = float4(OUT.position.x / 2.0f + time, OUT.position.z / 1.0f, 0.0f, 0.0f);
OUT.texCoord1 = float4(OUT.position.x + time / 2.0f, OUT.position.z, 0.0f, 0.0f);
сделал:
OUT.texCoord0 = float2(OUT.position.x / 2.0f + time, OUT.position.z / 1.0f);
OUT.texCoord1 = float2(OUT.position.x + time / 2.0f, OUT.position.z);
а то компилятор писал предупреждения преобразования float4 в float2

Правка: float2

Правка: 18 авг. 2006 14:50

Сg Еффект - не могу получить технику.17 авг. 200613:36#8
>а примеры работают? :\
в том то и дела работают и простой эффект с корректными техниками получается
>там вроде ассерт лишний один в примере (в том смысле что у тебя не используется ModelView, а CgFXOpenGLSimple оно ассертится
>если всё же бажит, то надо отправлять багрепорт
что не пойму про что ты :(
Сg Еффект - не могу получить технику.17 авг. 20060:21#6
keltar
>Какой версии cg toolki
файл Readme.txt
NVIDIA Cg 1.5 beta2 README      Copyright (C) 2002-2006 NVIDIA Corp.
есть еще варианты? может попробовать методом исключения на основе простого шейдера добавлять код и смотреть что не так?
Сg Еффект - не могу получить технику.16 авг. 200614:31#4
keltar
не работает...
technique = cgGetFirstTechnique(effect);
...
technique  == NULL хоть ты тресни!!
:(
видео карта GeForce 6600, дата разработки драйвера 09.03.2006, версия 8.4.2.1
а у тебя какая карта?
Сg Еффект - не могу получить технику.16 авг. 200611:09#2
Ну неужели никто не может ничего сказать???
LUA16 авг. 200611:06#7
xapac
>В mvc вроеде все работает провожу теже действия с CBuilder 6
>линковщик ругается
если линкуешь в VC++ то для убого дебилдера попробуй пребразуй *.lib через com2omf.exe(в акталоге BIN) т.е.  примерно так в командной строке
coff2omf.exe lua_vc.lib lua_cb.lib и подключи преобразованную либу.
и вообще кидай это дебилдер...

Сg Еффект - не могу получить технику.14 авг. 200615:06#0
Привет всем!!!
с шейдерах не силен. Попробывал переделать шейдер из HLSL в Cg Fx.
загружаю все стандартно т.к. остальные рабочие примеры моим кодом грузяться.
но не могу получить технику после загрузки своего эффекта.
вот участок кода показывающий проблему:
void CgFXProgram::LoadEffect() // загрузка эффекта
{
  effect = cgCreateEffectFromFile(cgContext, shaderFileName.c_str(), NULL);
  CheckForCgError(shaderFileName);
  OutListing();
  if (!effect) {
    return;
  }  
  technique = cgGetFirstTechnique(effect); // получить первую технику
  while (technique && cgValidateTechnique(technique) == CG_FALSE) {
    technique = cgGetNextTechnique(technique);
  }
}
technique  == NULL;
хотя шедер создается и нет сроки листинга(cgGetLastListing(cgContext) == NULL ) с ошибками.
вот сам шедер эффекта:
float4x4 worldViewProj : ModelViewProjection;    // произведение World * View * Projection
float4x4 world;      // мировая матрица объекта
float4x4 mvit : ModelViewIT;
texture Texture0;    // текстура
texture Texture1;    // текстура
float time;      // просто переменная  
uniform float intensity_sq, intensity; // интенсивность и квадрат интенсивности
float4 horizon = {0.9f, 0.7f, 0.7f, 1.0f};  
float4 bbox = {2.0f, 0.3f, 2.0f, 1.0f};  
    

float3 Color = float3(0,1,0);

// Texture samler
sampler2D modelTextureSampler0 = sampler_state
{
      generateMipMap = true;
      minFilter = LinearMipMapLinear;
  magFilter = Linear;
      mipfilter = Linear;
};

// Texture samler
sampler2D modelTextureSampler1 = sampler_state
{
      generateMipMap = true;
      minFilter = LinearMipMapLinear;
  magFilter = Linear;
      mipfilter = Linear;

};

//////////////////////////////////////////////////////////////
//Structures
//////////////////////////////////////////////////////////////

//Application to vertex shader
struct VS {  // вершинный шейдер
    float4 position : POSITION0;
    float3 normal   : NORMAL0;
    float2 texCoord0 : TEXCOORD0;
    float2 texCoord1 : TEXCOORD1;
};

//Vertex shader to pixel shader
struct PS { // пиксельный шейдер
    float4 position : POSITION0;
    float2 texCoord0 : TEXCOORD0;    
    float2 texCoord1  : TEXCOORD1;
    float2  intensity : TEXCOORD2;
};

//////////////////////////////////////////////////////////////
//Vertex Shader
//////////////////////////////////////////////////////////////
void VS_shader( in VS IN, out PS OUT) 
{
    OUT.position = mul(IN.position, worldViewProj);        
    
    OUT.intensity.x    = OUT.position.y / bbox.y;
     OUT.intensity.x    = exp(clamp(OUT.intensity.x, 0.0f, 1.0f)) / 1.8f;
     OUT.intensity.y = OUT.intensity.x * OUT.intensity.x;     
     OUT.texCoord0 = float4(OUT.position.x / 2.0f + time, OUT.position.z / 1.0f, 0.0f, 0.0f);
     OUT.texCoord1 = float4(OUT.position.x + time / 2.0f, OUT.position.z, 0.0f, 0.0f);
}

//////////////////////////////////////////////////////////////
//Pixel Shader
//////////////////////////////////////////////////////////////
float4 PS_shader(in PS IN) : COLOR
{
  float4 clouds_0 = tex2D(modelTextureSampler0, IN.texCoord0);
  float4 clouds_1 = tex2D(modelTextureSampler1, IN.texCoord1);
  
     float4 clouds = (clouds_0 + clouds_1) * IN.intensity.y;

     float4 cloud_color = float4((1.0 - IN.intensity.x) * horizon.x, (1.0 - IN.intensity.x) * horizon.y, IN.intensity.x * horizon.z, 0.0);
     return cloud_color * (1.0 - clouds.x) + clouds;  
}

//////////////////////////////////////////////////////////////
//Techniques
//////////////////////////////////////////////////////////////
technique Sky
{
   pass {
        VertexProgram = compile vp40 VS_shader(in VS, out PS);
        FragmentProgram = compile fp40 PS_shader(in PS);
    }
}
пробовал ставить разные профили компиляции arbvp1, arvfp1, vp20, fp20 ничего не помогает. Что я делаю не так?
спасибо всем заранее.
С Уважением Андрей.
new & malloc13 авг. 200623:03#15
keltar
>cppguru
>а что юзать?
может имеется ввиду std::vector<T>
glueray
>realloc - ненужная и тормознутая вещь, да еще к тому же может работать неправильно
это почему иормозная? для каких размеров? сотни Кб или сотни Мб ?
>(если в программе есть ссылки на перемещаемые объекты)
это уже надо по другому делать...
Feaerenil
>VirtualAllocEx =)
а если размер памяти мал, то будет ли эффективно? а если это Unix Ос ? ;)
Гаснет экран, при обращении к члену указателя13 авг. 200611:16#8
Striker_Dev.
Экран гаснет если запускать из под среды отладки?
Release/Debug ???
ну только  код можно запостить или денлай детальный лог перед обращением к членцу класса вывод и адрес.

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

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