Сообщения на форуме пользователя Andrey (213 стр.)
Странная проблема со смешанными массивами(glInterleavedArrays) в OpenGL | 25 июля 2005 | 19:57 | #0 |
---|
Привет всем!!!! Возникла странная проблема.
итак имеем массив векторов(не обращайте внимание на имена переменных в инициализации массива это все Vector3D):
если рисуем это вот так:
то все ок.
если ривуем это вот так:
получается полная лажа!!!!!!!!!!!! не могу понять в чем проблема :(
что это может быть?
Спасибо всем зарагнее. С уважением Андрей.
итак имеем массив векторов(не обращайте внимание на имена переменных в инициализации массива это все Vector3D):
Vector3D array[] = { minPoint, Vector3D(minPoint.x, maxPoint.y, minPoint.z), front[1],front[2], front[2], front[3],front[3], front[0], back[0], back[1], back[1], back[2], back[2], back[3], back[3], back[0], left[0], left[1], left[1], left[2], left[2], left[3], left[3], left[0], right[0], right[1], right[1], right[2], right[2], right[3], right[3], right[0], top[0], top[1], top[1], top[2], top[2], top[3], top[3], top[0], bottom[0], bottom[1], bottom[1], bottom[2], bottom[2], bottom[3], bottom[3], bottom[0] |
glBegin(GL_LINES); glVertex3fv(&array[0][0]); glVertex3fv(&array[1][0]); glVertex3fv(&array[2][0]); glVertex3fv(&array[3][0]); glVertex3fv(&array[4][0]); glVertex3fv(&array[5][0]); glVertex3fv(&array[6][0]); glVertex3fv(&array[7][0]); ... glVertex3fv(&array[40][0]); glVertex3fv(&array[41][0]); glVertex3fv(&array[42][0]); glVertex3fv(&array[43][0]); glVertex3fv(&array[44][0]); glVertex3fv(&array[45][0]); glVertex3fv(&array[46][0]); glVertex3fv(&array[47][0]); glEnd();
если ривуем это вот так:
//установить смешанный массив glInterleavedArrays(GL_V3F, 0, array); //отобразить count элементов glDrawArrays(GL_LINES, 0, 24); //пробовал ставить 2 - т.е. 2 вершины для 1 линии |
что это может быть?
Спасибо всем зарагнее. С уважением Андрей.
Rag doll. (Комментарии к статье) | 14 июля 2005 | 18:34 | #14 |
---|
resurected_timofei2
Отлмичная статья я вчера целый час любовался!!!!
Отлмичная статья я вчера целый час любовался!!!!
Очень Красивый Дельфи! | 11 июля 2005 | 18:19 | #3711 |
---|
Delphi - полный отсотой!!!!!!!!!!
и хватит спорить
и хватит спорить
Введение в физическую библиотеку Tokamak (Комментарии к статье) | 27 июня 2005 | 11:47 | #34 |
---|
maths_fan
Молодец спасибо за, татью!
побольше бы женского пола в решении нетривиальных прикладных задач!!
Молодец спасибо за, татью!
побольше бы женского пола в решении нетривиальных прикладных задач!!
E3. 2005. (Комментарии к статье) | 27 июня 2005 | 11:40 | #28 |
---|
wat
Отличная познавательная статья...
Я прямо грустно замечтался...
Отличная познавательная статья...
Я прямо грустно замечтался...
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 24 июня 2005 | 12:12 | #17 |
---|
all
все спасибо была глупая ошибка:
вместо: надо:
hr = pDevice -> SetStreamSource(0, static_cast<Direct3DVertexBuffer *>(surface -> GetVertexBuffer()) -> GetBuffer(), 0, sizeof(Mesh::Direct3DVertex));
[/code]
Тема закрыта
все спасибо была глупая ошибка:
вместо: надо:
hr = pDevice -> SetStreamSource(0, static_cast<Direct3DVertexBuffer *>(surface -> GetVertexBuffer()) -> GetBuffer(), 0, sizeof(Mesh::Direct3DVertex));
[/code]
Тема закрыта
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 17 июня 2005 | 8:11 | #14 |
---|
Привет всем опять неужели нет специалистов по Direct3D ?????
посмотрите пожалуйста посты...
спасибо заранее с уважением Андрей
посмотрите пожалуйста посты...
спасибо заранее с уважением Андрей
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 11 июня 2005 | 9:29 | #13 |
---|
Altair
>К слову, GetNumVertices возвращает количество треугольников, вроде.. Так что, имхо, ничего делить не надо.
да ты прав я коментарий написал не правильно...
еще 1 особенность если написать чтобы рендерилось всегда 76 оплигонов то все правильно работает,
но естественно не все выводится но похоже на правду.
76 я взял т.к. наменьшее число полигонов принадлежаших какому-то материалу(т.к. есть сортирорвка по материалам)
из наборов поверхеностей(surface) всего Mesh'а.
Еще я подумал что у меня в какой-то поверхности содержится слишком большое число полигонов, а метод
DrawPrimitive судя по DirectX 9.0 SDK
может рендерить ограниченно число примитивов, сколько конкретно это проверил таким способом:
тогда в перемнной pCaps я увидел
что pСaps.MaxPrimitiveCount = 6555
у меня в меше максимальое полигонов в 1 из поверхностей(набор полигонов принадлежащих какому-то материалу) = 1114!!!
т.е. у меня значит все правильно.
Еще 1 особенность поставив правильное число полигонов для рендера:
>К слову, GetNumVertices возвращает количество треугольников, вроде.. Так что, имхо, ничего делить не надо.
да ты прав я коментарий написал не правильно...
Zazzy,
Altair,
stepan_win,
Извиняюсь за НЕПРАВИЛЬНЫЙ КОМЕНТАРИЙ!!!!:)))))
я все испраивил в первом посте.
вот эта конструкция возвращает число полигонов(граней)
surface -> GetNumVertices();
но естественно не все выводится но похоже на правду.
pDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 76);
из наборов поверхеностей(surface) всего Mesh'а.
Еще я подумал что у меня в какой-то поверхности содержится слишком большое число полигонов, а метод
DrawPrimitive судя по DirectX 9.0 SDK
может рендерить ограниченно число примитивов, сколько конкретно это проверил таким способом:
D3DCAPS9 pCaps; memset(&pCaps, 0, sizeof(pCaps)); pDevice -> GetDeviceCaps(&pCaps);
что pСaps.MaxPrimitiveCount = 6555
у меня в меше максимальое полигонов в 1 из поверхностей(набор полигонов принадлежащих какому-то материалу) = 1114!!!
т.е. у меня значит все правильно.
Еще 1 особенность поставив правильное число полигонов для рендера:
hr = pDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, surface -> GetNumVertices()); |
на 1 из машин: Windows XP Radeon 9200SE ОС ушла в перезагрузку!!!
на другой Windows 2000 GeForce FX 5200 вообще на экране пусто!!!
all
что вы теперь на это скажите?
Прощу помощи не знаю как дальше быть
спасибо всем заранее.
С уважением Андрей
Правка: граматика, переменная
Правка: 11 июня 2005 9:30
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 10 июня 2005 | 11:11 | #8 |
---|
Zazzy
не помогает, буду разбиратся... спасибо большое!!!!
не помогает, буду разбиратся... спасибо большое!!!!
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 10 июня 2005 | 10:55 | #6 |
---|
Zazzy
>Хм-м. А что у тебя "хрезалты" возвращают?
выдают S_OK т.е. все нормально...
>И что, при "pDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); " на екране не пусто было, если не считать один полигон?
была какая-то фигня пару полигонов...
>Хм-м. А что у тебя "хрезалты" возвращают?
выдают S_OK т.е. все нормально...
>И что, при "pDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); " на екране не пусто было, если не считать один полигон?
была какая-то фигня пару полигонов...
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 10 июня 2005 | 10:42 | #4 |
---|
Zazzy
ставлю так вообще на экране пусто :(
ставлю так вообще на экране пусто :(
pDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, surface -> GetNumVertices() );
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 10 июня 2005 | 10:24 | #2 |
---|
Zazzy
т.е. не правильное число полигонов?
т.е. не правильное число полигонов?
Direct3D: Рендер через VB неправильный, а через DrawPrivitiveUp все ок | 10 июня 2005 | 10:02 | #0 |
---|
Привет всем!!!
класс Direct3DVertexBuffer имеет вот такой интерфейс:
класс VertexBuffer пустой, используется как интерфейс.
но если делать вот так: то все прекрасно рендерится...
создаю вершинный буйфер как обычно вот код:
код Mesh'а
//Класс мешь class Mesh { public: ... //вершина для Direct3D struct Direct3DVertex { //координаты вершины Vector3D vert; //Нормаль Vector3D normal; //Текстурные координаты Vector2D tvert; }; //грань struct Direct3DVertice { Direct3DVertex direct3DVertex[3]; }; }; //Поверхность class Surface { private: //вертексный буффер VertexBuffer *vertexBuffer; //указатель на массив полигонов void *vertices; //число полигонов int numVertices; ... public: //число вершин //установка числа полигонов void SetNumberVertices(int number) { numVertices = number; } //возврат указателя на полигоны inline void *GetVertices() const { return vertices; } };
вод код создания:
//память под грани vertices = new Mesh::Dirct3DVertice[surface.GetNumVertices()]; //тут идет заполнение данными //созждать вершинный буфер CreateVertexBuffer(buffer, surface.GetVertices(), 3 * surface.GetNumVertices() * sizeof(Mesh::Direct3DVertex)); //сохранить указатель surface.SetVertexBuffer(buffer); ... //создание вертексного буффера void CreateVertexBuffer(VertexBuffer *&buffer, void *vertices, int size) const { if (!size) return; //указатель на вершинный буфер Direct3D IDirect3DVertexBuffer9 *buf = NULL; //создать новый буфер buffer = new Direct3DVertexBuffer; if (!buffer) return; //массив полигонов void *faces = NULL; //создание HRESULT hr = pDevice -> CreateVertexBuffer(size, 0, D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1, D3DPOOL_DEFAULT, &buf, 0); if (hr != S_OK) { application.GetConsole().AddMessage(Console::ERROR_MESSAGE, "Ошибка при создании вертексного буффера: %s%s", DXGetErrorString9(hr), "\n"); return; } if (!buf) return; //захват buf -> Lock(0, size, &faces, 0); //копирование данных memcpy(faces, vertices, size); //разблокировка buf -> Unlock(); //установить вертексный буфер static_cast<Direct3DVertexBuffer *>(buffer) -> SetVertexBuffer(buf); } |
//вершинный буфер для API Direct3D class Direct3DVertexBuffer : public VertexBuffer { private: //вертексный буфер IDirect3DVertexBuffer9 *buffer; public: //установка указателя на вершинный буфер void SetVertexBuffer(IDirect3DVertexBuffer9* vb) { buffer = vb; } //возврат ссылки на вершинный буфер IDirect3DVertexBuffer9 *GetBuffer() const { return buffer; } Direct3DVertexBuffer() : buffer(NULL) {} virtual ~Direct3DVertexBuffer(){} };
вот вывод:
короче выдается полная лажа...но если делать вот так: то все прекрасно рендерится...
что я делаю не так?
Спасибо всем заранее.
С уважением Андрей.
Правка: 11 июня 2005 9:08
Проблема с VBO: неправильное отображение геометрии | 4 июня 2005 | 16:13 | #9 |
---|
забыл тема закрыта
Проблема с VBO: неправильное отображение геометрии | 4 июня 2005 | 16:12 | #8 |
---|
cppguru
Ghost3
Спасибо за ответы!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ghost3
Спасибо за ответы!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
у меня все заработало!!!!!!!!!!!!!!