Сообщения на форуме пользователя Andrey (225 стр.)
Протестируйте пожалуйста плагин для 3D Studio Max 6.0 | 9 мар. 2005 | 15:57 | #3 |
---|
Ну скажите что-нибудь ведь уже 14 скачиваний :(
Проблема с отображением материалов при загрузке уровня из двоичного формата + плагин экспорта для 3D Studio Max 6.0 | 9 мар. 2005 | 15:31 | #7 |
---|
StepanTar
короче вот код полный:
короче вот код полный:
//Получение локальной матрицы трансформации Matrix3 tm = node -> GetObjTMAfterWSM(i -> GetTime()); //Против часовой стрелке если положительный масштаб if (TMNegParity(tm)) { //обход обратный reverse = true; vx1 = 2; vx2 = 1; vx3 = 0; } else {//По часовой стерке если отрицательный масштаб vx1 = 0; vx2 = 1; vx3 = 2; } //Массив задающий порядок обхода int orderPass[] = { vx1, vx2, vx3 }; //Маcив граней Face* face = NULL; //Для Вершин Point3 v; //Для Текстурных координат Point3 tvert; //Нормаль к гране Point3 normal; //Индекс вершины int index = 0; //Проход по списку граней for (int j = 0; j < nTriangles; j ++) { //индекс материала MatId = mesh -> getFaceMtlIndex(j) % numMtl; //Вывод в файл outLog << "Индекс материала: <" << MatId << ">" << endl; out.write(&MatId, sizeof(char)); //Вывод номера полигона outLog << "Полигон <" << j << ">" << endl; //Проход по 3 вершинам грани for (int k = 0; k < 3; k++) { //Получение грани face = &mesh -> faces[j]; //Получение индекса вершины index = face -> v[orderPass[k]]; Point3 vec; vec.x = vec.y = vec.z = 0; //обнулить 4 столбец чтобы не учитывалось смещение tm.SetRow(3, vec); //Получение 1 вершины v = tm * mesh -> verts[index]; //Вывод в файл outLog << v << "," << endl; Write(out, v); //Получение индекса вершины //index = face -> getVert(k); //Получение указателя на класс RVertex RVertex *rVert = &mesh -> getRVert(index); //Получение нормали if (GetVertexNormal(mesh, j, rVert, normal)) { //Нормализация normal.Normalize(); //Вывод нормали Write(out, normal); outLog << normal << "," << endl; } else { //ошибка экспорта ok = false; ErrorMessage("Отсутствует нормали"); return; } //вывод в файл текстурных координат if (nTextureVertex) { //Получение коодинаты tvert = mesh -> tVerts[index]; out.write((char *)&tvert.x, sizeof(float)); out.write((char *)&tvert.y, sizeof(float)); outLog << "<" << tvert.x << " , " << tvert.y << ">" << endl; } } }
Протестируйте пожалуйста плагин для 3D Studio Max 6.0 | 9 мар. 2005 | 12:08 | #2 |
---|
Ну пожалуйста попробуйте экспортнуть кубик с материалами и все :)
Проблема с отображением материалов при загрузке уровня из двоичного формата + плагин экспорта для 3D Studio Max 6.0 | 9 мар. 2005 | 11:53 | #5 |
---|
StepanTar
вот так:
вот так:
//Получение локальной матрицы трансформации Matrix3 tm = node -> GetObjTMAfterWSM(i -> GetTime()); //Против часовой стрелке если положительный масштаб if (TMNegParity(tm)) { //обход обратный reverse = true; vx1 = 2; vx2 = 1; vx3 = 0; } else {//По часовой стерке если отрицательный масштаб vx1 = 0; vx2 = 1; vx3 = 2; } //Массив задающий порядок обхода int orderPass[] = { vx1, vx2, vx3 }; //Маcив граней Face* face = NULL; //Для Вершин Point3 v; //Для Текстурных координат Point3 tvert; ... //Индекс вершины int index = 0; //Проход по списку граней for (int j = 0; j < nTriangles; j ++) { ... //Проход по 3 вершинам грани for (int k = 0; k < 3; k++) { //Получение грани face = &mesh -> faces[j]; //Получение индекса вершины index = face -> v[orderPass[k]]; //...Экспорт вершин //Получение индекса вершины ... index = face -> getVert(k); ... //вывод в файл текстурных координат if (nTextureVertex) { //Получение коодинаты tvert = mesh -> tVerts[index]; out.write((char *)&tvert.x, sizeof(float)); out.write((char *)&tvert.y, sizeof(float)); outLog << "<" << tvert.x << " , " << tvert.y << ">" << endl; } }
Правка: 9 мар. 2005 11:55
Протестируйте пожалуйста плагин для 3D Studio Max 6.0 | 9 мар. 2005 | 10:50 | #1 |
---|
Проблема в том что говорили что работает не правильно, т.е. двоичный файл размером 0 байт
Протестируйте пожалуйста плагин для 3D Studio Max 6.0 | 9 мар. 2005 | 10:29 | #0 |
---|
Привет всем прошу протестировать плагин вот ссылка:
http://www.gamedev.ru/download/?id=1907
http://www.gamedev.ru/download/?id=1907
Интересует его работа в общем.
Сапсибо всем заранее, с уважением Андрей.
Как спользовать OpenGL в QNX? | 9 мар. 2005 | 10:19 | #21 |
---|
Жаботыкин
>Да ваще хитрый препод: хочет получать зарплату за то что его же студент учил бы его компутерной графике :)
понимаешь наша кафедра типа "Программное обеспечение и т.д..." сформировалось недавно совсем не из "Программистов",там пару преподов владеют серьезно программированием...остальные бывшие инженеры...
так что вот так :)
преподу это интересно поэотому сказал чтобы мне показал...
>Да ваще хитрый препод: хочет получать зарплату за то что его же студент учил бы его компутерной графике :)
понимаешь наша кафедра типа "Программное обеспечение и т.д..." сформировалось недавно совсем не из "Программистов",там пару преподов владеют серьезно программированием...остальные бывшие инженеры...
так что вот так :)
преподу это интересно поэотому сказал чтобы мне показал...
Проблема с отображением материалов при загрузке уровня из двоичного формата + плагин экспорта для 3D Studio Max 6.0 | 9 мар. 2005 | 10:12 | #3 |
---|
Никто не может гдлянуть в код может слишком много написал?
Проблема с отображением материалов при загрузке уровня из двоичного формата + плагин экспорта для 3D Studio Max 6.0 | 5 мар. 2005 | 17:02 | #2 |
---|
Загрузчик првильно грузит всю геометрию, имена тексту(если таковые есть)
вот код отрисовки mesh'а:
то текстуры отображаются но отображаются совсем неправильно
вот как это выглядет:
что я делаю не так?
заранее всем спасибо.
Прошу не киртиковать формат экспорта, и загрузчик, в этом деле я начинаюший.
Спасибо всем заранее.
С уважением Андрей.
вот код отрисовки mesh'а:
... Vector3D normal; int i; Vector4D v; int Id; int k; //число полигонов int Number = mesh.GetNumFaces(); //проход по граням for (i = 0; i < Number; i ++) { //если есть материалы if (mesh.MaterialsIsOk()) { //получить индекс материала Id = mesh.GetVertice(i).MatId; //если индекс другой if (k != Id) { //запомнить его k = Id; //отражение float shininess; //индекс текстуры unsigned int TextId = mesh.GetTextureBumpId(Id); //если индекс корректный if (int(TextId) > 0) glBindTexture(GL_TEXTURE_2D, TextId); //получить спекулярный цвет материала v = mesh.GetSpecular(Id); //Спекулярная состовляющая материала glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, &v[0]); //получить диффузионный цвет материала v = mesh.GetDiffuse(Id); //Диффузионная состовляющая материала glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, &v[0]); //Получить Фоновый цвет для материала v = mesh.GetAmbient(Id); //модель освещения glLightModelfv(GL_LIGHT_MODEL_AMBIENT, &v[0]); //Фоновая состовляющая материала glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, &v[0]); //получить отражение shininess = mesh.GetShininess(Id); //Отраженная состовляющая материала glMaterialfv(GL_FRONT, GL_SHININESS, &shininess); } } //отображение полигона glBegin(GL_TRIANGLES); //текстурная координата glTexCoord2fv(&mesh.GetVertice(i).tvert[0][0]); //вершина 0 glNormal3fv(&mesh.GetVertice(i).normal[0][0]); //текстурная координата glVertex3fv(&mesh.GetVertice(i).vert[0][0]); glTexCoord2fv(&mesh.GetVertice(i).tvert[1][0]); //нормаль glNormal3fv(&mesh.GetVertice(i).normal[1][0]); //вершина 1 glVertex3fv(&mesh.GetVertice(i).vert[1][0]); //текстурная координата glTexCoord2fv(&mesh.GetVertice(i).tvert[2][0]); //нормаль glNormal3fv(&mesh.GetVertice(i).normal[2][0]); //вершина 2 glVertex3fv(&mesh.GetVertice(i).vert[2][0]); //текстурная координата glTexCoord2fv(&mesh.GetVertice(i).tvert[2][0]); glEnd(); ... } glDisable(GL_TEXTURE_2D); ...
вот как это выглядет:
что я делаю не так?
заранее всем спасибо.
Прошу не киртиковать формат экспорта, и загрузчик, в этом деле я начинаюший.
Спасибо всем заранее.
С уважением Андрей.
Правка: 9 мар. 2005 10:13
Проблема с отображением материалов при загрузке уровня из двоичного формата + плагин экспорта для 3D Studio Max 6.0 | 5 мар. 2005 | 17:02 | #1 |
---|
[/code]
также написал загрузчик этого формата.
первая версия класса Mesh вот такого содержания:
также написал загрузчик этого формата.
первая версия класса Mesh вот такого содержания:
//Класс мешь class Mesh { public: //класс материала class Material { private: //Амбиент свойство Vector4D Ambient; //Diffuse свойство Vector4D Diffuse; //Specular свойство Vector4D Specular; //текстура Diffuse unsigned int TextureDiffuseId; //текстура Bump unsigned int TextureBumpId; //отражение float shininess; public: //возврат самоосвешение float GetShininess() const { return shininess; } //установка самоосвешение void SetShininess(float Shininess) { shininess = Shininess; } //возврат specular свойства const Vector4D& GetDiffuse() const { return Diffuse; } //установка ambient свойства void SetAmbient(const Vector4D& ambient) { Ambient = ambient; } //установка diffuse свойства void SetDiffuse(const Vector4D& diffuse) { Diffuse = diffuse; } //установка specular свойства void SetSpecular(const Vector4D& specular) { Specular = specular; } //возврат specular свойства const Vector4D& GetSpecular() const { return Specular; } //возврат ambient свойства const Vector4D& GetAmbient() const { return Ambient; } //установка индекса diffuse текстуры void SetTextureDiffuseId(unsigned int Id) { TextureDiffuseId = Id; } //установка индекса bump текстуры void SetTextureBumpId(unsigned int Id) { TextureBumpId = Id; } //возврат индекса Diffuse текстуры unsigned int GetTextureDiffuseId() const { return TextureDiffuseId; } //возврат Bump текстуры unsigned int GetTextureBumpId() const { return TextureBumpId; } Material() : TextureDiffuseId(-1), TextureBumpId(-1), shininess(128.0f) {}; ~Material() {}; }; //Грань class Vertice { public: //индекс материала char MatId; //Вершины Vector3D vert[3]; //Нормали Vector3D normal[3]; //Текстурные координаты Vector2D tvert[3]; }; private: //имя модели string name; //массив материалов vector<Material> materials; //Массив граней vector<Vertice> vertices; public: //присутвие материалов bool MaterialsIsOk() const { return !materials.empty(); } //возвратить отражение float GetShininess(int MatId) { return materials[MatId].GetShininess(); } //индекс диффузионной текстуры unsigned int GetTextureDiffuseId(int MatId) const { return materials[MatId].GetTextureDiffuseId(); } //индекс bump текстуры unsigned int GetTextureBumpId(int MatId) const { return materials[MatId].GetTextureBumpId(); } const Vector4D& GetAmbient(int MatId) const { return materials[MatId].GetAmbient(); } const Vector4D& GetDiffuse(int MatId) const { return materials[MatId].GetDiffuse(); } const Vector4D& GetSpecular(int MatId) const { return materials[MatId].GetSpecular(); } //установка имени модели void SetName(const string& Name) { name = Name; } //имя модели const string& GetName() const { return name; } int GetNumFaces() const { return vertices.size(); } //добавление вершины void AddVertice(const Vertice& vertice) { vertices.push_back(vertice); } //добавление метериала void AddMaterial(const Material& material) { materials.push_back(material); } //возврат материала const vector<Material>& GetMaterials() const { return materials; } //возврат материала Material& GetMaterial(int index) { return materials[index]; } //возврат грани Vertice& GetVertice(int index) { return vertices[index]; } Mesh() {}; ~Mesh(){}; };
Проблема с отображением материалов при загрузке уровня из двоичного формата + плагин экспорта для 3D Studio Max 6.0 | 5 мар. 2005 | 17:01 | #0 |
---|
Привет всем!
написал экспорт плагин в свой двоичный формат.
формат файла простой:
вот так выглядет код загрузки
материалов:
написал экспорт плагин в свой двоичный формат.
формат файла простой:
char 0bh //версия файла экспорта string model_name; char количество текстур в объекте //компоненты материала float, float, float, float texture_ambient; float, float, float, float texture_diffuse; string diffuse_map_filename; float, float, float, float texture_specular; string bump_map_filename; float, float, float, float texture_emission; float texture_ shinines //геометрия int количество полигонов в объекте char polygon_material_ID; //номер материала в файле экспорта float, float, float vertex_position;//координаты вершины float, float, float vertex_normal;//координат нормали к вершине float, float vertex_diffuse_UV; //текстурные координаты
материалов:
//материал ... Mtl *mat = node -> GetMtl(); ... //Число материалов int numMtl = mat -> NumSubMtls(); //далее вывод числа материалов в файл ... //Экспорт материала ExportMaterial(node); .... //Экспорт материала из узла void ModelSaver::ExportMaterial(INode* node) { //Получить материал из узла Mtl *mat = node -> GetMtl(); ... //стандартный материал StdMat *material = NULL; //Число материалов int numMtl = mat -> NumSubMtls(); //Проверяем стандартный ли это материал. if (mat -> ClassID() != Class_ID(DMTL_CLASS_ID, 0)) { for (int i = 0; i < numMtl; i++) //получить i - материал material = (StdMat*) mat-> GetSubMtl(i); //экспортировать его ExportMat(material); } else { material = (StdMat*) mat; //экспортировать его ExportMat(material); } } //экспорт материалов void ModelSaver::ExportMat(StdMat* material) { //Проверка наличия поля diffusemap if (!material -> MapEnabled(ID_DI)) { ErrorMessage("Отсутствует поле diffusemap"); return; } //Проверка наличия поля bumpmap if (!material -> MapEnabled(ID_BU)) outLog << "Отсутствует поле bumpmap" << endl; //Вспомогательная переменная TimeValue timeValue = i -> GetTime(); //Фоновая освещенность Color Ambient = material -> GetAmbient(timeValue); //Вывод в файл outLog << "Текстура Ambient: "; OutColor(outLog, Ambient, 1.0f); outLog << endl; Write(out, Ambient, 1.0f); //Диффузионная освещенность Color Diffuse = material -> GetDiffuse(timeValue); //Вывод в файл outLog << "Текстура Diffuse: "; OutColor(outLog, Diffuse, 1.0f); outLog << endl; Write(out, Diffuse, 1.0f); ... //Получить имя диффузионной текстуры TexturePatch = GetNameTexture(material, ID_DI); .... //Вывод в файл outLog << "Текстура diffusemap: " << TexturePatch.c_str() << endl; out.write(TexturePatch.c_str(), sizeof(char) * (TexturePatch.size() + 1)); //Спекулярная освещенность Color Specular = material -> GetDiffuse(timeValue); //Вывод в файл outLog << "Текстура Specular: "; OutColor(outLog, Specular, 1.0f); outLog << endl; Write(out, Specular, 1.0f); //Получить имя Bumpmap текстуры TexturePatch = GetNameTexture(material, ID_BU); ... //Вывод в файл outLog << "Текстура bumpmap: " << TexturePatch.c_str() << endl; out.write(TexturePatch.c_str(), sizeof(char) * (TexturePatch.size() + 1)); //отражение float shinines = material -> GetShininess(timeValue); outLog << "Shinines: " << shinines << endl; out.write((char *)&shinines, sizeof(float)); }
Правка: 5 мар. 2005 17:03
Как спользовать OpenGL в QNX? | 5 мар. 2005 | 13:50 | #17 |
---|
Жаботыкин
>3. Институтский предмет "Операционные системы реального времени" имеет мало общего с OpenGL. Это от препода зависит, >конечно.
Нет Linux не ОС реального времени и даже близко не лежит с QNX, так сказал препод.А с преподом я договорился что лаботраторные по графике возможны вполне, тем более он хочет самому этому научиться.
>3. Институтский предмет "Операционные системы реального времени" имеет мало общего с OpenGL. Это от препода зависит, >конечно.
Нет Linux не ОС реального времени и даже близко не лежит с QNX, так сказал препод.А с преподом я договорился что лаботраторные по графике возможны вполне, тем более он хочет самому этому научиться.
Как спользовать OpenGL в QNX? | 5 мар. 2005 | 12:10 | #11 |
---|
azazello
Спасибо!! бкдем разбираться....
Спасибо!! бкдем разбираться....
3dmax-plug и ofstream. | 5 мар. 2005 | 11:37 | #14 |
---|
_grisha
>стормозил - у тебя ж std::ofstream создается как текстовый - вот и лишний байт при записи 10.
а ему про это и указал
Gluchok
Ты понял в чем дело?
>стормозил - у тебя ж std::ofstream создается как текстовый - вот и лишний байт при записи 10.
а ему про это и указал
Gluchok
Ты понял в чем дело?
3dmax-plug и ofstream. | 5 мар. 2005 | 11:20 | #11 |
---|
Gluchok
Поробуй так:
Поробуй так:
#include <fstream> using namespace std; ofstream ifs; .... ifs.open(name, ios_base::out | ios_base::binary);