Суббота, 27 Апреля 2024, 05:29

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Программирование .NET » OpenGL, наложение текстур (Как наложить текстуру?)
OpenGL, наложение текстур
alexteenДата: Пятница, 02 Сентября 2011, 21:08 | Сообщение # 1
частый гость
Сейчас нет на сайте
Здравствуйте!
Пищу простую программу, возникла такая проблема: не могу наложить текстуру на простой элемент: шар. Искал примеры, но они не работают. Мой код:
Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Tao.FreeGlut;
using Tao.OpenGl;
using Tao.Platform;

namespace solnechnaya_sistema_001
{
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
             AnT.InitializeContexts();
         }

         private void Form1_Load(object sender, EventArgs e)
         {
             Glut.glutInit();
             Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
             Gl.glClearColor(255, 255, 255, 1);
             Gl.glViewport(0, 0, AnT.Width, AnT.Height);
             Gl.glMatrixMode(Gl.GL_PROJECTION);
             Gl.glLoadIdentity();
             Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);
             Gl.glMatrixMode(Gl.GL_MODELVIEW);
             Gl.glLoadIdentity();
             Gl.glEnable(Gl.GL_DEPTH_TEST);
             Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
             Gl.glLoadIdentity();
             Gl.glColor3f(1.0f, 0, 0);
             Gl.glPushMatrix();
             Gl.glTranslated(0, 0, -6);
             Gl.glRotated(45, 1, 1, 0);
             Glut.glutWireSphere(2, 32, 32);
             Gl.glPopMatrix();
             Gl.glFlush();
             AnT.Invalidate();
         }
     }
}

Пишу на C#.Net 4. Нужно срочно



KornivalДата: Пятница, 02 Сентября 2011, 21:13 | Сообщение # 2
The Witcher
Сейчас нет на сайте
Ну и где там попытка наложения текстуры?

Сообщение отредактировал Kornival - Пятница, 02 Сентября 2011, 21:18
alexteenДата: Пятница, 02 Сентября 2011, 21:18 | Сообщение # 3
частый гость
Сейчас нет на сайте
Я не знаю как её налаживать. Тут код который сейчас. Прошу показать что и куда надо писать


KornivalДата: Пятница, 02 Сентября 2011, 21:19 | Сообщение # 4
The Witcher
Сейчас нет на сайте
Покажи примеры которые ты нашел и тебе подскажут что и почему там не работает.
alexteenДата: Пятница, 02 Сентября 2011, 21:23 | Сообщение # 5
частый гость
Сейчас нет на сайте
Здесь и здесь смотрел примеры


KornivalДата: Пятница, 02 Сентября 2011, 21:28 | Сообщение # 6
The Witcher
Сейчас нет на сайте
Код по первой ссылке рабочий, это ты что-то накосячил. Здесь нет экстрасенсов и никто не знает где ты ошибся. Покажи свой неработающий код написаный по этому примеру.

Сообщение отредактировал Kornival - Пятница, 02 Сентября 2011, 21:29
DemeronДата: Пятница, 02 Сентября 2011, 21:31 | Сообщение # 7
User created in C++
Сейчас нет на сайте
alexteen, для начала нужно загрузить текстуру, а потом между glBegin и glEnd расставлять координаты текстуры (0..1) и задавать координаты примитива.

Псевдокод:
Code
glBegin(GL_QUAD);
glTexture2f(0,0);glVertex2f(0,0);
glTexture2f(1,0);glVertex2f(100,0);
glTexture2f(1,1);glVertex2f(100,100);
glTexture2f(0,1);glVertex2f(0,100);
glEnd();
alexteenДата: Пятница, 02 Сентября 2011, 21:40 | Сообщение # 8
частый гость
Сейчас нет на сайте
Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Tao.FreeGlut;
using Tao.OpenGl;
using Tao.Platform;
using Tao.DevIl;
using System.Drawing.Imaging;

namespace solnechnaya_sistema_001
{
     public partial class Form1 : Form
     {   

         public Form1()
         {
             InitializeComponent();
             AnT.InitializeContexts();
         }

