Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 514817

Загрузка текстур OpenGL - OpenGL

$
0
0
Прошу помощи.В программе с библиотеками OpenGL загружаются картинки PNG размером только 32 X 32.Если картинка больше,то не загружается.Какая часть кода отвечает за загрузку картинки любого размера???=-O

:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using Tao.DevIl;// ТЕКСТУРЫ
using Tao.FreeGlut; // для работы с библиотекой FreeGLUT
using Tao.OpenGl; // для работы с библиотекой OpenGL
using Tao.Platform.Windows;// для работы с элементом управления SimpleOpenGLControl
using System.Windows.Forms;
//using OpenTK;


namespace OpenGl_InFramework
{
    public partial class Form1 : Form
    {
        Timer RenderTimer;
      // ряд вспомогательных переменных
        // поворот
        private int rot = 0;
        // флаг - загружена ли текстура
        private bool textureIsLoad = false;
        // имя текстуры
        public string texture_name = "";
        // идентификатор текстуры
        public int imageId = 0;
        // текстурный объект
        public uint mGlTextureObject = 0;


        public Form1()
        {
            InitializeComponent();
            siOGlC.InitializeContexts();// инициализация элемента siOGlC(simpleOpenGlControl)
            RenderTimer = new Timer();
            RenderTimer.Interval = 30;
            RenderTimer.Tick += new EventHandler(UpDate);

        }
        private void UpDate(object sender, EventArgs e)
        {
            // вызов функции отрисовки сцены
            Draw();
        }
        private void simpleOpenGlControl1_Load(object sender, EventArgs e)
        {

            //enabled = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
       
            // инициализация библиотеки glut
            Glut.glutInit();
            // инициализация режима экрана
            Glut.glutInitDisplayMode( Glut.GLUT_RGB | Glut.GLUT_DOUBLE);
            // инициализация библиотеки openIL
            Il.ilInit(); Il.ilEnable( Il.IL_ORIGIN_SET);
            // установка цвета очистки экрана (RGBA)
            Gl.glClearColor(0.0f,0.0f,0.0f,0.0f);
            // установка порта вывода
            Gl.glViewport(0,0, siOGlC.Width, siOGlC.Height);
            //Gl.glViewport(0,100, siOGlC.Width, siOGlC.Height);
            // активация проекционной матрицы
            Gl.glMatrixMode( Gl.GL_PROJECTION);
            // очистка матрицы
            Gl.glLoadIdentity();
            // установка перспективы
            Glu.gluPerspective(30, siOGlC.Width / siOGlC.Height, 1, 100);
            //Glu.gluPerspective(20.0f, siOGlC.Width / siOGlC.Height, 1, 100);
            // установка объектно-видовой матрицы
            Gl.glMatrixMode( Gl.GL_MODELVIEW); Gl.glLoadIdentity();
            // начальные настройки OpenGL
            Gl.glEnable( Gl.GL_DEPTH_TEST); Gl.glEnable( Gl.GL_LIGHTING);
            Gl.glEnable( Gl.GL_LIGHT0);
            // активация таймера
          // RenderTimer.Start();

        }
        private void button1_Click(object sender, EventArgs e)
        {
            RenderTimer.Start();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            RenderTimer.Stop();
         
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            // вызов функции отрисовки сцены
          //  Draw();
        }
       

        private void siOGlC_Paint(object sender, PaintEventArgs e)
        {
       
        }

