cooles update, funtzt mehr, materialien noch nich ganz
This commit is contained in:
		
							parent
							
								
									4db04f28c7
								
							
						
					
					
						commit
						a853e102eb
					
				| 
						 | 
					@ -22,35 +22,35 @@ bool Load3ds::parse(Model *m) {
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	unsigned short ident;
 | 
						unsigned short ident;
 | 
				
			||||||
	unsigned int len;
 | 
						unsigned int len;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	bool modelloaded = false;
 | 
						bool modelloaded = false;
 | 
				
			||||||
 | 
						bool materialloaded = false;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						Material mat;
 | 
				
			||||||
	ModelObject modobj;
 | 
						ModelObject modobj;
 | 
				
			||||||
	m->clear();
 | 
						m->clear();
 | 
				
			||||||
	std::cout << "size: " << sizeof(int) << std::endl;
 | 
					 | 
				
			||||||
	while(!mfile.eof()) {
 | 
						while(!mfile.eof()) {
 | 
				
			||||||
		ident = len = 0;
 | 
							ident = len = 0;
 | 
				
			||||||
		mfile.read((char *)&ident, 2);
 | 
							mfile.read((char *)&ident, 2);
 | 
				
			||||||
		mfile.read((char *)&len, 4);
 | 
							mfile.read((char *)&len, 4);
 | 
				
			||||||
// 		mfile.read((char *)&m, 1);
 | 
					
 | 
				
			||||||
// 		mfile.read((char *)&n, 1);
 | 
					 | 
				
			||||||
		std::cout << "Chunk: 0x" << std::hex << ident << " (" << std::dec << len << ")" << std::endl;
 | 
							std::cout << "Chunk: 0x" << std::hex << ident << " (" << std::dec << len << ")" << std::endl;
 | 
				
			||||||
		switch(ident) {
 | 
							switch(ident) {
 | 
				
			||||||
			case 0x4d4d:
 | 
								case 0x4d4d:
 | 
				
			||||||
				// Main Chunk
 | 
									// Main Chunk
 | 
				
			||||||
				std::cout << "yeah!" << std::endl;
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
			case 0x3d3d:
 | 
								case 0x3d3d:
 | 
				
			||||||
				// 3D Editor Chunk
 | 
									// 3D Editor Chunk
 | 
				
			||||||
				std::cout << "editorchunk" << std::endl;
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
			case 0x4000:
 | 
								case 0x4000:
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if(modelloaded) {
 | 
									if(modelloaded) {
 | 
				
			||||||
					modobj.calcNormales();
 | 
										modobj.calcNormales();			
 | 
				
			||||||
					m->addObject(modobj);
 | 
										m->addObject(modobj);
 | 
				
			||||||
					modobj.clear();
 | 
										modobj.clear();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				modelloaded = true;
 | 
									modelloaded = true;
 | 
				
			||||||
				std::cout << "namechunk" << std::endl;
 | 
					// 				std::cout << "namechunk" << std::endl;
 | 
				
			||||||
				std::string name;
 | 
									std::string name;
 | 
				
			||||||
				char c;
 | 
									char c;
 | 
				
			||||||
				do {
 | 
									do {
 | 
				
			||||||
| 
						 | 
					@ -67,6 +67,7 @@ bool Load3ds::parse(Model *m) {
 | 
				
			||||||
				unsigned short panz;
 | 
									unsigned short panz;
 | 
				
			||||||
				Punkt3D p;
 | 
									Punkt3D p;
 | 
				
			||||||
				mfile.read((char*)&panz, 2);
 | 
									mfile.read((char*)&panz, 2);
 | 
				
			||||||
 | 
					// 				std::cout << "\t\t\tVertexanz: " << panz << std::endl;
 | 
				
			||||||
				glBegin(GL_LINE_LOOP);
 | 
									glBegin(GL_LINE_LOOP);
 | 
				
			||||||
				for(unsigned int i=0; i<panz; i++) {
 | 
									for(unsigned int i=0; i<panz; i++) {
 | 
				
			||||||
					mfile.read((char*)&p.x, sizeof(float));
 | 
										mfile.read((char*)&p.x, sizeof(float));
 | 
				
			||||||
| 
						 | 
					@ -84,6 +85,7 @@ bool Load3ds::parse(Model *m) {
 | 
				
			||||||
				unsigned short panz, tp;
 | 
									unsigned short panz, tp;
 | 
				
			||||||
				Punkt3D p;
 | 
									Punkt3D p;
 | 
				
			||||||
				mfile.read((char*)&panz, 2);
 | 
									mfile.read((char*)&panz, 2);
 | 
				
			||||||
 | 
					// 				std::cout << "\t\t\tPolygonanz: " << panz << std::endl;
 | 
				
			||||||
				for(unsigned int i=0; i<panz; i++) {
 | 
									for(unsigned int i=0; i<panz; i++) {
 | 
				
			||||||
					mfile.read((char*)&tp, 2);
 | 
										mfile.read((char*)&tp, 2);
 | 
				
			||||||
					p.x = tp;
 | 
										p.x = tp;
 | 
				
			||||||
| 
						 | 
					@ -91,16 +93,40 @@ bool Load3ds::parse(Model *m) {
 | 
				
			||||||
					p.y = tp;
 | 
										p.y = tp;
 | 
				
			||||||
					mfile.read((char*)&tp, 2);
 | 
										mfile.read((char*)&tp, 2);
 | 
				
			||||||
					p.z = tp;
 | 
										p.z = tp;
 | 
				
			||||||
					p.print("Polygon");
 | 
										mfile.read((char*)&tp, 2);
 | 
				
			||||||
 | 
										tp; // flags
 | 
				
			||||||
 | 
					// 					p.print("Polygon");
 | 
				
			||||||
					modobj.polygon.push_back(p);
 | 
										modobj.polygon.push_back(p);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
								// Komischer Chunk, ein haufen Zahlen sind sich selber zugewiesen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								case 0x4130:
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									std::string name;
 | 
				
			||||||
 | 
									char c;
 | 
				
			||||||
 | 
									do {
 | 
				
			||||||
 | 
										mfile.read(&c, 1);
 | 
				
			||||||
 | 
										name += c;
 | 
				
			||||||
 | 
									} while(c!=0);
 | 
				
			||||||
 | 
									modobj.mat = m->findMaterial(name);
 | 
				
			||||||
 | 
									std::cout << "Mat Name: " << name << std::endl;
 | 
				
			||||||
 | 
									unsigned short panz, tp;
 | 
				
			||||||
 | 
									mfile.read((char*)&panz, 2);
 | 
				
			||||||
 | 
									mfile.ignore(panz*2);
 | 
				
			||||||
 | 
					// 				for(unsigned int i=0; i<panz; i++) {
 | 
				
			||||||
 | 
					// 					mfile.read((char*)&tp, 2);
 | 
				
			||||||
 | 
					// 					std::cout << i << " ==> " << tp << std::endl;
 | 
				
			||||||
 | 
					// 				}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
			case 0x4140:
 | 
								case 0x4140:
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				unsigned short panz;
 | 
									unsigned short panz;
 | 
				
			||||||
				Punkt2D p;
 | 
									Punkt2D p;
 | 
				
			||||||
				mfile.read((char*)&panz, 2);
 | 
									mfile.read((char*)&panz, 2);
 | 
				
			||||||
 | 
					// 				std::cout << "\t\t\tUV-Anz: " << panz << std::endl;
 | 
				
			||||||
				for(unsigned int i=0; i<panz; i++) {
 | 
									for(unsigned int i=0; i<panz; i++) {
 | 
				
			||||||
					mfile.read((char*)&p.x, sizeof(float));
 | 
										mfile.read((char*)&p.x, sizeof(float));
 | 
				
			||||||
					mfile.read((char*)&p.y, sizeof(float));
 | 
										mfile.read((char*)&p.y, sizeof(float));
 | 
				
			||||||
| 
						 | 
					@ -108,25 +134,94 @@ bool Load3ds::parse(Model *m) {
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
								case 0xafff:
 | 
				
			||||||
 | 
									// Materialchunk
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
								case 0xa000:
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if(materialloaded) {
 | 
				
			||||||
 | 
										m->addMaterial(mat);
 | 
				
			||||||
 | 
										mat.clear();
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									materialloaded = true;
 | 
				
			||||||
 | 
									std::string name;
 | 
				
			||||||
 | 
									char c;
 | 
				
			||||||
 | 
									do {
 | 
				
			||||||
 | 
										mfile.read(&c, 1);
 | 
				
			||||||
 | 
										name += c;
 | 
				
			||||||
 | 
									} while(c!=0);
 | 
				
			||||||
 | 
									mat.name = name;
 | 
				
			||||||
 | 
									std::cout << "Mat Name: " << name << std::endl;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
								case 0xa010:
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									GLColor col;
 | 
				
			||||||
 | 
									col = readColorChunk(&mfile);
 | 
				
			||||||
 | 
									mat.ambient = col;
 | 
				
			||||||
 | 
									std::cout << col.r << ", " << col.g << ", " << col.b << std::endl;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
								case 0xa020:
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									GLColor col;
 | 
				
			||||||
 | 
									col = readColorChunk(&mfile);
 | 
				
			||||||
 | 
									mat.diffuse = col;
 | 
				
			||||||
 | 
									std::cout << col.r << ", " << col.g << ", " << col.b << std::endl;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
								case 0xa030:
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									GLColor col;
 | 
				
			||||||
 | 
									col = readColorChunk(&mfile);
 | 
				
			||||||
 | 
									mat.specular = col;
 | 
				
			||||||
 | 
									std::cout << col.r << ", " << col.g << ", " << col.b << std::endl;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
				//Switch Chunk
 | 
									//Switch Chunk
 | 
				
			||||||
				std::cout << "einfach ignorieren..." << std::endl;
 | 
					// 				std::cout << "einfach ignorieren..." << std::endl;
 | 
				
			||||||
				mfile.ignore(len-6);
 | 
									mfile.ignore(len-6);
 | 
				
			||||||
 | 
					// 				std::cout << "moep" << std::endl;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if(materialloaded)
 | 
				
			||||||
 | 
							m->addMaterial(mat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(modelloaded) {
 | 
						if(modelloaded) {
 | 
				
			||||||
		modobj.calcNormales();
 | 
							modobj.calcNormales();
 | 
				
			||||||
 | 
							modobj.mat = m->findMaterial(modobj.getName());
 | 
				
			||||||
		m->addObject(modobj);
 | 
							m->addObject(modobj);
 | 
				
			||||||
		modobj.clear();
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						std::cout << "Ende Load" << std::endl;
 | 
				
			||||||
	mfile.close();
 | 
						mfile.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GLColor Load3ds::readColorChunk(std::ifstream *file) {
 | 
				
			||||||
 | 
						GLColor col;
 | 
				
			||||||
 | 
						unsigned short id, tp;
 | 
				
			||||||
 | 
						unsigned int clen;
 | 
				
			||||||
 | 
						file->read((char*)&id, 2); // Color, warscheinlich nur bytes, wenn nich implementiere funktion
 | 
				
			||||||
 | 
						file->read((char*)&clen, 4); // len, gleiches wie oben
 | 
				
			||||||
 | 
						switch(id)  {
 | 
				
			||||||
 | 
							case 0x11:
 | 
				
			||||||
 | 
									file->read((char*)&tp, 1);
 | 
				
			||||||
 | 
									col.r = tp/255.0f;
 | 
				
			||||||
 | 
									file->read((char*)&tp, 1);
 | 
				
			||||||
 | 
									col.g = tp/255.0f;
 | 
				
			||||||
 | 
									file->read((char*)&tp, 1);
 | 
				
			||||||
 | 
									col.b = tp/255.0f;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								file->ignore(clen-6);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return col;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Load3ds::unload() {
 | 
					void Load3ds::unload() {
 | 
				
			||||||
	parsed = false;
 | 
						parsed = false;
 | 
				
			||||||
	error = false;
 | 
						error = false;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
#include "model.h"
 | 
					#include "model.h"
 | 
				
			||||||
 | 
					#include "../glcolor.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Chunk {
 | 
					class Chunk {
 | 
				
			||||||
	private:
 | 
						private:
 | 
				
			||||||
| 
						 | 
					@ -24,6 +25,8 @@ class Load3ds {
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		bool parsed;
 | 
							bool parsed;
 | 
				
			||||||
		bool error;
 | 
							bool error;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							GLColor readColorChunk(std::ifstream *file);
 | 
				
			||||||
	public:
 | 
						public:
 | 
				
			||||||
		Load3ds(std::string _fname, bool parse=true);
 | 
							Load3ds(std::string _fname, bool parse=true);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,35 +13,70 @@ void ModelObject::clear() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ModelObject::calcNormales() {
 | 
					void ModelObject::calcNormales() {
 | 
				
			||||||
	normal.clear();
 | 
						normal.clear();
 | 
				
			||||||
	Punkt3D a, b;
 | 
						Punkt3D a, b, c;
 | 
				
			||||||
	for(unsigned int i=0; i<polygon.size(); i++) {
 | 
						for(unsigned int i=0; i<polygon.size(); i++) {
 | 
				
			||||||
		a = vertex.at((unsigned short)polygon[i].x) - vertex.at((unsigned short)polygon[i].z);
 | 
							a = vertex.at((unsigned short)polygon[i].x) - vertex.at((unsigned short)polygon[i].z);
 | 
				
			||||||
		b = vertex.at((unsigned short)polygon[i].y) - vertex.at((unsigned short)polygon[i].z);
 | 
							b = vertex.at((unsigned short)polygon[i].y) - vertex.at((unsigned short)polygon[i].z);
 | 
				
			||||||
		normal.push_back(a.kreuzprodukt(b));
 | 
							c = a.kreuzprodukt(b);
 | 
				
			||||||
 | 
							c.normalize();
 | 
				
			||||||
 | 
							normal.push_back(c);
 | 
				
			||||||
 | 
					// 		c.print("Normale");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ModelObject::render() {
 | 
					void ModelObject::render() {
 | 
				
			||||||
	std::cout << "render " << name << std::endl;
 | 
					// 	std::cout << "render " << name << " mit " << polygon.size()<< std::endl;
 | 
				
			||||||
 | 
					// 	std::cout << "Vertex: " << vertex.size() << std::endl;
 | 
				
			||||||
	glBegin(GL_TRIANGLES);
 | 
						glBegin(GL_TRIANGLES);
 | 
				
			||||||
		for(unsigned int i=0; i<polygon.size(); i++) {
 | 
							for(unsigned int i=0; i<polygon.size(); i++) {
 | 
				
			||||||
	// 		glNormal3f(normal.at(    (unsigned short)polygon[i].x));
 | 
					// 			std::cout << "whee nr " <<i << std::endl;
 | 
				
			||||||
	// 		glTexCoord2f(mapcoord.at((unsigned short)polygon[i].x));
 | 
					// 			polygon[i].print();
 | 
				
			||||||
 | 
					// 			std::cout << "Stat: " << polygon.size() << " " << vertex.size() << " " << mapcoord.size() << " " << normal.size() << std::endl;
 | 
				
			||||||
 | 
					// 			glNormal3f(normal.at(    (unsigned short)polygon[i].x));
 | 
				
			||||||
 | 
					// 			glColor3f(mat.diffuse.r, mat.diffuse.g, mat.diffuse.b);
 | 
				
			||||||
 | 
								glColorGLC(mat.ambient);
 | 
				
			||||||
 | 
					// 			std::cout << mat.ambient.r << ", " << mat.ambient.g << ", " << mat.ambient.b << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								glNormal3f(normal.at(i));
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
								glTexCoord2f(mapcoord.at((unsigned short)polygon[i].x));
 | 
				
			||||||
			glVertex3f(vertex.at(    (unsigned short)polygon[i].x));
 | 
								glVertex3f(vertex.at(    (unsigned short)polygon[i].x));
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
	// 		glNormal3f(normal.at(    (unsigned short)polygon[i].y));
 | 
					
 | 
				
			||||||
	// 		glTexCoord2f(mapcoord.at((unsigned short)polygon[i].y));
 | 
								glTexCoord2f(mapcoord.at((unsigned short)polygon[i].y));
 | 
				
			||||||
			glVertex3f(vertex.at(    (unsigned short)polygon[i].y));
 | 
								glVertex3f(vertex.at(    (unsigned short)polygon[i].y));
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// 		glNormal3f(normal.at(    (unsigned short)polygon[i].z));
 | 
					
 | 
				
			||||||
	// 		glTexCoord2f(mapcoord.at((unsigned short)polygon[i].z));
 | 
								glTexCoord2f(mapcoord.at((unsigned short)polygon[i].z));
 | 
				
			||||||
			glVertex3f(vertex.at(    (unsigned short)polygon[i].z));
 | 
								glVertex3f(vertex.at(    (unsigned short)polygon[i].z));
 | 
				
			||||||
			vertex.at(    (unsigned short)polygon[i].x).print();
 | 
					// 			vertex.at(    (unsigned short)polygon[i].x).print();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	glEnd();
 | 
						glEnd();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::string ModelObject::getName() {
 | 
				
			||||||
 | 
						return name;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Material::Material() {
 | 
				
			||||||
 | 
						clear();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
					void Material::clear() {
 | 
				
			||||||
 | 
						name = "";
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						ambient.set(0.0f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
						diffuse.set(0.0f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
						specular.set(0.0f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
						percent = 0.0f;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::string Material::getName() {
 | 
				
			||||||
 | 
						return name;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Model::Model() {
 | 
					Model::Model() {
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -55,7 +90,21 @@ void Model::addObject(ModelObject c) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Model::render() {
 | 
					void Model::render() {
 | 
				
			||||||
	std::cout << "Render Model " << objects.size() << std::endl;
 | 
					// 	std::cout << "Render Model " << objects.size() << std::endl;
 | 
				
			||||||
	for(unsigned int i=0; i<objects.size(); i++) 
 | 
						for(unsigned int i=0; i<objects.size(); i++) 
 | 
				
			||||||
		objects[i].render();
 | 
							objects[i].render();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Model::addMaterial(Material m) {
 | 
				
			||||||
 | 
						materials.push_back(m);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Material Model::findMaterial(std::string name) {
 | 
				
			||||||
 | 
						for(unsigned int i=0; i<materials.size(); i++) {
 | 
				
			||||||
 | 
							if(name==materials[i].getName()) {
 | 
				
			||||||
 | 
								std::cout<<"found!"<<std::endl;
 | 
				
			||||||
 | 
								return materials[i];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return Material();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,8 +6,28 @@
 | 
				
			||||||
#include "../punkt2d.h"
 | 
					#include "../punkt2d.h"
 | 
				
			||||||
#include "../punkt3d.h"
 | 
					#include "../punkt3d.h"
 | 
				
			||||||
#include "../gltexture.h"
 | 
					#include "../gltexture.h"
 | 
				
			||||||
 | 
					#include "../glcolor.h"
 | 
				
			||||||
// #include "load3ds.h"
 | 
					// #include "load3ds.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Material {
 | 
				
			||||||
 | 
						friend class Load3ds;
 | 
				
			||||||
 | 
						friend class ModelObject;
 | 
				
			||||||
 | 
						private:
 | 
				
			||||||
 | 
							std::string name;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							GLColor ambient;
 | 
				
			||||||
 | 
							GLColor diffuse;
 | 
				
			||||||
 | 
							GLColor specular;
 | 
				
			||||||
 | 
							float percent;
 | 
				
			||||||
 | 
						public:
 | 
				
			||||||
 | 
							Material();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							void clear();
 | 
				
			||||||
 | 
							std::string getName();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ModelObject {
 | 
					class ModelObject {
 | 
				
			||||||
	friend class Load3ds;
 | 
						friend class Load3ds;
 | 
				
			||||||
	private:
 | 
						private:
 | 
				
			||||||
| 
						 | 
					@ -17,9 +37,12 @@ class ModelObject {
 | 
				
			||||||
		std::vector<Punkt3D> polygon;
 | 
							std::vector<Punkt3D> polygon;
 | 
				
			||||||
		void calcNormales();
 | 
							void calcNormales();
 | 
				
			||||||
		std::string name;
 | 
							std::string name;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							Material mat;
 | 
				
			||||||
	public:
 | 
						public:
 | 
				
			||||||
		ModelObject();
 | 
							ModelObject();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							std::string getName();
 | 
				
			||||||
		void render();
 | 
							void render();
 | 
				
			||||||
		void clear();
 | 
							void clear();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
| 
						 | 
					@ -28,13 +51,16 @@ class ModelObject {
 | 
				
			||||||
class Model {
 | 
					class Model {
 | 
				
			||||||
	private:
 | 
						private:
 | 
				
			||||||
		std::vector<ModelObject> objects;
 | 
							std::vector<ModelObject> objects;
 | 
				
			||||||
		
 | 
							std::vector<Material> materials;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	public:
 | 
						public:
 | 
				
			||||||
		Model();
 | 
							Model();
 | 
				
			||||||
		void addObject(ModelObject c);
 | 
							void addObject(ModelObject c);
 | 
				
			||||||
 | 
							void addMaterial(Material m);
 | 
				
			||||||
		void clear();
 | 
							void clear();
 | 
				
			||||||
		void render();
 | 
							void render();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							Material findMaterial(std::string name);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue