Quantcast
Channel: SharpGL
Viewing all articles
Browse latest Browse all 104

New Post: SharpGL FBO and High Res Texture Question

$
0
0
The following Sphere with Texture code works for me:

However, I'm not 100% sure if the image is scaled. It looks ok to me. How could you tell, did it look f-ugly?
I'm just calling gl.BindTexture before the sphere.Render to texture map.
I'm not sure how the texture mapping lines up to the sphere or how to change it.

Settings:
8000x4000 pixels
OpenGLVersion = OpenGL2_1
RenderContextType = FBO or NativeWindow

It is a hack together (not checked for bugs).
       public partial class SharpGLForm : Form
    {
        private bool TexturesInitialised = false;
        private float rotation = 0.0f;
        private float Scale = 1;

        private Bitmap gImage1;
        private System.Drawing.Imaging.BitmapData gbitmapdata;
        private uint[] gtexture = new uint[1];

        SharpGL.SceneGraph.Quadrics.Sphere sphere = new SharpGL.SceneGraph.Quadrics.Sphere();

        public SharpGLForm()
        {
            InitializeComponent();
        }

        private void InitialiseTexture(ref OpenGL gl)
        {
            gImage1 = new Bitmap(@"C:\Ruapehu 8000x4000 super big.bmp");//Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)

            Rectangle rect = new Rectangle(0, 0, gImage1.Width, gImage1.Height);
            gbitmapdata = gImage1.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            gImage1.UnlockBits(gbitmapdata);
            gl.GenTextures(1, gtexture);
            gl.BindTexture(OpenGL.GL_TEXTURE_2D, gtexture[0]);
            gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, (int)OpenGL.GL_RGB8, gImage1.Width, gImage1.Height, 0, OpenGL.GL_BGR_EXT, OpenGL.GL_UNSIGNED_BYTE, gbitmapdata.Scan0);
            uint[] array = new uint[] { OpenGL.GL_NEAREST };
            gl.TexParameterI(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, array);
            gl.TexParameterI(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, array);

            TexturesInitialised = true;
        }

        private void InitialiseSphere(ref OpenGL gl)
        {
            sphere.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.DrawStyle.Fill;
            sphere.CreateInContext(gl);
            sphere.Slices = 100;
            sphere.Stacks = 100;
            sphere.TextureCoords = false;
            sphere.Radius = 4000;
            sphere.TextureCoords = true;
        }
      
        private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e)
        {  
            OpenGL gl = openGLControl.OpenGL;
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            gl.LoadIdentity();

            gl.Rotate(rotation, 0.0f, 1.0f, 0.0f);
            gl.Scale(Scale, Scale, Scale);

            if (!TexturesInitialised)
            {
                InitialiseTexture(ref gl);
                InitialiseSphere(ref gl);
            }

            gl.Enable(OpenGL.GL_TEXTURE_2D);
           
            gl.BindTexture(OpenGL.GL_TEXTURE_2D, gtexture[0]);

            gl.Color(1.0f, 1.0f, 1.0f, 0.1f); //Must have, weirdness!
            sphere.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render);

           // gl.Color(1.0f, 1.0f, 1.0f, 0.1f); //Must have, weirdness!
            gl.Begin(OpenGL.GL_QUADS);
            gl.TexCoord(1.0f, 1.0f);            
            gl.Vertex(gImage1.Width, gImage1.Height, 1.0f);     
            gl.TexCoord(0.0f, 1.0f);            
            gl.Vertex(0.0f, gImage1.Height, 1.0f);      
            gl.TexCoord(0.0f, 0.0f);        
            gl.Vertex(0.0f, 0.0f, 1.0f);
            gl.TexCoord(1.0f, 0.0f);        
            gl.Vertex(gImage1.Width, 0.0f, 1.0f);       
            gl.End();
            gl.Disable(OpenGL.GL_TEXTURE_2D);
        }

        private void openGLControl_OpenGLInitialized(object sender, EventArgs e)
        {
            OpenGL gl = openGLControl.OpenGL;
            gl.ClearColor(0, 0, 0, 0);
        }

        private void openGLControl_Resized(object sender, EventArgs e)
        { 
            OpenGL gl = openGLControl.OpenGL;
            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.LoadIdentity();
            gl.Perspective(60.0f, (double)Width / (double)Height, 100, 100000.0); //Changed
            gl.LookAt(0, 0, -20000, 0, 0, 0, 0, 1, 0);//Changed
            gl.MatrixMode(OpenGL.GL_MODELVIEW);
        }

        private void buttonRotate_Click(object sender, EventArgs e)
        {
           rotation += 3.0f;
        }

        private void buttonZoomIn_Click(object sender, EventArgs e)
        {
            Scale -= 0.5f;        
        }

        private void buttonZoomOut_Click(object sender, EventArgs e)
        {
            Scale += 0.5f;
        }
    }

Viewing all articles
Browse latest Browse all 104

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>