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

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

HLSL инициализация14 июня 200711:02#1
xeda
эм... DirextX Debug что говорит?
Тут не телепаты давай минимум кусок кода. и код шейдера.
Cg->GL_ARB_vertex_program, не работает простейший вершинный шейдер14 июня 200710:58#2
innuendo
Пробовал :( Не помогло. Еще надо попробовать с разными вариантами.
С оcтальным все нормально?
Cg->GL_ARB_vertex_program, не работает простейший вершинный шейдер13 июня 200720:12#0
Привет всем!
компилю простейший шейдер с помощью Cg 1.5.0019(февральское обновление) в профиль arbvp1
вот шейдер:
struct PS {
    float4 position     : POSITION;         // position in projection space
    float2 uv0          : TEXCOORD0;        // texture coordinate
};

uniform float4x4 ModelViewProjection : WorldViewProj; // the model*view*projection matrix

PS vsMain(float4 position : POSITION, float2 uv0 : TEXCOORD0)
{

  PS vsOut;
  vsOut.position = mul(position, ModelViewProjection);
  vsOut.uv0 = uv0;
  return vsOut;
}
вот что выдается в результате:
!!ARBvp1.0
# cgc version 1.5.0019, build date Feb 22 2007 06:27:05
# command line args: -q -profile arbvp1 -entry vsMain NumTemps=48 MaxInstructions=512 MaxAddressRegs=2 MaxLocalParams=256
#vendor NVIDIA Corporation
#version 1.5.0.19
#profile arbvp1
#program vsMain
#semantic DiffSampler
#semantic ModelViewProjection : WORLDVIEWPROJ
#var float4 position : $vin.POSITION : POSITION : 0 : 1
#var float2 uv0 : $vin.TEXCOORD0 : TEXCOORD0 : 1 : 1
#var sampler DiffSampler :  :  : -1 : 0
#var float4x4 ModelViewProjection : WORLDVIEWPROJ : c[1], 4 : -1 : 1
#var float4 vsMain.position : $vout.POSITION : HPOS : -1 : 1
#var float2 vsMain.uv0 : $vout.TEXCOORD0 : TEX0 : -1 : 1
PARAM c[5] = { program.local[0..4] };
MOV result.texcoord[0].xy, vertex.texcoord[0];
DP4 result.position.w, vertex.position, c[4];
DP4 result.position.z, vertex.position, c[3];
DP4 result.position.y, vertex.position, c[2];
DP4 result.position.x, vertex.position, c[1];
END
# 5 instructions, 0 R-regs

Гружу шейдер как обычно:

// получить идентификатор
glGenProgramsARB(1, &id);
// проверка ошибки OpenGL
oglRender->CheckOpenGLError();
// выбрать
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, id);  
// загрузить программу    
glProgramStringARB(GL_VERTEX_PROGRAM_ARB, 
      GL_PROGRAM_FORMAT_ASCII_ARB, 
                 static_cast<GLsizei>(len), data);
// проверка ошибок
if (!CheckARBProgramError()) {
    return NULL;
}
....
где data это const char* содержащий asm код выданный Cg.
использую так, сначала вычисляю перемножение model*view*projection
и записываю это в структуру описания констант:
// получить текущую видовую матрицу
glGetFloatv(GL_MODELVIEW_MATRIX, world);
// получить указатель на хранение констант(std::vector<float> == 16 элементов)
Matrix4x4 *worldViewProj = reinterpret_cast<Matrix4x4 *>(&afIt->constantData[0]);
// матрица камеры
const Matrix4x4 &view = camera.GetViewMatrix();
// матрица проекций
const Matrix4x4 &proj = camera.GetProjectionMatrix();
// перемножение 3 матриц
(*worldViewProj) = (*reinterpret_cast<const Matrix4x4 *>(&world)) * view * proj; 
далее стандартный код использования GL_ARB_vertex_program:
// разрешить использование 
glEnable(GL_VERTEX_PROGRAM_ARB);
// выбрать текущую программу
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, shader);
далее установка конатант:
// установить константу
glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, static_cast<GLuint>(afIt->startIndex), &afIt->constantData[0]);
glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, static_cast<GLuint>(afIt->startIndex + 1), &afIt->constantData[4]);
glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, static_cast<GLuint>(afIt->startIndex + 2), &afIt->constantData[8]);
glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, static_cast<GLuint>(afIt->startIndex + 3), &afIt->constantData[12]);
// отрисовка геометрии
....
// выбрать пустую ARB программу
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0);
glDisable(GL_VERTEX_PROGRAM_ARB);

afIt->startIndex == 1;
Без вершинного шейдера все работает. Проcтейший пиксельный шейдер то же работает.
пробовал перемножать матрицы без world т.е. (*worldViewProj) = view * proj;  Грешил на неправильное перемножение матриц
попробовал сделать это с иcпользованием D3DX с world и без world.
поменял в шейдере местами position и ModelViewProjection т.е.
vsOut.position = mul(ModelViewProjection, position);
попробовал перемножение матриц со своим классом и D3DX, с world и без world
Ничего не помогло!
Пробовал на картах Radeon X1300(драйвера последние 7.5) и GeForce 6600 (там правда NVPerfHUD)
GL_NO_ERROR == glGetError() всегда.
Что я делаю не так?
спасибо всем заранее с Уважением Андрей.

Обертки для работы с GLSL, у кого как?13 июня 200715:09#6
KpeHDeJIb
передача параметров только через Uniform, заранее уже пропарсенные при загрузки.
Parallax Demo13 июня 200714:49#32
paladinrus
112 FPS Hight GeForce 6600
Tokamak стала open-source. (комментарии)8 июня 200716:34#8
GLoom
RagDroll ?
Texture manager7 июня 200719:45#8
0r@ngE
>хотя блин не хотелось STL юзать
аргументы? попробуй STLPort одна из лучших реализаций
http://www.stlport.org/
Стиль кодирования (C++). Кто как пишет? Опрос.7 июня 200716:38#40
1. б
 поправка:
void main() 
{
  if(1) {
  }
}
2. б
3. б
4. а
5. б
6. в
Организация разделения систем рендеринга в игровом движке7 июня 200711:22#12
widget_fx
>смотрел в ОГРе, там както по другому всетаки сделано
там сделано так-же.
Ghost2,Спец,  cppboris правы.
забей макросами
#ifdef _WIN32 
...
#endif
все файлы Cpp и H что связано с Direct3D. чтобы вообще не подключалось и не компилилось.
для OpenGL нужно еще переделать инициализация под другую платформу. Хотя тут может помочь SDL.
Transparent Shadows demo - Revisited4 июня 200713:55#21
NULL_PTR
>>около 13 FPS на GeForce 6600.
>Хм, у меня на Radeon9800pro на максимуме - 15 avarage fps.
может и-за того что у меня NVPerfHUD ?
Tokamak стала open-source. (комментарии)1 июня 200713:29#5
XIRMAC
Это очнь хорошая идея. Есть с ним проблемы.
Transparent Shadows demo - Revisited31 мая 200719:46#4
NULL_PTR
около 13 FPS на GeForce 6600.
Occlusion Culling на ландшафте31 мая 200718:26#11
Petelnikov
Спасибо за сслыки!
По поводу ссылок 6-8
Извиняюсь за ламерский вопрос а чем открывать файлы *.ps ? :)
Перлы Форума Gamedev.ru31 мая 200713:26#2628
NULL_PTR
:)))))))))))))))))))))))))))))))))))

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

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