# OpenGL Wrong size of a cube

## Recommended Posts

Hi! I'm new to OpenGL but it works :) I've build a small scene with a rotation cube in the middle. The cube moves away, turn 90° and return to its starting position. This move and the loading of the textures works great. My problem is, that the size of the cube itself is a little bit crazy. As you can see in the code, I build it with a width of 4 and a height of 3. This result in an cube with an aspect rotation of 4:3 (Top and bottom 3:3). The strange thing is that I get a cube with an aspect rotation of ~1.2 or ~1.44, regarding my openglwindow. (And not the estimated 1.33) I guess the problem is the glViewport. As far as I can guess (I tried around a little bit), the Viewport is reset by LoadIdentity. I also tried a glViewport after the LoadIdentity with differen parameters. Always (with a viewport after loadidentity) I get a black screen with no cube (heaven knows where it is). Only with glViewPort(0.0f,0.0f,...) after the LoadIdentity I get the cube. But it is scaled to fill the whole window. Maybe someone can give me a hind or something like this. Here's the code:
void TSlideshow3D::initializeGL() {
/*Build everything up*/
rtZ = -11.50f;
rtX = 0.0f;
rtY = 0.0f;
rtOffsetZ = -0.10f * config->use3DSpeed;   //use3DSpeed is atm always 1.0f
rtOffsetX = 0.50f * config->use3DSpeed;
rtOffsetY = 1.05f * config->use3DSpeed;
}

void TSlideshow3D::resizeGL( int w, int h ) {
if (h==0)			// Prevent A Divide By Zero By
{
h=1;		        // Making Height Equal One
}

glViewport(0, 0, w, h);		// Reset The Current Viewport
glMatrixMode(GL_PROJECTION);	// Select The Projection Matrix
glLoadIdentity();		// Reset The Projection Matrix

// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)w/(GLfloat)h,0.1f,100.0f);   //doesn't affect anything

glMatrixMode(GL_MODELVIEW);		// Select The Modelview Matrix
glLoadIdentity();			// Reset The Modelview Matrix
}

//Der Foto-Klotz wird erstellt
void TSlideshow3D::buildCube() {
float width =4.0f;
float height=3.0f;
glBindTexture(GL_TEXTURE_2D, texture[ front ]);		// Select Our Texture
// Front Face					x	y	z
glTexCoord2f(0.0f, 0.0f); glVertex3f(-width, -height,  width);	// Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f( width, -height,  width);	// Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f( width,  height,  width);	// Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f(-width,  height,  width);	// Top Left Of The Texture and Quad
glEnd();
/*and so on*/
glBindTexture(GL_TEXTURE_2D, texture[ left ]);				// Select Our Texture
// Left Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-width, -height, -width);	// Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f(-width, -height,  width);	// Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f(-width,  height,  width);	// Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f(-width,  height, -width);	// Top Left Of The Texture and Quad
glEnd();

}

void TSlideshow3D::paintGL() {

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

glTranslatef(0.0f ,0.0f, rtZ);               // Move Camera

glRotatef(rtX, 0.0f,1.0f,0.0f);               // Rotate
glRotatef(rtY, 1.0f,0.0f,0.0f);
this->buildCube();

/*Some controlling of the position of the cube.
Adjusting the rtOffsets depending on the position*/

rtZ += rtOffsetZ;
rtX += rtOffsetX;
rtY += rtOffsetY;
}



##### Share on other sites
I am not sure what you are after but the only thing I can think of is change your gluPerspective angle from 45 to 90.0 and see what happens...

## Create an account

Register a new account

• ## Partner Spotlight

• ### Forum Statistics

• Total Topics
627654
• Total Posts
2978451
• ### Similar Content

• Both functions are available since 3.0, and I'm currently using glMapBuffer(), which works fine.
But, I was wondering if anyone has experienced advantage in using glMapBufferRange(), which allows to specify the range of the mapped buffer. Could this be only a safety measure or does it improve performance?
Note: I'm not asking about glBufferSubData()/glBufferData. Those two are irrelevant in this case.
• By xhcao
Before using void glBindImageTexture(    GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format), does need to make sure that texture is completeness.
• By cebugdev
hi guys,
are there any books, link online or any other resources that discusses on how to build special effects such as magic, lightning, etc. in OpenGL? i mean, yeah most of them are using particles but im looking for resources specifically on how to manipulate the particles to look like an effect that can be use for games,. i did fire particle before, and I want to learn how to do the other 'magic' as well.
Like are there one book or link(cant find in google) that atleast featured how to make different particle effects in OpenGL (or DirectX)? If there is no one stop shop for it, maybe ill just look for some tips on how to make a particle engine that is flexible enough to enable me to design different effects/magic
let me know if you guys have recommendations.
• By dud3
How do we rotate the camera around x axis 360 degrees, without having the strange effect as in my video below?
Mine behaves exactly the same way spherical coordinates would, I'm using euler angles.
Tried googling, but couldn't find a proper answer, guessing I don't know what exactly to google for, googled 'rotate 360 around x axis', got no proper answers.

References:
Code: https://pastebin.com/Hcshj3FQ
The video shows the difference between blender and my rotation:

• By Defend
I've had a Google around for this but haven't yet found some solid advice. There is a lot of "it depends", but I'm not sure on what.
My question is what's a good rule of thumb to follow when it comes to creating/using VBOs & VAOs? As in, when should I use multiple or when should I not? My understanding so far is that if I need a new VBO, then I need a new VAO. So when it comes to rendering multiple objects I can either:
* make lots of VAO/VBO pairs and flip through them to render different objects, or
* make one big VBO and jump around its memory to render different objects.
I also understand that if I need to render objects with different vertex attributes, then a new VAO is necessary in this case.
If that "it depends" really is quite variable, what's best for a beginner with OpenGL, assuming that better approaches can be learnt later with better understanding?

• 10
• 12
• 22
• 13
• 33