Fix stretching/squashing with non-square window
This commit is contained in:
		
							parent
							
								
									f2d92979d0
								
							
						
					
					
						commit
						3220795821
					
				
							
								
								
									
										2
									
								
								TODO.md
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								TODO.md
									
									
									
									
									
								
							|  | @ -1,8 +1,8 @@ | ||||||
| # Before 1.0 | # Before 1.0 | ||||||
| 
 | 
 | ||||||
| ## graphics | ## graphics | ||||||
| - prevent stretching from window aspect ratio |  | ||||||
| - smoothing | - smoothing | ||||||
|  | - framerate counter | ||||||
| 
 | 
 | ||||||
| ## docs | ## docs | ||||||
| - model format documentation | - model format documentation | ||||||
|  |  | ||||||
|  | @ -24,11 +24,14 @@ | ||||||
| GLuint shader;	//standard shader program used for all elements
 | GLuint shader;	//standard shader program used for all elements
 | ||||||
| GLuint transUniform;	//location of the "transMatrix" transformation matrix uniform in the shader
 | GLuint transUniform;	//location of the "transMatrix" transformation matrix uniform in the shader
 | ||||||
| 
 | 
 | ||||||
|  | float windowAspectRatio; | ||||||
|  | 
 | ||||||
| //parts of the model (see modelpart.hpp)
 | //parts of the model (see modelpart.hpp)
 | ||||||
| Model* model; | Model* model; | ||||||
| 
 | 
 | ||||||
| void display () { | void display () { | ||||||
| 	glClear(GL_COLOR_BUFFER_BIT); | 	glClear(GL_COLOR_BUFFER_BIT); | ||||||
|  | 	windowAspectRatio =  glutGet(GLUT_WINDOW_WIDTH) / (float)glutGet(GLUT_WINDOW_HEIGHT); | ||||||
| 
 | 
 | ||||||
| 	model->draw(); | 	model->draw(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -12,6 +12,7 @@ | ||||||
| #include <cv.hpp> | #include <cv.hpp> | ||||||
| 
 | 
 | ||||||
| extern GLuint transUniform; | extern GLuint transUniform; | ||||||
|  | extern float windowAspectRatio; | ||||||
| 
 | 
 | ||||||
| void initGraphics (); | void initGraphics (); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -41,7 +41,8 @@ void ModelPart::setFollowTarget(std::string followTarget) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ModelPart::setTransform(glm::vec2 position, float rotation, float scale) { | void ModelPart::setTransform(glm::vec2 position, float rotation, float scale) { | ||||||
| 	transMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(position.x, -position.y, 0.0f) + glm::vec3(posOffset, 0.0f)); | 	transMatrix = glm::ortho(-windowAspectRatio, windowAspectRatio, -1.0f, 1.0f); | ||||||
|  | 	transMatrix = glm::translate(transMatrix, glm::vec3(position.x, -position.y, 0.0f) + glm::vec3(posOffset, 0.0f)); | ||||||
| 	transMatrix = glm::rotate(transMatrix, rotation * rotFactor, glm::vec3(0.0f, 0.0f, 1.0f)); | 	transMatrix = glm::rotate(transMatrix, rotation * rotFactor, glm::vec3(0.0f, 0.0f, 1.0f)); | ||||||
| 	transMatrix = glm::scale(transMatrix, glm::vec3(1,1,1) + (scale - 1 + glm::vec3(scaleOffset, 0.0f)) * scaleFactor); | 	transMatrix = glm::scale(transMatrix, glm::vec3(1,1,1) + (scale - 1 + glm::vec3(scaleOffset, 0.0f)) * scaleFactor); | ||||||
| 	transMatrix = glm::translate(transMatrix, glm::vec3(-origin, 0.0f)); | 	transMatrix = glm::translate(transMatrix, glm::vec3(-origin, 0.0f)); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue