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

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

Проблема со Смешанным массивом вершин glInterleavedArrays (OpenGL)8 апр. 200512:17#13
Neill
я вот так передавал ничего не получилось :((((
struct Vertice {
    //индекс материала
  char MatId;
  //вершины грани
  Vertex vertices[3];
};
>тогда текстурные координаты "залезут" на номарль и позицию одной вершины... В общем получиться "такая каша"
а так разве не залезут?
Проблема со Смешанным массивом вершин glInterleavedArrays (OpenGL)8 апр. 200511:53#10
Neill
тогда будет дублироваться материал,
я так понимаю судя по твоим словам:
class Vertex {
  public:
    //Текстурные координаты
    Vector2D tvert;
    //Нормаль
    Vector3D normal;
    //координаты вершины
    Vector3D vert;
...};
struct Vertice {
     //индекс материала
  char MatId;
  //вершины грани
  Vertex vertices[3];
 };
вот так наверное правильней будет?
Ускоряет ли работу включение элементов класса в private8 апр. 200511:34#4
dutchak
а если  методы доступа к членам сделать с директивой inline, для небольшого кода, по идее долно ускорить...
Проблема со Смешанным массивом вершин glInterleavedArrays (OpenGL)8 апр. 200511:31#8
Neill
>А попробуй сделать шаг не 1, а sizeof(Vertice)-1. Хотя это просто "бить в лоб"
не помогает :(
>А надо на текстурыне координаты два числа
у меня так и есть:
class Vertice {
  public:
...
    //Текстурные координаты
    Vector2D tvert[3];
...
};
Vector2D  - это 2 float'а
или я не правильно понял? в Гране (в полигоне) для каждой вершины 3 пары текстурных координат ну вот запись :
//Текстурные координаты
  Vector2D tvert[3];
Что разве нет?
Глючит массив(или строки(или я))8 апр. 200510:45#5
Peter Paul
У меня так правильно работает, это правильно работающий код, если будет 0 то будет пустая строка:), озможно у него совсем проблема не в этом...
>наверное, в начале лучше писать char z = 'a'....
тогда если встретиться строка  '\0', т.е пустая, то будет строка "a..",  это будет неправильно...
Проблема со Смешанным массивом вершин glInterleavedArrays (OpenGL)8 апр. 200510:36#5
Neill
Я это уже пробовал...
All
кстати sizeof(Vertice) == 100 по идее должно быть 97, может надо выравнивание поставить по 1 байту?

#pragma pack(push,1)
...
#pragma pack(pop)


но я так пробовал не помогает:(

Проблема со Смешанным массивом вершин glInterleavedArrays (OpenGL)8 апр. 20059:53#3
Dr.Death
Спасибо но не помогает...:(
Глючит массив(или строки(или я))8 апр. 20058:36#3
Magvaj
Привет как успехи?:)
попробуй вот так строку прочитать:
Я так понял ты из двоичного файла строки читаешь?
void ReadStr(string &st)
{
//обнулить строку
			sr = "";
			//символ для чтения
			char z = '\0';
			//пока не символ конца строки
			do  {
				//читать 1 байт
				ReadByte(z);
				//формировать прочитанную строку
				str += z;
			} while (z != '\0');
}

Если это не поможет то посмотри правильно ли ты в двоичный файл строки пишешь, пройдись отладчиком.
посмотри значения указателей, если будет NULL или такой "мусорный" адрес 0xddffff  то что-то не то....
Остальное правильно читается?
Если не получиться присылай мне проект посмотрю...

Проблема со Смешанным массивом вершин glInterleavedArrays (OpenGL)8 апр. 20058:22#1
Никкто немоет больше ответить?
Ведь почти сутки прошли :(
Проблема со Смешанным массивом вершин glInterleavedArrays (OpenGL)7 апр. 200516:40#0
Проивет всем!!!
вот так представляю грань:
//Класс мешь
class Mesh {
public:
....
//Грань
	class Vertice {
	public:
		//индекс материала
		char MatId;
		//Текстурные координаты
		Vector2D tvert[3];
		//Нормали
		Vector3D normal[3];
		//Вершины
		Vector3D vert[3];
...};
...

};

вот так отрисовываю:

//число полигонов
		int Number = mesh -> GetNumFaces();
//указатель на грань
		Mesh::Vertice *vertice = NULL;
//проход по граням
		for (i = 0; i < Number; i ++)  {
			//получить грань
			vertice = &mesh -> GetVertice(i);
....
//выбор массива
glInterleavedArrays(GL_T2F_N3F_V3F, 1, vertice);//взять шаг 1 т.к. есть первый байт
//отображение
glDrawArrays(GL_TRIANGLES, 0, 3 );
почему так не работает,что делаю не так?
если все рисовать glBegin/glEnd все ок
или работоспособный такой код:
...
//простая структура вершины
struct Vert {
				Vector2D tu;//текстурная координата
				Vector3D n;//нормаль
				Vector3D v;//координаты вершины
			};
		Vert vertex[3];
vertex[0].n = vertice->normal[0];
			vertex[0].tu = vertice->tvert[0];
			vertex[0].v = vertice->vert[0];
			vertex[1].n = vertice->normal[1];
			vertex[1].tu = vertice->tvert[1];
			vertex[1].v = vertice->vert[1];
			vertex[2].n = vertice->normal[2];
			vertex[2].tu = vertice->tvert[2];
			vertex[2].v = vertice->vert[2];
//выбор массива
glInterleavedArrays(GL_T2F_N3F_V3F, 0, vertex);
//отображение
glDrawArrays(GL_TRIANGLES, 0, 3 );
...

Спасибо всем заранее, с Уважением Андрей

Правка: 7 апр. 2005 17:56

функция gluBuild2DMipmaps7 апр. 200513:37#1
Luka
pData должен быть указатель на unsigned char  в твоем случае, т.к.  стоит GL_UNSIGNED_BYTE попробуй преобразование типов сделать,
насколько я помню в глюканутом Object Passal'е pointer безтиповый  указатель...
Столкнивение с объектами?6 апр. 200515:35#1
StudentOfShag
Я думаю надо делать так:
1)для начала ограничь камеру ограничивающим телом определенного размера BoundingBox(AABB) или BoundingSphere
2)разбей свой трехмерный мир средставами Octree, BSP и т.д.
3)проверфй столкновения камеры с полигональной моделью т.е. с твоим трехмерным миром побитым как в пункте 2

такой подход будет быстрый т.к. столновения будут проверяться с Ограничивающими объемами,которые попадают в камеру

Загрузка Уровня.5 апр. 20059:37#13
TheReloader
>И чтоб в определенном месте уровня движок вставлял динамический обьект, типа, кубик... :D
ну тут надо продумать свой форма файла,  в котором ты будешь это учитывать если это статически, если динамически тут надо продумать уже саму сцену т.е. создать класс Scene и там уже будешь думать загрузк уровня + твои объекты...
тут вариантеов много, как с делаешь отимально, мобильно, удобно, быстро по скорости отрисовки и загрузки, легко расширяемо и универсаольно так и будет правильно.
Не могу открыть текстовый файл!!4 апр. 200511:09#16
CyberZX
>fstream для работы с файлами использует стандартные сишные функции. то есть fopen/fread/fwrite/fclose
да еще + проверка типов(во избежании падения программы) и удобство...
Загрузка Уровня.4 апр. 200511:07#10
TheReloader
Сначала подумай что ты хочешь от уровня?
уровень уровню рознь...
уровень может быть простым: просто загруженный мешь из файла различных форматов(*.3ds,*.X,*.ase,..., свой формат).
+ текстуры материалы.Все объекты статические...
уровень может быть сложным: это первый вариант + дополнительные передвижные объекты из мешей, предстваленные таким-же спосоом как в первом варианте.Эти объекты могут быть подвижными, обладать AI т.е. к уровню возможна прикрутка скриптов и логики.
Тебе скорей всего придеться для начала попробовать загрузить уровень ввиде меша из стандартного формата например *.3ds , попробовать провести оптимизацию вывода полигонов хотя бы простую(отбрасывание полигонов не попадающих в камеру), потом сложней можно попробовать  BSP,Octree и т.д., также поробовать применить сортировку материалов и текстур и т.д.

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

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