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

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

Как определить колчество элементов массиве по указателю?27 сен. 201013:06#25
KpeHDeJIb
> вообще под линукс проф.разработка идет, у нас тут функций вроде _msize не любят
> :)
кстати есть аналог ?
Как определить колчество элементов массиве по указателю?27 сен. 201012:24#23
KpeHDeJIb
> Для статических массивов никогда не было проблем в определении размера без
> всяких _msize
> А у вектора так и вообще есть метод size()
int* x = new int[100];
size_t num = ArrayNumElements(x); // num == 100
delete [] x;
Я вообще показал как имея указатель на память выделенную в куче, получить число элементов, вектор взял всего лишь для удобства, что-бы меньше писать, внутри у него аллокатор по умолчанию вызывает new.
Как определить колчество элементов массиве по указателю?27 сен. 201011: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

Раскрытие циклов в Cg25 сен. 201022:06#39
Neptune
> Вопрос немного не по теме: можно ли использовать HLSL в OpenGL? Без привязки к
> DX библиотекам, чтоб можно было портировать прогу на linux. И без двухэтажной
> компиляции через Cg:)
Можно используй Cg OpenGL Run Time и не парься с компиляцией. Еще раз подчеркну он тормозит. На сайте nVidia несколько раз народ писал про это, в том числе и я.
OpenGL: Посоветуйте насчет CSM...25 сен. 201022:00#156
arabesc
>Это как? Она конечно не с целым файлом сразу работает, на данные сжатые на вход прекрасно принимает.
Автор наверное имел ввиду полностью файл в памяти. т.е. вместе с заголовком и т.д. Вот я и уточнил.
SNVampyre
> Ты думаешь, много кто пользуется сжатыми текстурами?
> Забей на них.
Ты что!!!??? Исключительно сжатые текстуры для нормального современного движка. Для демок пойдут любые.
-Eugene-
> Зависит ли время бинда буффера от его размеров?
почитай вот это.
http://www.gamedev.ru/community/gamedev_lecture/articles/?id=683&page=2
Ведь по сути выполнения функции glBindBuffer не думаю что большое, больше занимает установка указателей. Ты можешь сам замерить это. Вообще все зависит от реализации драйвера вендором.
OpenGL: Посоветуйте насчет CSM...24 сен. 201016:22#110
-Eugene-
>Что передавать в качестве указателя? Сжатый файл в памяти или данные текстуры без заголовка?
Не может функция glCompressedTexImage2D работать с сжатым файлом. Передавать туда нужно указатель на массив пикселей, соответствующего мип уровня.
>И где тут указывается собственно формат текстуры? astral.dll-ом что ли?
3 параметром.
Новая версия FAR. А вы пользуетесь FAR-ом?24 сен. 201011:05#16
Я пользуюсь. Офигенный менеджер.
OpenGL: Посоветуйте насчет CSM...22 сен. 201018:16#82
-Eugene-
> Можете ли вы мне рассказать, какие ф-ции устарели и использовать их не стоит?
смотри файл 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 сен. 201011: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);
glBufferData(GL_ARRAY_BUFFER, sizeof(v), &v[0], GL_STATIC_DRAW); 
Ты случайно не бывший дельфист? почитай про приоритеты операций кстати.
Убери glIndexPointer.

Правка ошибся в размере вершинных данных. Понял по посту Executor

Правка: 22 сен. 2010 12:40

OpenGL: Посоветуйте насчет CSM...21 сен. 201023:41#67
-Eugene-
>В ДХ чтобы вывести пару отладочных линий или ООББ нужно канителиться с буфферами. Я говорю про такое использование.
будет все тормозить если ты поверху сцены будешь так рисовать OOBB на нормальной сцене где в кадре десятки тысяч объектов. Лучше визуальную отладку сделать нормальную. Я в любом случае так не рисовал.
OpenGL: Посоветуйте насчет CSM...20 сен. 201016:15#12
-Eugene-
Вот тебе код одной из функций
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 сен. 201016:09#9
-Eugene-
> Т.е. у объекта хранится матрица мира, но при рендеринге она множится на матрицу
> вида, которая сформирована также заранее?
да именно так. В Direct3D ты делаешь
SetTransform(D3DTS_VIEW, view);
SetTransform(D3DTS_D3DTS_WORLD, world);
в OpenGL ты делаешь glLoadMatrixf(world * view); //
> А почему хлам? Я думал, эт ф-ции были написаны на асме и оптимизированы....
> И все таки?
Так-же поройся в исходниках Windows и все станет ясно что это далеко не так...
Данный функции находятся в opengl32.dll и они написаны в далекие времена используют обычный FPU, зачем это нужно Microsoft? если ты возьмешь реализацию от SGI тол возможно там все по другому.
В драйверах ATI, nvidia(по крайней мере в nvoglnt.dll) их нету.

OpenGL: Посоветуйте насчет CSM...20 сен. 201015:55#3
-Eugene-
>2. Куда делись раздельные MODEL и VIEW матрицы и что с этим делать?
если ты не будешь использовать FFP(в частности всякий хлам glTranlate, glRotate, glScale) то это вообще не имеет значения. все равное в шейдер будешь передавать
world * view * proj это одинаково для OpenGL/Direct3D.
Отказ от POOL_MANAGED ресурсов, нужна помощь17 сен. 201012:59#24
Outlaw
> как они определяют какие текстуры близко а какие далеко?в общих словах чтоб
> идею уловить.
может по расстоянию от камеры до текущего рисуемом ого объекта, с учетом его ограничивающего тела ориентации и т.д., у которого есть текущий установленный материал с текстурами.
C Днем Программиста!14 сен. 201014:40#23
Dimich
Офигенная песня! тока уж очень много низкоуровневых понятий :) Боюсь больше половины многие не поймут...

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

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