        private void eXITToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void iMAGEToolStripMenuItem_Click(object sender, EventArgs e)
      { // открываем окно выбора файла
            DialogResult res = openFileDialog1.ShowDialog();
            // если файл выбран - и возвращен результат OK
            if (res == DialogResult.OK)
            { // создаем изображение с идентификатором imageId
                Il.ilGenImages(1, out imageId);
                // делаем изображение текущим
                Il.ilBindImage(imageId);
                // адрес изображения полученный с помощью окна выбора файла
                string url = openFileDialog1.FileName;
                // пробуем загрузить изображение
                if ( Il.ilLoadImage(url))
                { // если загрузка прошла успешно
                    // сохраняем размеры изображения
                    int width = Il.ilGetInteger( Il.IL_IMAGE_WIDTH);
                    int height = Il.ilGetInteger( Il.IL_IMAGE_HEIGHT);
                  //int width = 300;
                    //int height = 100;
                    // определяем число бит на пиксель
                    int bitspp = Il.ilGetInteger( Il.IL_IMAGE_BITS_PER_PIXEL);
                  // int bitspp = Il.ilGetInteger(Il.IL_IMAGE_BYTES_PER_PIXEL);
                  // int bitspp = Il.ilGetInteger(Il.IL_IMAGE_BPC);
                    switch (bitspp)
                        // в зависимости от полученного результата
                    { // создаем текстуру, используя режим GL_RGB или GL_RGBA
                        case 24: mGlTextureObject = MakeGlTexture( Gl.GL_RGB, Il.ilGetData(), width, height); break ;
                        case 32: mGlTextureObject = MakeGlTexture( Gl.GL_RGBA, Il.ilGetData(), width, height); break ; }
                    // case 100 : mGlTextureObject = MakeGlTexture( Gl.GL_RGBA, Il.ilGetData(), width, height); break ; }
                       
                    // активируем флаг, сигнализирующий загрузку текстуры
                    textureIsLoad = true ;
                    // очищаем память
                    Il.ilDeleteImages(1, ref imageId);
                }
            }
        }
      // создание текстуры в памяти openGL
        private static uint MakeGlTexture( int Format, IntPtr pixels, int w, int h)
        {
            // идентификатор текстурного объекта
            uint texObject;
            // генерируем текстурный объект
            Gl.glGenTextures(1, out texObject);
            // устанавливаем режим упаковки пикселей
            Gl.glPixelStorei( Gl.GL_UNPACK_ALIGNMENT, 1);
            // создаем привязку к только что созданной текстуре
            Gl.glBindTexture( Gl.GL_TEXTURE_2D, texObject);
            // устанавливаем режим фильтрации и повторения текстуры
            Gl.glTexParameteri( Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT);
            Gl.glTexParameteri( Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT);
            Gl.glTexParameteri( Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri( Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexEnvf( Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_REPLACE);
            // создаем RGB или RGBA текстуру
            switch (Format)
            {
                case Gl.GL_RGB: Gl.glTexImage2D( Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB, w, h, 0, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, pixels); break;
                case Gl.GL_RGBA: Gl.glTexImage2D( Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, w, h, 0, Gl.GL_RGBA, Gl.GL_UNSIGNED_BYTE, pixels); break;
            } // возвращаем идентификатор текстурного объекта
            return texObject;
        }
        // функция отрисовки
        private void Draw()
        {
            // если текстура загружена
            if (textureIsLoad) {
                // увеличиваем угол поворота
                rot++;
                // корректируем угол
                if (rot > 360) rot = 0;
                // очистка буфера цвета и буфера глубины
                Gl.glClear( Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
                Gl.glClearColor(-1.0f,0.0f,0.0f,1.0f);
                // очищение текущей матрицы
                Gl.glLoadIdentity(); // включаем режим текстурирования
                Gl.glEnable( Gl.GL_TEXTURE_2D);
                // включаем режим текстурирования, указывая идентификатор mGlTextureObject
                Gl.glBindTexture( Gl.GL_TEXTURE_2D, mGlTextureObject);
                // сохраняем состояние матрицы
                Gl.glPushMatrix();
                // выполняем перемещение для более наглядного представления сцены
                Gl.glTranslated(0, -1, -5);
                // реализуем поворот объекта
                Gl.glRotated(rot, 0, 1, 0);
                // отрисовываем полигон
                Gl.glBegin( Gl.GL_QUADS);
                // указываем поочередно вершины и текстурные координаты
                Gl.glVertex3d(1, 1, 0); Gl.glTexCoord2f(0, 0); Gl.glVertex3d(1, 0, 0);
                Gl.glTexCoord2f(1, 0); Gl.glVertex3d(0, 0, 0); Gl.glTexCoord2f(1, 1);
                Gl.glVertex3d(0, 1, 0); Gl.glTexCoord2f(0, 1);
                // завершаем отрисовку
                Gl.glEnd();
                // возвращаем матрицу
                Gl.glPopMatrix();
                // отключаем режим текстурирования
                Gl.glDisable( Gl.GL_TEXTURE_2D);
                // обновляем элемент со сценой
                siOGlC.Invalidate();
            }
        }
 
//Подробнее на esate.ru:
  }
}

Добавлено через 28 минут
Язык, как вы заметили, не C++:D

Viewing all articles
Browse latest Browse all 514817

Trending Articles



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