Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2012, 16:27   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Шейдеры (HLSL) и OpenGL

Всем привет. Подскажите пожалуйста, желательно кодом, как вытащить из файла *.txt, где лежит код шейдера переменную типа SamplerCube, в программе задать ей значение и загнать опять в шейдер. Ищу-ищу, - никак найти не могу. Какой тип этой переменной соответствует в языке программирования c/delphi? И какую функцию юзать из glUniform, чтобы обратно запихнуть в шейдер значение?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 09.04.2012, 18:34   #2
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

квик реф огл33 там глянь раздел по глсл квик реф. столбик с типами.
samplerCube - float
isamplerCube - int
usamplerCube - unsigned int

glUniform1f /i /u - В зависимости от семплера в шейдере.

ищи в тексте код, который отвечает за фрагментный шейдер строку, начало которой что-то вроде -->
uniform samplerСube mySuperPuperCubemap

узнаешь локацию так ->
cubeTexLocation = glGetUniformLocation(ShaderProgram, 'mySuperPuperCubemap');

задаешь значение семплеру так ->
glUniform1f(cubeTexLocation, value )
Warn вне форума Ответить с цитированием
Старый 11.04.2012, 09:53   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Warn, с этим разобрался, благодаря помощи. Хочу проверить правильность работы с кубической текстурой перед тем, как запихнуть её в шейдер. Т.е. вырубаю шейдер, и делаю следующее:
Код:
...
var
 CubeMapTexture : GLuint;

...//Где-то до цикла рисования
loadTexture(имя файла, CubeMapTexture);
CreateCubeMap(@CubeMapTexture);
Код:
glEnable(GL_TEXTURE_CUBE_MAP_ARB);
glBegin;
 //Рисую обычный кубик (6 сторон с нормалями)
glEnd;
glDisable(GL_TEXTURE_CUBE_MAP_ARB);
процедура инициализации cubemap примерно следующая:
Код:
procedure CreateCubeMap(texture : PGLuint);
begin
 glGenTextures(1, PGLuint);
 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, ^texture);
 glTexEnvi ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
 
 glTexParameteri ( GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S,  GL_CLAMP_TO_EDGE );
 glTexParameteri ( GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );;
 glTexParameteri ( GL_TEXTURE_CUBE_MAP_ARB,  GL_TEXTURE_MIN_FILTER,                   GL_LINEAR_MIPMAP_LINEAR );
 glTexParameteri ( GL_TEXTURE_CUBE_MAP_ARB,  GL_TEXTURE_MAG_FILTER, GL_LINEAR );
 for i := 0 to 5 do
  glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + i, 0, GL_RGB, 32, 32, 0,  GL_RGB, GL_UNSIGNED_BYTE, nil);
end;
Но кубик окрашивается просто в какой-то непонятный цвет (зеленоватый и никакая текстура на него не натягивается). Наверное я где-то что-то не дописал... Но где? А когда подключаю шейдер, то зеленоватый цвет превращается в ярко зеленый...
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 11.04.2012 в 10:00.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 11.04.2012, 18:54   #4
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Цитата:
//Рисую обычный кубик (6 сторон с нормалями)
можно предположить что проблема может быть тут.
поскольку у вершин составляющих куб должна быть еще и развертка.
то есть вершина в виде
Код:
type vertex = record
  pos : vec3 - позиция
  norm : vec3 - нормаль
  tex : vec3 - текстурные координаты(вектор направления vec3(S, T, R))
end;
нивидия tut прочитай Mapping Texture Coordinates to Cube Map Faces и далее - в конце тутора.
Warn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шейдеры в OpenGL для начинающих. _PROGRAMM_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 21.12.2020 23:43
DirectX HLSL Текстурирование Celestia Мультимедиа в Delphi 1 03.02.2011 08:59
BitmapEffects -> HLSL, Shaders BOBAH13 Общие вопросы .NET 0 31.10.2010 23:23
Шейдеры _-Re@l-_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 01.08.2010 14:33