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?! Неужели этот код компилируется?
|
|
| |
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
Сейчас нет на сайте
| Я бы рад, но не могу.
|
|
| |
|