light working
This commit is contained in:
		
							parent
							
								
									d218d158f1
								
							
						
					
					
						commit
						d49d09a1e5
					
				| @ -54,11 +54,12 @@ namespace SE | |||||||
| 	{ | 	{ | ||||||
| 		std::vector<vec3> PositionData; | 		std::vector<vec3> PositionData; | ||||||
| 		std::vector<vec2> TexCoordData; | 		std::vector<vec2> TexCoordData; | ||||||
|  | 		std::vector<vec3> NormalData; | ||||||
| 
 | 
 | ||||||
| 		std::shared_ptr<VAOHolder> vao; | 		std::shared_ptr<VAOHolder> vao; | ||||||
| 		std::shared_ptr<VBOHolder> positionVBO; | 		std::shared_ptr<VBOHolder> positionVBO; | ||||||
| 		std::shared_ptr<VBOHolder> texCoordVBO; | 		std::shared_ptr<VBOHolder> texCoordVBO; | ||||||
| 
 | 		std::shared_ptr<VBOHolder> normalVBO; | ||||||
| 		void RefreshVBO(); | 		void RefreshVBO(); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -119,6 +119,7 @@ bool TLiteModel::LoadModel(const std::string& s) | |||||||
| 
 | 
 | ||||||
| 	vertexDataStruct.PositionData = res.VertexArr; | 	vertexDataStruct.PositionData = res.VertexArr; | ||||||
| 	vertexDataStruct.TexCoordData = res.TexCoordArr; | 	vertexDataStruct.TexCoordData = res.TexCoordArr; | ||||||
|  | 	vertexDataStruct.NormalData = res.NormalArr; | ||||||
| 
 | 
 | ||||||
| 	vertexDataStruct.RefreshVBO(); | 	vertexDataStruct.RefreshVBO(); | ||||||
| 	/*
 | 	/*
 | ||||||
| @ -237,12 +238,17 @@ void TLiteModel::DrawVBO() | |||||||
| 
 | 
 | ||||||
| 	EnableVertexAttribArray("vPosition"); | 	EnableVertexAttribArray("vPosition"); | ||||||
| 	EnableVertexAttribArray("vTexCoord"); | 	EnableVertexAttribArray("vTexCoord"); | ||||||
|  | 	EnableVertexAttribArray("vNormal"); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 	//Renderer->DrawTriangleList(TriangleList);
 | 	//Renderer->DrawTriangleList(TriangleList);
 | ||||||
| 	DrawVertexDataStruct(vertexDataStruct); | 	DrawVertexDataStruct(vertexDataStruct); | ||||||
| 
 | 
 | ||||||
| 	DisableVertexAttribArray("vPosition"); | 	DisableVertexAttribArray("vNormal"); | ||||||
| 	DisableVertexAttribArray("vTexCoord"); | 	DisableVertexAttribArray("vTexCoord"); | ||||||
|  | 	DisableVertexAttribArray("vPosition"); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 	RenderUniform1i(CONST_STRING_NORMALMAPEXISTS_UNIFORM, 1); | 	RenderUniform1i(CONST_STRING_NORMALMAPEXISTS_UNIFORM, 1); | ||||||
| 
 | 
 | ||||||
| @ -267,6 +273,7 @@ void TLiteModel::RotateModel(const mat3& r) | |||||||
| 	for (cardinal i = 0; i < TriangleCount * 3; i++) | 	for (cardinal i = 0; i < TriangleCount * 3; i++) | ||||||
| 	{ | 	{ | ||||||
| 		vertexDataStruct.PositionData[i] = r * vertexDataStruct.PositionData[i]; | 		vertexDataStruct.PositionData[i] = r * vertexDataStruct.PositionData[i]; | ||||||
|  | 		vertexDataStruct.NormalData[i] = r * vertexDataStruct.NormalData[i]; | ||||||
| 		//TriangleList.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][i] = r * TriangleList.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][i];
 | 		//TriangleList.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][i] = r * TriangleList.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][i];
 | ||||||
| 		//TriangleList.Data.Vec3CoordArr[CONST_STRING_NORMAL_ATTRIB][i] = r * TriangleList.Data.Vec3CoordArr[CONST_STRING_NORMAL_ATTRIB][i];
 | 		//TriangleList.Data.Vec3CoordArr[CONST_STRING_NORMAL_ATTRIB][i] = r * TriangleList.Data.Vec3CoordArr[CONST_STRING_NORMAL_ATTRIB][i];
 | ||||||
| 		//TriangleList.Data.Vec3CoordArr[CONST_STRING_TANGENT_ATTRIB][i] = r * TriangleList.Data.Vec3CoordArr[CONST_STRING_TANGENT_ATTRIB][i];
 | 		//TriangleList.Data.Vec3CoordArr[CONST_STRING_TANGENT_ATTRIB][i] = r * TriangleList.Data.Vec3CoordArr[CONST_STRING_TANGENT_ATTRIB][i];
 | ||||||
|  | |||||||
| @ -66,17 +66,37 @@ namespace SE | |||||||
| 
 | 
 | ||||||
| 		glBufferData(GL_ARRAY_BUFFER, TexCoordData.size() * 8, &TexCoordData[0], GL_STATIC_DRAW); | 		glBufferData(GL_ARRAY_BUFFER, TexCoordData.size() * 8, &TexCoordData[0], GL_STATIC_DRAW); | ||||||
| 
 | 
 | ||||||
|  | 		if (NormalData.size() > 0) | ||||||
|  | 		{ | ||||||
|  | 			if (!normalVBO) | ||||||
|  | 			{ | ||||||
|  | 				normalVBO = std::make_shared<VBOHolder>(); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			glBindBuffer(GL_ARRAY_BUFFER, normalVBO->getBuffer()); | ||||||
|  | 
 | ||||||
|  | 			glBufferData(GL_ARRAY_BUFFER, NormalData.size() * 12, &NormalData[0], GL_STATIC_DRAW); | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	void DrawVertexDataStruct(const VertexDataStruct& vertexDataStruct) | 	void DrawVertexDataStruct(const VertexDataStruct& vertexDataStruct) | ||||||
| 	{ | 	{ | ||||||
| 		static const std::string vTexCoord("vTexCoord"); | 		static const std::string vTexCoord("vTexCoord"); | ||||||
| 		static const std::string vPosition("vPosition"); | 		static const std::string vPosition("vPosition"); | ||||||
|  | 		static const std::string vNormal("vNormal"); | ||||||
| 
 | 
 | ||||||
| 		//Check if main thread, check if data is not empty...
 | 		//Check if main thread, check if data is not empty...
 | ||||||
| 		glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.texCoordVBO->getBuffer()); | 		glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.texCoordVBO->getBuffer()); | ||||||
| 		VertexAttribPointer2fv(vTexCoord, 0, NULL); | 		VertexAttribPointer2fv(vTexCoord, 0, NULL); | ||||||
| 
 | 
 | ||||||
|  | 		if (vertexDataStruct.normalVBO) | ||||||
|  | 		{ | ||||||
|  | 			glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.normalVBO->getBuffer()); | ||||||
|  | 			VertexAttribPointer3fv(vNormal, 0, NULL); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.positionVBO->getBuffer()); | 		glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.positionVBO->getBuffer()); | ||||||
| 		VertexAttribPointer3fv(vPosition, 0, NULL); | 		VertexAttribPointer3fv(vPosition, 0, NULL); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -73,7 +73,7 @@ void TSimpleLandClass::CreateVBO() | |||||||
| 
 | 
 | ||||||
| 	vertexDataStruct.PositionData.clear(); | 	vertexDataStruct.PositionData.clear(); | ||||||
| 	vertexDataStruct.TexCoordData.clear(); | 	vertexDataStruct.TexCoordData.clear(); | ||||||
| 
 | 	vertexDataStruct.NormalData.clear(); | ||||||
| 	for (i = 0; i < Height - 1; i++) | 	for (i = 0; i < Height - 1; i++) | ||||||
| 	{ | 	{ | ||||||
| 		for (j = 0; j < Width - 1; j++) | 		for (j = 0; j < Width - 1; j++) | ||||||
| @ -98,6 +98,16 @@ void TSimpleLandClass::CreateVBO() | |||||||
| 			vertexDataStruct.PositionData.push_back(VertexMatrix[k_up].pos); | 			vertexDataStruct.PositionData.push_back(VertexMatrix[k_up].pos); | ||||||
| 			vertexDataStruct.PositionData.push_back(VertexMatrix[k_right].pos); | 			vertexDataStruct.PositionData.push_back(VertexMatrix[k_right].pos); | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 			vertexDataStruct.NormalData.push_back(VertexMatrix[k].norm); | ||||||
|  | 			vertexDataStruct.NormalData.push_back(VertexMatrix[k_right].norm); | ||||||
|  | 			vertexDataStruct.NormalData.push_back(VertexMatrix[k_up].norm); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 			vertexDataStruct.NormalData.push_back(VertexMatrix[k_right_up].norm); | ||||||
|  | 			vertexDataStruct.NormalData.push_back(VertexMatrix[k_up].norm); | ||||||
|  | 			vertexDataStruct.NormalData.push_back(VertexMatrix[k_right].norm); | ||||||
|  | 
 | ||||||
| 			vertexDataStruct.TexCoordData.push_back({ tx0, ty0 }); | 			vertexDataStruct.TexCoordData.push_back({ tx0, ty0 }); | ||||||
| 			vertexDataStruct.TexCoordData.push_back({ tx1, ty0 }); | 			vertexDataStruct.TexCoordData.push_back({ tx1, ty0 }); | ||||||
| 			vertexDataStruct.TexCoordData.push_back({ tx0, ty1 }); | 			vertexDataStruct.TexCoordData.push_back({ tx0, ty1 }); | ||||||
| @ -361,7 +371,7 @@ bool TSimpleLandClass::LoadFromFile(const std::string& filename) | |||||||
| 
 | 
 | ||||||
| 	//Replace old matrices with new
 | 	//Replace old matrices with new
 | ||||||
| 
 | 
 | ||||||
| 	TriangleMatrix.resize(2*(Width-1)*(Height-1)); | 	TriangleMatrix.resize(2*(Width)*(Height)); | ||||||
| 	VertexMatrix = tempVertexMatrix; | 	VertexMatrix = tempVertexMatrix; | ||||||
| 	 | 	 | ||||||
| 	UpdateTriangleMatrix(); | 	UpdateTriangleMatrix(); | ||||||
| @ -556,12 +566,15 @@ void TSimpleLandClass::DrawVBO() | |||||||
| 
 | 
 | ||||||
| 	EnableVertexAttribArray("vPosition"); | 	EnableVertexAttribArray("vPosition"); | ||||||
| 	EnableVertexAttribArray("vTexCoord"); | 	EnableVertexAttribArray("vTexCoord"); | ||||||
|  | 	EnableVertexAttribArray("vNormal"); | ||||||
| 
 | 
 | ||||||
| 	//Renderer->DrawTriangleList(TriangleList);
 | 	//Renderer->DrawTriangleList(TriangleList);
 | ||||||
| 	DrawVertexDataStruct(vertexDataStruct); | 	DrawVertexDataStruct(vertexDataStruct); | ||||||
| 
 | 
 | ||||||
| 	DisableVertexAttribArray("vPosition"); | 	DisableVertexAttribArray("vPosition"); | ||||||
| 	DisableVertexAttribArray("vTexCoord"); | 	DisableVertexAttribArray("vTexCoord"); | ||||||
|  | 	DisableVertexAttribArray("vNormal"); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| @ -876,6 +889,25 @@ void TSimpleLandClass::RecalcNormalVectors() | |||||||
| { | { | ||||||
| 	int i,j,ifrom,ito,jfrom,jto; | 	int i,j,ifrom,ito,jfrom,jto; | ||||||
| 	vec3 v1,v2; | 	vec3 v1,v2; | ||||||
|  | 	for (i = 1; i < Height-1; i++) | ||||||
|  | 	{ | ||||||
|  | 		for (j = 1; j < Width-1; j++) | ||||||
|  | 		{ | ||||||
|  | 			ifrom = i - 1; | ||||||
|  | 			ito = i + 1; | ||||||
|  | 
 | ||||||
|  | 			jfrom = j - 1; | ||||||
|  | 			jto = j + 1; | ||||||
|  | 
 | ||||||
|  | 			v1 = Normalize(VertexMatrix[j + ito * Width].pos - VertexMatrix[j + ifrom * Width].pos); | ||||||
|  | 
 | ||||||
|  | 			v2 = Normalize(VertexMatrix[jto + i * Width].pos - VertexMatrix[jfrom + i * Width].pos); | ||||||
|  | 
 | ||||||
|  | 			VertexMatrix[j+i*Width].norm = CrossProduct(v2, v1); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/*
 | ||||||
| 
 | 
 | ||||||
| 	for (i=0;i<Height;i++) | 	for (i=0;i<Height;i++) | ||||||
| 		for (j=0;j<Width;j++) | 		for (j=0;j<Width;j++) | ||||||
| @ -894,7 +926,12 @@ void TSimpleLandClass::RecalcNormalVectors() | |||||||
| 			VertexMatrix[j+i*Width].tangent = v2; | 			VertexMatrix[j+i*Width].tangent = v2; | ||||||
| 			VertexMatrix[j+i*Width].norm = CrossProduct(v2, v1); | 			VertexMatrix[j+i*Width].norm = CrossProduct(v2, v1); | ||||||
| 
 | 
 | ||||||
|  | 			if (VertexMatrix[j + i * Width].norm.v[1] < fabs(VertexMatrix[j + i * Width].norm.v[2])) | ||||||
|  | 			{ | ||||||
|  | 				std::cout << "Wait..." << std::endl; | ||||||
| 			} | 			} | ||||||
|  | 
 | ||||||
|  | 		}*/ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user