Войти
OpenGL communityФорумРазвитие сообщества

Обсуждение дальнейших уроков (3 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 3 4 514 Следующая »
#30
18:00, 29 окт. 2010

Да, без разницы, по-моему.


#31
18:30, 29 окт. 2010

KpeHDeJIb
> Лучше сделать на кажды тип отдельный шейдер? Сделать в одном шейдере обсчет с условиями?

Лучше отдельные шейдеры...

#32
22:42, 29 окт. 2010

Готов черновой вариант пятого урока:
"Урок 5 - Свет, камера, материал! Часть 2"
http://code.google.com/p/gl33lessons/wiki/Lesson05

#33
22:45, 29 окт. 2010

Переносить сюда буду после того как скорректирую урок окончательно :)

#34
0:57, 30 окт. 2010

KpeHDeJIb

// добавим к коду вершинного шейдера параметры
const GLchar *source[2] = {(const GLchar*)vertexShaderDefines, (const GLchar*)shaderSource};
const GLint  length[2] = {sizeof(vertexShaderDefines), sourceLength};

У меня код шейдеров не компилируется, лечится так: sizeof(vertexShaderDefines)-1
Видимо, завершающий ноль в строке обламывает нвидиевский компилятор.

#35
1:17, 30 окт. 2010

stream
> У меня код шейдеров не компилируется, лечится так:
> sizeof(vertexShaderDefines)-1
> Видимо, завершающий ноль в строке обламывает нвидиевский компилятор.

Хм, спасибо за подсказку, завтра посмотрю как проснусь :)

#36
8:22, 30 окт. 2010

Делается всё просто, когда считывается с файла, то выделяется на один байт больше массив, и в последний элемент записывается /0:

  GLchar *shaderSource = new char[filestats.st_size + 1];
  int bytes = (int)fread(shaderSource, 1, filestats.st_size, file);
  shaderSource[bytes] = 0;

А в glShaderSource последним параметром выставляется NULL,.. Вот и всё, и не надо с длиннами строк мудрить...

#37
11:58, 30 окт. 2010

Executor
> А в glShaderSource последним параметром выставляется NULL,.. Вот и всё, и не
> надо с длиннами строк мудрить...

Опять nVidia чудит :) Зачем интересно тогда передавать длину исходника, чтобы потом еще \0 вставлять? Пичаль (

#38
12:06, 30 окт. 2010

Executor
> А в glShaderSource последним параметром выставляется NULL,.. Вот и всё, и не
> надо с длиннами строк мудрить...

Кстати stream правду говорит, \0 не надо вставлять в буфер, так сказано glShaderSource,:
"Each element in the length array may contain the length of the corresponding string (the null character is not counted as part of the string length)"

Поэтому как раз решение с sizeof(string) - 1 правильное, т.к. \0 является частью строки в данном случае и попадает в sizeof. Его надо исключить.

#39
12:13, 30 окт. 2010

Зачем мудрить? Ставь NULL и всё, как встретился в строке ноль, так строка и закончилась, не мудри с длинной...
If length is NULL, each string is assumed to be null terminated.
Всё, и нет проблем и голову ломать не надо...

#40
12:18, 30 окт. 2010

Executor
> Всё, и нет проблем и голову ломать не надо...

Так зачем, я не ломаю олову, длина все равно известна, а чтобы ноль вставлять это надо переделывать
процедуру получения файла, которая используется например и для чтения файла с текстурой, т.е. и там
надо переделать будет. Зачем? Проще в двух местах написать "-1", чем в четырех напряженно думать.
Тем более что использовать ограничитель длины я считаю более корректно, чем использовать NULL.

#41
12:21, 30 окт. 2010

KpeHDeJIb
> Тем более что использовать ограничитель длины я считаю более корректно, чем использовать NULL.

Ну с другой стороны да...
Лучше жёстко ограничить, чем иметь шанс получить сорс в несколько мб... :)

#42
12:50, 30 окт. 2010

Executor
Да кстати, вот я выложил новый архив с исправлениями - проверьте у кого nVidia, по F1-F3 должны переключаться типы источников освещения.
На скриншоте к уроку представлен третий тип - спот лайт.

#43
12:57, 30 окт. 2010

Ссылку забыл дать
http://code.google.com/p/gl33lessons/downloads/detail?name=lesson05.zip

#44
13:08, 30 окт. 2010

Всё норм...
Наверное стоит показать как у спота сделать плавный переход между светом и тенью... В следующем уроке например...

Страницы: 1 2 3 4 514 Следующая »
OpenGL communityФорумРазвитие сообщества

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