Note that there are some explanatory texts on larger screens.

plurals
  1. POSkybox in OpenGL
    primarykey
    data
    text
    <p>I am working on an Environment Map for a skybox in OpenGL and have run into a problem with the textures. My code produces tiles of the texture that I am trying to map, rather than one big texture. The tiles have also lost most of their resolution and are very small. </p> <p>Here is my code: </p> <pre><code>#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;glew.h&gt; #include &lt;glut.h&gt; #include "Camera.h" Camera cam; GLuint texture [6]; //the array for our texture GLfloat angle = 0.0; GLuint LoadTexture( const char * filename, int width, int height) { GLuint texture; unsigned char * data; FILE* file; file = fopen( filename, "rb" ); if ( file == NULL ) return 0; data = (unsigned char *)malloc( width * height * 3 ); fread( data, width * height * 3, 1, file ); fclose( file ); glGenTextures( 1, &amp;texture ); glBindTexture( GL_TEXTURE_2D, texture ); glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data ); free(data); return texture; } void FreeTexture( GLuint texture ) { glDeleteTextures( 1, &amp;texture ); } void skybox (void) { float x = 0; float y = 0; float z = 0; float width = 100; float height = 100; float length = 100; // Bind the BACK texture of the sky map to the BACK side of the cube glBindTexture(GL_TEXTURE_2D, texture[0]); // Center the skybox x = x - width / 2; y = y - height / 2; z = z - length / 2; glBegin(GL_QUADS); glTexCoord2f(1.0f, 0.0f); glVertex3f(x + width, y, z); glTexCoord2f(1.0f, 1.0f); glVertex3f(x + width, y + height, z); glTexCoord2f(0.0f, 1.0f); glVertex3f(x, y + height, z); glTexCoord2f(0.0f, 0.0f); glVertex3f(x, y, z); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[1]); glBegin(GL_QUADS); glTexCoord2f(1.0f, 0.0f); glVertex3f(x, y, z + length); glTexCoord2f(1.0f, 1.0f); glVertex3f(x, y + height, z + length); glTexCoord2f(0.0f, 1.0f); glVertex3f(x + width, y + height, z + length); glTexCoord2f(0.0f, 0.0f); glVertex3f(x + width, y, z + length); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[4]); glBegin(GL_QUADS); glTexCoord2f(1.0f, 0.0f); glVertex3f(x, y, z); glTexCoord2f(1.0f, 1.0f); glVertex3f(x, y, z + length); glTexCoord2f(0.0f, 1.0f); glVertex3f(x + width, y, z + length); glTexCoord2f(0.0f, 0.0f); glVertex3f(x + width, y, z); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[5]); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(x + width, y + height, z); glTexCoord2f(1.0f, 0.0f); glVertex3f(x + width, y + height, z + length); glTexCoord2f(1.0f, 1.0f); glVertex3f(x, y + height, z + length); glTexCoord2f(0.0f, 1.0f); glVertex3f(x, y + height, z); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[2]); glBegin(GL_QUADS); glTexCoord2f(1.0f, 1.0f); glVertex3f(x, y + height, z); glTexCoord2f(0.0f, 1.0f); glVertex3f(x, y + height, z + length); glTexCoord2f(0.0f, 0.0f); glVertex3f(x, y, z + length); glTexCoord2f(1.0f, 0.0f); glVertex3f(x, y, z); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[3]); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(x + width, y, z); glTexCoord2f(1.0f, 0.0f); glVertex3f(x + width, y, z + length); glTexCoord2f(1.0f, 1.0f); glVertex3f(x + width, y + height, z + length); glTexCoord2f(0.0f, 1.0f); glVertex3f(x + width, y + height, z); glEnd(); //glBindTexture( GL_TEXTURE_CUBE_MAP, texture[0] ); //bind the texture //glRotatef( angle, 1.0f, 1.0f, 1.0f ); //glutSolidSphere(2, 40, 40); } void display (void) { glClearColor (0.0,0.0,0.0,1.0); glClear (GL_COLOR_BUFFER_BIT); glLoadIdentity(); cam.camera(); //gluLookAt (20.0, 20.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); texture[0] = LoadTexture( "Back.bmp", 256, 256 ); //load the texture texture[1] = LoadTexture( "Front.bmp", 256, 256 ); //load the texture texture[2] = LoadTexture( "Left.bmp", 256, 256 ); //load the texture texture[3] = LoadTexture( "Right.bmp", 256, 256 ); //load the texture texture[4] = LoadTexture( "Bottom.bmp", 256, 256 ); //load the texture texture[5] = LoadTexture( "Top.bmp", 256, 256 ); //load the texture glEnable(GL_TEXTURE_2D); //enable 2D texturing glEnable(GL_TEXTURE_GEN_S); //enable texture coordinate generation glEnable(GL_TEXTURE_GEN_T); skybox(); for (int i = 0; i &lt; 6; i++) { FreeTexture( texture[i] ); } glutSwapBuffers(); angle = angle + 0.5; cam.incAngle(); } void keyboard (unsigned char key, int x, int y) { switch (key) { case 'q': cam.lookUpwards(); break; case 'z': cam.lookDownwards(); break; case 'w': cam.slideForward(); break; case 's': cam.slideBackward(); break; case 'a': cam.strafeLeft(); break; case 'd': cam.strafeRight(); break; case 'e': exit(0); break; default: break; } } void reshape(int x, int y) { cam.reshape(x, y); } void mouseMovement(int x, int y) { cam.mouseMovement(x, y); } int main (int argc, char **argv) { glutInit(&amp;argc, argv); glutInitDisplayMode(GLUT_DOUBLE); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("A basic OpenGL Window"); glutDisplayFunc(display); glutIdleFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutPassiveMotionFunc(mouseMovement); glutMainLoop(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload