Методы для загрузки касательных и бикасательных векторов
This commit is contained in:
		
							parent
							
								
									6c6e46ffae
								
							
						
					
					
						commit
						cffa5087d2
					
				| @ -81,6 +81,8 @@ class Model : public Node | ||||
|         void load_indices(GLuint* indices, GLuint count); // Загрузка индексов в буфер
 | ||||
|         void load_texCoords(glm::vec2* texCoords, GLuint count); // Загрузка текстурных координат в буфер
 | ||||
|         void load_normals(glm::vec3* normals, GLuint count); // Загрузка нормалей в буфер
 | ||||
|         void load_tangent(glm::vec3* tangent, GLuint count); // Загрузка касательных векторов в буфер
 | ||||
|         void load_bitangent(glm::vec3* bitangent, GLuint count); // Загрузка бикасательных векторов в буфер
 | ||||
|         void set_index_range(size_t first_byteOffset, size_t count); // Ограничение диапазона из буфера индексов
 | ||||
|         void set_texture(Texture& texture); // Привязка текстуры к модели
 | ||||
|          | ||||
| @ -89,6 +91,7 @@ class Model : public Node | ||||
|         VAO vao; | ||||
|         BO vertex_vbo, index_vbo; // вершинный и индексный буферы
 | ||||
|         BO normals_vbo, texCoords_vbo; // буферы с нормалями и текстурными координатами
 | ||||
|         BO tangent_vbo, bitangent_vbo; // буферы с касательными и бикасательными векторами
 | ||||
|         GLuint verteces_count; // Количество вершин
 | ||||
|         size_t first_index_byteOffset, indices_count; // Сдвиг в байтах для первого и количество индексов
 | ||||
|         Texture texture_diffuse; // Диффузная текстура
 | ||||
|  | ||||
| @ -202,7 +202,8 @@ Node& Node::operator=(const Node& other) | ||||
| 
 | ||||
| // Конструктор по умолчанию
 | ||||
| Model::Model(Node *parent) : Node(parent), verteces_count(0), first_index_byteOffset(0), indices_count(0),  | ||||
| vertex_vbo(VERTEX), index_vbo(ELEMENT), normals_vbo(VERTEX), texCoords_vbo(VERTEX) | ||||
| vertex_vbo(VERTEX), index_vbo(ELEMENT), normals_vbo(VERTEX), texCoords_vbo(VERTEX), | ||||
| tangent_vbo(VERTEX), bitangent_vbo(VERTEX) | ||||
| { | ||||
| 
 | ||||
| } | ||||
| @ -212,6 +213,7 @@ Model::Model(const Model& copy) : Node(copy), | ||||
| vao(copy.vao),  | ||||
| verteces_count(copy.verteces_count), first_index_byteOffset(copy.first_index_byteOffset), indices_count(copy.indices_count),  | ||||
| vertex_vbo(copy.vertex_vbo), index_vbo(copy.index_vbo), normals_vbo(copy.normals_vbo), texCoords_vbo(copy.texCoords_vbo), | ||||
| tangent_vbo(copy.tangent_vbo), bitangent_vbo(copy.bitangent_vbo), | ||||
| texture_diffuse(copy.texture_diffuse), texture_ambient(copy.texture_ambient), texture_specular(copy.texture_specular),  | ||||
| material(copy.material) | ||||
| { | ||||
| @ -232,6 +234,9 @@ Model& Model::operator=(const Model& other) | ||||
|     index_vbo = other.index_vbo; | ||||
|     texCoords_vbo = other.texCoords_vbo; | ||||
| 
 | ||||
|     tangent_vbo = other.tangent_vbo; | ||||
|     bitangent_vbo = other.bitangent_vbo; | ||||
|      | ||||
|     texture_diffuse = other.texture_diffuse; | ||||
|     texture_ambient = other.texture_ambient; | ||||
|     texture_specular = other.texture_specular; | ||||
| @ -403,6 +408,62 @@ void Model::set_texture(Texture& texture) | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| // Функция для конфигурации атрибута вершинного буфера
 | ||||
| void tangent_attrib_config() | ||||
| { | ||||
|     // Определим спецификацию атрибута
 | ||||
|     glVertexAttribPointer(  3         // индекс атрибута, должен совпадать с Layout шейдера
 | ||||
|                           , 3         // количество компонент одного элемента
 | ||||
|                           , GL_FLOAT  // тип
 | ||||
|                           , GL_FALSE  // необходимость нормировать значения
 | ||||
|                           , 0         // шаг
 | ||||
|                           , (void *)0 // отступ с начала массива
 | ||||
|                          ); | ||||
|     // Включаем необходимый атрибут у выбранного VAO
 | ||||
|     glEnableVertexAttribArray(3); | ||||
| }  | ||||
| 
 | ||||
| // Функция для конфигурации атрибута вершинного буфера
 | ||||
| void bitangent_attrib_config() | ||||
| { | ||||
|     // Определим спецификацию атрибута
 | ||||
|     glVertexAttribPointer(  4         // индекс атрибута, должен совпадать с Layout шейдера
 | ||||
|                           , 3         // количество компонент одного элемента
 | ||||
|                           , GL_FLOAT  // тип
 | ||||
|                           , GL_FALSE  // необходимость нормировать значения
 | ||||
|                           , 0         // шаг
 | ||||
|                           , (void *)0 // отступ с начала массива
 | ||||
|                          ); | ||||
|     // Включаем необходимый атрибут у выбранного VAO
 | ||||
|     glEnableVertexAttribArray(4); | ||||
| }  | ||||
| 
 | ||||
| // Загрузка касательных векторов в буфер
 | ||||
| void Model::load_tangent(glm::vec3* tangent, GLuint count)  | ||||
| { | ||||
|     // Подключаем VAO
 | ||||
|     vao.use(); | ||||
| 
 | ||||
|     tangent_vbo.use(); | ||||
| 
 | ||||
|     // Загрузка вершин в память буфера
 | ||||
|     tangent_vbo.load(tangent, sizeof(glm::vec3)*count); | ||||
|     tangent_attrib_config(); | ||||
| } | ||||
| 
 | ||||
| // Загрузка бикасательных векторов в буфер
 | ||||
| void Model::load_bitangent(glm::vec3* bitangent, GLuint count)  | ||||
| { | ||||
|     // Подключаем VAO
 | ||||
|     vao.use(); | ||||
| 
 | ||||
|     bitangent_vbo.use(); | ||||
| 
 | ||||
|     // Загрузка вершин в память буфера
 | ||||
|     bitangent_vbo.load(bitangent, sizeof(glm::vec3)*count); | ||||
|     bitangent_attrib_config(); | ||||
| } | ||||
| 
 | ||||
| // Генерирует сферу заданного радиуса с определенным количеством сегментов
 | ||||
| Model genShpere(float radius, int sectorsCount, Node* parent) | ||||
| { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user