M
M
Mikhail Mikhail2014-09-24 09:43:13
OpenGL
Mikhail Mikhail, 2014-09-24 09:43:13

How to draw a cube in OpenGL using SharpGL ?

Hello. I'm learning OpenGL, and faced such a problem, the background image overwrites my cube. I understand that the picture is drawn in front of the cube and therefore it is not visible. Tell me how to fix it.

//  Clear the color and depth buffers.
      _gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

      _gl.Enable(OpenGL.GL_DEPTH_TEST);


      _gl.Enable(OpenGL.GL_TEXTURE_2D);
        //_gl.LoadIdentity();					// Reset The View

      //////////////////////////////////////////////////  Background
      //////////////////////////////////////////////////
        _gl.MatrixMode(OpenGL.GL_PROJECTION);
        _gl.LoadIdentity();
        _gl.Ortho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
        _gl.MatrixMode(MatrixMode.Modelview);
        _gl.LoadIdentity();

          _gl.Enable(OpenGL.GL_TEXTURE_2D);
          _gl.BindTexture(OpenGL.GL_TEXTURE_2D, textures[0]);
        _gl.Disable(OpenGL.GL_DEPTH_TEST);
        _gl.Begin(OpenGL.GL_QUADS);

          _gl.TexCoord(0.0f, 1.0f); _gl.Vertex(-1.0f, -1.0f);
          _gl.TexCoord(1.0f, 1.0f); _gl.Vertex(1.0f, -1.0f);
          _gl.TexCoord(1.0f, 0.0f); _gl.Vertex(1.0f, 1.0f);
          _gl.TexCoord(0.0f, 0.0f); _gl.Vertex(-1.0f, 1.0f);
      
        _gl.End();

      //////////////////////////////////////////////////
      //////////////////////////////////////////////////       end Background
        _gl.MatrixMode(OpenGL.GL_PROJECTION);

      _gl.Disable(OpenGL.GL_TEXTURE_2D);



      //  Reset the modelview.
      _gl.LoadIdentity();

      //  Move into a more central position.
      _gl.Translate(0.0f, 0.0f, _distance);
      //  Rotate the cube.
      _gl.Enable(OpenGL.GL_DEPTH_TEST);
      _gl.Rotate(_rquad, 1.0f, 1.0f, 1.0f);  

      

      //_gl.Enable(OpenGL.GL_POLYGON_MODE);
      _gl.Begin(OpenGL.GL_QUADS);					// Start Drawing The Cube

      _gl.TexCoord(0.0f, 0.0f); _gl.Vertex(-1.0f, -1.0f, 1.0f);	// Bottom Left Of The Texture and Quad
      _gl.TexCoord(1.0f, 0.0f); _gl.Vertex(1.0f, -1.0f, 1.0f);	// Bottom Right Of The Texture and Quad
      _gl.TexCoord(1.0f, 1.0f); _gl.Vertex(1.0f, 1.0f, 1.0f);	// Top Right Of The Texture and Quad
      _gl.TexCoord(0.0f, 1.0f); _gl.Vertex(-1.0f, 1.0f, 1.0f);	// Top Left Of The Texture and Quad

      // Back Face
      _gl.TexCoord(1.0f, 0.0f); _gl.Vertex(-1.0f, -1.0f, -1.0f);	// Bottom Right Of The Texture and Quad
      _gl.TexCoord(1.0f, 1.0f); _gl.Vertex(-1.0f, 1.0f, -1.0f);	// Top Right Of The Texture and Quad
      _gl.TexCoord(0.0f, 1.0f); _gl.Vertex(1.0f, 1.0f, -1.0f);	// Top Left Of The Texture and Quad
      _gl.TexCoord(0.0f, 0.0f); _gl.Vertex(1.0f, -1.0f, -1.0f);	// Bottom Left Of The Texture and Quad

      // Top Face
      _gl.TexCoord(0.0f, 1.0f); _gl.Vertex(-1.0f, 1.0f, -1.0f);	// Top Left Of The Texture and Quad
      _gl.TexCoord(0.0f, 0.0f); _gl.Vertex(-1.0f, 1.0f, 1.0f);	// Bottom Left Of The Texture and Quad
      _gl.TexCoord(1.0f, 0.0f); _gl.Vertex(1.0f, 1.0f, 1.0f);	// Bottom Right Of The Texture and Quad
      _gl.TexCoord(1.0f, 1.0f); _gl.Vertex(1.0f, 1.0f, -1.0f);	// Top Right Of The Texture and Quad

      // Bottom Face
      _gl.TexCoord(1.0f, 1.0f); _gl.Vertex(-1.0f, -1.0f, -1.0f);	// Top Right Of The Texture and Quad
      _gl.TexCoord(0.0f, 1.0f); _gl.Vertex(1.0f, -1.0f, -1.0f);	// Top Left Of The Texture and Quad
      _gl.TexCoord(0.0f, 0.0f); _gl.Vertex(1.0f, -1.0f, 1.0f);	// Bottom Left Of The Texture and Quad
      _gl.TexCoord(1.0f, 0.0f); _gl.Vertex(-1.0f, -1.0f, 1.0f);	// Bottom Right Of The Texture and Quad

      // Right face
      _gl.TexCoord(1.0f, 0.0f); _gl.Vertex(1.0f, -1.0f, -1.0f);	// Bottom Right Of The Texture and Quad
      _gl.TexCoord(1.0f, 1.0f); _gl.Vertex(1.0f, 1.0f, -1.0f);	// Top Right Of The Texture and Quad
      _gl.TexCoord(0.0f, 1.0f); _gl.Vertex(1.0f, 1.0f, 1.0f);	// Top Left Of The Texture and Quad
      _gl.TexCoord(0.0f, 0.0f); _gl.Vertex(1.0f, -1.0f, 1.0f);	// Bottom Left Of The Texture and Quad

      // Left Face
      _gl.TexCoord(0.0f, 0.0f); _gl.Vertex(-1.0f, -1.0f, -1.0f);	// Bottom Left Of The Texture and Quad
      _gl.TexCoord(1.0f, 0.0f); _gl.Vertex(-1.0f, -1.0f, 1.0f);	// Bottom Right Of The Texture and Quad
      _gl.TexCoord(1.0f, 1.0f); _gl.Vertex(-1.0f, 1.0f, 1.0f);	// Top Right Of The Texture and Quad
      _gl.TexCoord(0.0f, 1.0f); _gl.Vertex(-1.0f, 1.0f, -1.0f);	// Top Left Of The Texture and Quad

      //  Flush OpenGL.
      _gl.Flush();

Answer the question

In order to leave comments, you need to log in

2 answer(s)
Михаил Mikhail, 2014-09-24
@soveckii_fonarik Автор вопроса

без текстурки куб рисуется. я её отключал. еще я делал изменение дистанции в самой программе. т.е у меня получается при изменении дистанции что фон показывается во весь экран и в определенный момент начинаю проходить сквозь куб.

D
Deerenaros, 2014-09-25
@Deerenaros

Здесь кусок дерьма, а не код, однако работал. Когда-то. Может поможет. Тут Qt, но суть тот же OpenGL.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question