         private void Form1_Load(object sender, EventArgs e)
         {
             FormBorderStyle = FormBorderStyle.None;
             WindowState = FormWindowState.Maximized;  

             Glut.glutInit();
             Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE);
             Il.ilInit();
             Il.ilEnable(Il.IL_ORIGIN_SET);
             Gl.glClearColor(255, 255, 255, 1);
             Gl.glViewport(0, 0, AnT.Width, AnT.Height);
             Gl.glMatrixMode(Gl.GL_PROJECTION);
             Gl.glLoadIdentity();
             Glu.gluPerspective(30, AnT.Width / AnT.Height, 1, 100);
             Gl.glMatrixMode(Gl.GL_MODELVIEW);
             Gl.glLoadIdentity();
             Gl.glEnable(Gl.GL_DEPTH_TEST);
             Gl.glEnable(Gl.GL_LIGHTING);
             Gl.glEnable(Gl.GL_LIGHT0);

             LoadTexture(new Bitmap("1.bmp"), 0, true);
             quadr = Glu.gluNewQuadric();
             Glu.gluQuadricTexture(quadr, Gl.GL_TRUE);
             Gl.glEnable(Gl.GL_TEXTURE_2D);
             Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[0]);
             Glu.gluSphere(quadr, 0.4, 50, 50);
             Gl.glDisable(Gl.GL_TEXTURE_2D);
         }

         private void LoadTexture(Bitmap textureImage, int elementIndex, bool flip)
         {
             if (flip)
             {
                 textureImage.RotateFlip(RotateFlipType.Rotate180FlipX);
             }
             Rectangle rectangle = new Rectangle(0, 0, textureImage.Width, textureImage.Height);
             BitmapData bitmapData = textureImage.LockBits(rectangle, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
             Gl.glBindTexture(Gl.GL_TEXTURE_2D, this.texture[elementIndex]);
             Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, (int)Gl.GL_RGB8, textureImage.Width, textureImage.Height, 0, GL.GL_BGR_EXT, GL.GL_UNSIGNED_byte, bitmapData.Scan0);
             Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, (int)Gl.GL_LINEAR);
             Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, (int)Gl.GL_LINEAR);
             if (bitmapData != null)
             {
                 textureImage.UnlockBits(bitmapData);
             }
         }

         private void button1_Click(object sender, EventArgs e)
         {
             Application.Exit();
         }

         private void openToolStripMenuItem_Click(object sender, EventArgs e)
         {
             Application.Exit();
         }

     }
}


Так не работает.
Demeron, у меня нету таких строчек(glBegin(GL_QUAD); , glEnd();).



DemeronДата: Пятница, 02 Сентября 2011, 21:44 | Сообщение # 9
User created in C++
Сейчас нет на сайте
alexteen, я с глутом не работал, а только гл+винапи, делать это надо каждый кадр... могу скинуть пародию на движок на c++, там только .png грузит и рисует, но всё же может поможет...
alexteenДата: Пятница, 02 Сентября 2011, 21:46 | Сообщение # 10
частый гость
Сейчас нет на сайте
Demeron, да, скинь пожалуйста


KornivalДата: Пятница, 02 Сентября 2011, 21:51 | Сообщение # 11
The Witcher
Сейчас нет на сайте
Ты издеваешься? Я не вижу объявление переменной quad и массива texture, и ты уверен что твоя картинка называется именно 1.bmp?! Неужели этот код компилируется? wacko
alexteenДата: Пятница, 02 Сентября 2011, 21:54 | Сообщение # 12
частый гость
Сейчас нет на сайте
Он не компилируется, у него ошибки. Как их исправить я не знаю


KornivalДата: Пятница, 02 Сентября 2011, 21:57 | Сообщение # 13
The Witcher
Сейчас нет на сайте
Quote (alexteen)
Он не компилируется

Ну слава богу, я думал что начинаю сходить с ума. Прежде чем начать работать с переменной ее нужно объявить. Для начала освой хотябы азы C#.
alexteenДата: Пятница, 02 Сентября 2011, 21:58 | Сообщение # 14
частый гость
Сейчас нет на сайте
Kornival, можешь написать правильный код?


KornivalДата: Пятница, 02 Сентября 2011, 21:59 | Сообщение # 15
The Witcher
Сейчас нет на сайте
Я бы рад, но не могу.
Форум игроделов » Программирование » Программирование .NET » OpenGL, наложение текстур (Как наложить текстуру?)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг