Сообщения на форуме пользователя Andrey (42 стр.)
Как определить колчество элементов массиве по указателю? | 27 сен. 2010 | 13:06 | #25 |
---|
KpeHDeJIb
> вообще под линукс проф.разработка идет, у нас тут функций вроде _msize не любят
> :)
кстати есть аналог ?
> вообще под линукс проф.разработка идет, у нас тут функций вроде _msize не любят
> :)
кстати есть аналог ?
Как определить колчество элементов массиве по указателю? | 27 сен. 2010 | 12:24 | #23 |
---|
KpeHDeJIb
> Для статических массивов никогда не было проблем в определении размера без
> всяких _msize
> А у вектора так и вообще есть метод size()
Я вообще показал как имея указатель на память выделенную в куче, получить число элементов, вектор взял всего лишь для удобства, что-бы меньше писать, внутри у него аллокатор по умолчанию вызывает new.
> Для статических массивов никогда не было проблем в определении размера без
> всяких _msize
> А у вектора так и вообще есть метод size()
int* x = new int[100]; size_t num = ArrayNumElements(x); // num == 100 delete [] x;
Как определить колчество элементов массиве по указателю? | 27 сен. 2010 | 11:40 | #21 |
---|
ezhickovich
#include <cassert> #include <malloc> template<typename T> size_t ArrayNumElements(const T* array) { assert(array && "NULL Pointer"); return _msize(const_cast<T *>(array)) / sizeof(array[0]); }
тест:
std::vector<int> x(100); size_t num = ArrayNumElements(&x[0]); // num == 100
Раскрытие циклов в Cg | 25 сен. 2010 | 22:06 | #39 |
---|
Neptune
> Вопрос немного не по теме: можно ли использовать HLSL в OpenGL? Без привязки к
> DX библиотекам, чтоб можно было портировать прогу на linux. И без двухэтажной
> компиляции через Cg:)
Можно используй Cg OpenGL Run Time и не парься с компиляцией. Еще раз подчеркну он тормозит. На сайте nVidia несколько раз народ писал про это, в том числе и я.
> Вопрос немного не по теме: можно ли использовать HLSL в OpenGL? Без привязки к
> DX библиотекам, чтоб можно было портировать прогу на linux. И без двухэтажной
> компиляции через Cg:)
Можно используй Cg OpenGL Run Time и не парься с компиляцией. Еще раз подчеркну он тормозит. На сайте nVidia несколько раз народ писал про это, в том числе и я.
OpenGL: Посоветуйте насчет CSM... | 25 сен. 2010 | 22:00 | #156 |
---|
arabesc
>Это как? Она конечно не с целым файлом сразу работает, на данные сжатые на вход прекрасно принимает.
Автор наверное имел ввиду полностью файл в памяти. т.е. вместе с заголовком и т.д. Вот я и уточнил.
SNVampyre
> Ты думаешь, много кто пользуется сжатыми текстурами?
> Забей на них.
Ты что!!!??? Исключительно сжатые текстуры для нормального современного движка. Для демок пойдут любые.
-Eugene-
> Зависит ли время бинда буффера от его размеров?
почитай вот это.
http://www.gamedev.ru/community/gamedev_lecture/articles/?id=683&page=2
Ведь по сути выполнения функции glBindBuffer не думаю что большое, больше занимает установка указателей. Ты можешь сам замерить это. Вообще все зависит от реализации драйвера вендором.
>Это как? Она конечно не с целым файлом сразу работает, на данные сжатые на вход прекрасно принимает.
Автор наверное имел ввиду полностью файл в памяти. т.е. вместе с заголовком и т.д. Вот я и уточнил.
SNVampyre
> Ты думаешь, много кто пользуется сжатыми текстурами?
> Забей на них.
Ты что!!!??? Исключительно сжатые текстуры для нормального современного движка. Для демок пойдут любые.
-Eugene-
> Зависит ли время бинда буффера от его размеров?
почитай вот это.
http://www.gamedev.ru/community/gamedev_lecture/articles/?id=683&page=2
Ведь по сути выполнения функции glBindBuffer не думаю что большое, больше занимает установка указателей. Ты можешь сам замерить это. Вообще все зависит от реализации драйвера вендором.
OpenGL: Посоветуйте насчет CSM... | 24 сен. 2010 | 16:22 | #110 |
---|
-Eugene-
>Что передавать в качестве указателя? Сжатый файл в памяти или данные текстуры без заголовка?
Не может функция glCompressedTexImage2D работать с сжатым файлом. Передавать туда нужно указатель на массив пикселей, соответствующего мип уровня.
>И где тут указывается собственно формат текстуры? astral.dll-ом что ли?
3 параметром.
>Что передавать в качестве указателя? Сжатый файл в памяти или данные текстуры без заголовка?
Не может функция glCompressedTexImage2D работать с сжатым файлом. Передавать туда нужно указатель на массив пикселей, соответствующего мип уровня.
>И где тут указывается собственно формат текстуры? astral.dll-ом что ли?
3 параметром.
Новая версия FAR. А вы пользуетесь FAR-ом? | 24 сен. 2010 | 11:05 | #16 |
---|
Я пользуюсь. Офигенный менеджер.
OpenGL: Посоветуйте насчет CSM... | 22 сен. 2010 | 18:16 | #82 |
---|
-Eugene-
> Можете ли вы мне рассказать, какие ф-ции устарели и использовать их не стоит?
смотри файл gl3.h, он тебе все подскажет. Все функции что есть в gl.h и нету в gl3.h устарели.
> Призываю Экзекутора!(Кстати, это переводится как Исполнитель или Палач?). И
> еще: чему отдавать предпочтение: glFooooo(...) OR glFooooooARB(...)?
На Intel видюхах и старых дровах, может быть такая ситуация glFoooooARB != NULL, а NULL == glFooooo.
Иными словами
.
К сожалению к примеру glew данную проблему не учитывает.
так- что можно вручную сохранить указатели.
Предпочтительней использовать без ARB. Многие расширения перешли в ядро OpenGL и используются без ARB.
> Можете ли вы мне рассказать, какие ф-ции устарели и использовать их не стоит?
смотри файл gl3.h, он тебе все подскажет. Все функции что есть в gl.h и нету в gl3.h устарели.
> Призываю Экзекутора!(Кстати, это переводится как Исполнитель или Палач?). И
> еще: чему отдавать предпочтение: glFooooo(...) OR glFooooooARB(...)?
На Intel видюхах и старых дровах, может быть такая ситуация glFoooooARB != NULL, а NULL == glFooooo.
Иными словами
wglGetProcAdress("glFoooooARB") != NULL, но! wglGetProcAdress("glFooooo") == NULL; |
К сожалению к примеру glew данную проблему не учитывает.
так- что можно вручную сохранить указатели.
Предпочтительней использовать без ARB. Многие расширения перешли в ядро OpenGL и используются без ARB.
OpenGL: Посоветуйте насчет CSM... | 22 сен. 2010 | 11:08 | #72 |
---|
-Eugene-
> glBufferData(GL_ARRAY_BUFFER, 3 * 3 * 4 * 2, &(v[0]), GL_STATIC_DRAW);
3 * 3 * 4 * 2 != sizeof(TVertex);
3 * 3 * 4 * 2 != sizeof(v);
Ты случайно не бывший дельфист? почитай про приоритеты операций кстати.
Убери glIndexPointer.
> glBufferData(GL_ARRAY_BUFFER, 3 * 3 * 4 * 2, &(v[0]), GL_STATIC_DRAW);
3 * 3 * 4 * 2 != sizeof(v);
glBufferData(GL_ARRAY_BUFFER, sizeof(v), &v[0], GL_STATIC_DRAW);
Убери glIndexPointer.
Правка ошибся в размере вершинных данных. Понял по посту Executor
Правка: 22 сен. 2010 12:40
OpenGL: Посоветуйте насчет CSM... | 21 сен. 2010 | 23:41 | #67 |
---|
-Eugene-
>В ДХ чтобы вывести пару отладочных линий или ООББ нужно канителиться с буфферами. Я говорю про такое использование.
будет все тормозить если ты поверху сцены будешь так рисовать OOBB на нормальной сцене где в кадре десятки тысяч объектов. Лучше визуальную отладку сделать нормальную. Я в любом случае так не рисовал.
>В ДХ чтобы вывести пару отладочных линий или ООББ нужно канителиться с буфферами. Я говорю про такое использование.
будет все тормозить если ты поверху сцены будешь так рисовать OOBB на нормальной сцене где в кадре десятки тысяч объектов. Лучше визуальную отладку сделать нормальную. Я в любом случае так не рисовал.
OpenGL: Посоветуйте насчет CSM... | 20 сен. 2010 | 16:15 | #12 |
---|
-Eugene-
Вот тебе код одной из функций
> Тогда использовать сторонние либы? Хм. Можешь посоветовать либу на асме?
Используй D3DX библиотеку и не мучайся. Либо пиши свою математическую библиотеку.
библиотек много очень. Посмотри nvmath к примеру.
Вот тебе код одной из функций
void FASTCALL __glMultMatrix(__GLmatrix *r, const __GLmatrix *a, const __GLmatrix *b) { __GLfloat b00, b01, b02, b03; __GLfloat b10, b11, b12, b13; __GLfloat b20, b21, b22, b23; __GLfloat b30, b31, b32, b33; GLint i; b00 = b->matrix[0][0]; b01 = b->matrix[0][1]; b02 = b->matrix[0][2]; b03 = b->matrix[0][3]; b10 = b->matrix[1][0]; b11 = b->matrix[1][1]; b12 = b->matrix[1][2]; b13 = b->matrix[1][3]; b20 = b->matrix[2][0]; b21 = b->matrix[2][1]; b22 = b->matrix[2][2]; b23 = b->matrix[2][3]; b30 = b->matrix[3][0]; b31 = b->matrix[3][1]; b32 = b->matrix[3][2]; b33 = b->matrix[3][3]; for (i = 0; i < 4; i++) { r->matrix[i][0] = a->matrix[i][0]*b00 + a->matrix[i][1]*b10 + a->matrix[i][2]*b20 + a->matrix[i][3]*b30; r->matrix[i][1] = a->matrix[i][0]*b01 + a->matrix[i][1]*b11 + a->matrix[i][2]*b21 + a->matrix[i][3]*b31; r->matrix[i][2] = a->matrix[i][0]*b02 + a->matrix[i][1]*b12 + a->matrix[i][2]*b22 + a->matrix[i][3]*b32; r->matrix[i][3] = a->matrix[i][0]*b03 + a->matrix[i][1]*b13 + a->matrix[i][2]*b23 + a->matrix[i][3]*b33; } } |
Используй D3DX библиотеку и не мучайся. Либо пиши свою математическую библиотеку.
библиотек много очень. Посмотри nvmath к примеру.
OpenGL: Посоветуйте насчет CSM... | 20 сен. 2010 | 16:09 | #9 |
---|
-Eugene-
> Т.е. у объекта хранится матрица мира, но при рендеринге она множится на матрицу
> вида, которая сформирована также заранее?
да именно так. В Direct3D ты делаешь
в OpenGL ты делаешь glLoadMatrixf(world * view); //
> А почему хлам? Я думал, эт ф-ции были написаны на асме и оптимизированы....
> И все таки?
Так-же поройся в исходниках Windows и все станет ясно что это далеко не так...
Данный функции находятся в opengl32.dll и они написаны в далекие времена используют обычный FPU, зачем это нужно Microsoft? если ты возьмешь реализацию от SGI тол возможно там все по другому.
В драйверах ATI, nvidia(по крайней мере в nvoglnt.dll) их нету.
> Т.е. у объекта хранится матрица мира, но при рендеринге она множится на матрицу
> вида, которая сформирована также заранее?
да именно так. В Direct3D ты делаешь
SetTransform(D3DTS_VIEW, view); SetTransform(D3DTS_D3DTS_WORLD, world);
> А почему хлам? Я думал, эт ф-ции были написаны на асме и оптимизированы....
> И все таки?
Так-же поройся в исходниках Windows и все станет ясно что это далеко не так...
Данный функции находятся в opengl32.dll и они написаны в далекие времена используют обычный FPU, зачем это нужно Microsoft? если ты возьмешь реализацию от SGI тол возможно там все по другому.
В драйверах ATI, nvidia(по крайней мере в nvoglnt.dll) их нету.
OpenGL: Посоветуйте насчет CSM... | 20 сен. 2010 | 15:55 | #3 |
---|
-Eugene-
>2. Куда делись раздельные MODEL и VIEW матрицы и что с этим делать?
если ты не будешь использовать FFP(в частности всякий хлам glTranlate, glRotate, glScale) то это вообще не имеет значения. все равное в шейдер будешь передавать
world * view * proj это одинаково для OpenGL/Direct3D.
>2. Куда делись раздельные MODEL и VIEW матрицы и что с этим делать?
если ты не будешь использовать FFP(в частности всякий хлам glTranlate, glRotate, glScale) то это вообще не имеет значения. все равное в шейдер будешь передавать
world * view * proj это одинаково для OpenGL/Direct3D.
Отказ от POOL_MANAGED ресурсов, нужна помощь | 17 сен. 2010 | 12:59 | #24 |
---|
Outlaw
> как они определяют какие текстуры близко а какие далеко?в общих словах чтоб
> идею уловить.
может по расстоянию от камеры до текущего рисуемом ого объекта, с учетом его ограничивающего тела ориентации и т.д., у которого есть текущий установленный материал с текстурами.
> как они определяют какие текстуры близко а какие далеко?в общих словах чтоб
> идею уловить.
может по расстоянию от камеры до текущего рисуемом ого объекта, с учетом его ограничивающего тела ориентации и т.д., у которого есть текущий установленный материал с текстурами.
C Днем Программиста! | 14 сен. 2010 | 14:40 | #23 |
---|
Dimich
Офигенная песня! тока уж очень много низкоуровневых понятий :) Боюсь больше половины многие не поймут...
Офигенная песня! тока уж очень много низкоуровневых понятий :) Боюсь больше половины многие не поймут...