 |
С# Средство разработки на платформе .Net |
14.11.2010, 21:10
|
#1
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Не работает альфа
Начал изучать OpenGL + C#. Использую TaoFramework.
Вот код. Почему у квадратов не работает альфа (прозрачность) ??
// инициализация Glut
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGBA | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
// очитка окна
Gl.glClearColor(255, 255, 255, 1);
// установка порта вывода в соотвествии с размерами элемента anT
Gl.glViewport(0, 0, AnT.Width, AnT.Height);
// настройка проекции
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluOrtho2D(0.0, 100.0, 100.0, 0.0);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
// очищаем буфер цвета
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glBegin(Gl.GL_POLYGON);
Gl.glColor4d(1,0,0,1);
Gl.glVertex2d(0,0);
Gl.glVertex2d(0, 75);
Gl.glVertex2d(75, 75);
Gl.glVertex2d(75, 0);
Gl.glEnd();
Gl.glBegin(Gl.GL_POLYGON);
Gl.glColor4d(0, 1, 0, 0.5);
Gl.glVertex2d(100, 100);
Gl.glVertex2d(100, 25);
Gl.glVertex2d(25, 25);
Gl.glVertex2d(25, 100);
Gl.glEnd();
// дожидаемся завершения визуализации кадра
Gl.glFlush();
// обновляем изображение в элементе AnT
AnT.Invalidate();
(AnT - это компонент на форме, куда картинка отрисовывается)
|
(Offline)
|
|
14.11.2010, 21:25
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не работает альфа
А где включение блендинга?
Смотри в сторону функций glAlphaFunc, glBlendFunc
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.11.2010, 22:01
|
#3
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Не работает альфа
Всё, разобрался:
надо гденибуть вначале поставить-
Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA); // - режим блендинга
Gl.glEnable(Gl.GL_BLEND); // - включить блендинг
|
(Offline)
|
|
15.11.2010, 22:23
|
#4
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Не работает альфа
public Form1()
{
InitializeComponent();
engine.Init(AnT);
Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
Gl.glEnable(Gl.GL_BLEND);
}
private void AnT_Load(object sender, EventArgs e)
{
Thread th = new Thread(fun);
th.Priority = ThreadPriority.Normal;
th.Start();
th.Join();
}
void fun()
{
int i = 45;
Random r = new Random();
//Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glPushMatrix();
Gl.glTranslated(50, 50, 1);
Gl.glScaled(r.NextDouble(), r.NextDouble(),1);
Gl.glRotated(i, 0, 0, 1);
Gl.glBegin(Gl.GL_POLYGON);
Gl.glColor4d(1, 0, 0, 0.1);
Gl.glVertex2d(-25, -25);
Gl.glColor4d(0, 1, 0, 0.1);
Gl.glVertex2d(-25, 25);
Gl.glColor4d(0, 0, 1, 0.1);
Gl.glVertex2d(25, 25);
Gl.glColor4d(1, 1, 1, 0.1);
Gl.glVertex2d(25, -25);
Gl.glEnd();
Gl.glPopMatrix();
Gl.glFlush();
AnT.Invalidate();
}
вот чать кода. поток th выполняется, но на компоненте AnT нифига не отрисовывается!
--------------------
UPD- вот с геймдева цитата
Спец
У опенжл большие проблемы с работой в многопоточности, точнее с работой из не основного потока приложения.
100% безопасно его можно использовать только в основном потоке. Иначе - жди сюрпризов, даже если у тебя и заработает у людей с другим софтом/хардом возможно работать не будет.
|
какая жаль 
|
(Offline)
|
|
16.11.2010, 11:01
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не работает альфа
надо изменение графического интерфейса в WinForms делать через Invoke функцию.
Попробуй так:
private delegate void OnGUI();
public void FunInvoke() { // отрисовка }
public void fun() { Invoke(new OnGUI(FunInvoke)); }
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.11.2010, 13:48
|
#6
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: Не работает альфа
Den
Глянь OpenTK там был пример работы winforms + opengl
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.11.2010, 19:05
|
#7
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Не работает альфа
Как в .Net или в Glut определить насколько повернулось колёсико мышы?
В Glut есть что то содержащие в названии MouseWheel, но я немогу понять как этим пользоватся 
|
(Offline)
|
|
21.11.2010, 20:27
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не работает альфа
На сколько повернулось определить нельзя, там шаги в каких-то единицах. Если колесо повернулось вперед: например значение 120, назад -120.
|
(Offline)
|
|
21.11.2010, 20:45
|
#9
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Не работает альфа
Сообщение от pax
На сколько повернулось определить нельзя, там шаги в каких-то единицах. Если колесо повернулось вперед: например значение 120, назад -120.
|
А как? 
Как хоть чтонибуть узнать о колёсике? С помощью чего?
|
(Offline)
|
|
21.11.2010, 21:46
|
#10
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не работает альфа
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.11.2010, 21:21
|
#11
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Не работает альфа
как плавно искревить матрицу (часть матрицы)?

В голову пришло только при помощи glTranslate двигать кусочки матрицы на плавно изменяющееся значение.
|
(Offline)
|
|
27.11.2010, 21:23
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не работает альфа
Что подразумевается под "искривить матрицу"?
|
(Offline)
|
|
27.11.2010, 22:07
|
#13
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Не работает альфа
то что на картинке 
|
(Offline)
|
|
27.11.2010, 23:55
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не работает альфа
На картинке изображена сетка, что за сетка?
|
(Offline)
|
|
28.11.2010, 11:43
|
#15
|
Дэвелопер
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений (для 1,985 пользователей)
|
Ответ: Не работает альфа
Den, вот это - матрица

И вот это - тоже матрица

И даже это - матрица

А у тебя сто раз нарисованный график функции y=ax^2+bx+c и график х=1
Последний раз редактировалось Reks888, 28.11.2010 в 14:10.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:48.
|