forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Не работает альфа (http://forum.boolean.name/showthread.php?t=13723)

den 14.11.2010 21:10

Не работает альфа
 
Начал изучать OpenGL + C#. Использую TaoFramework.
Вот код. Почему у квадратов не работает альфа (прозрачность) ??
PHP код:

// инициализация Glut 
            
Glut.glutInit();
            
Glut.glutInitDisplayMode(Glut.GLUT_RGBA Glut.GLUT_DOUBLE Glut.GLUT_DEPTH);

            
// очитка окна 
            
Gl.glClearColor(2552552551);

            
// установка порта вывода в соотвествии с размерами элемента anT 
            
Gl.glViewport(00AnT.WidthAnT.Height);

            
// настройка проекции 
            
Gl.glMatrixMode(Gl.GL_PROJECTION);
            
Gl.glLoadIdentity();

            
Glu.gluOrtho2D(0.0100.0100.00.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(075);
            
Gl.glVertex2d(7575);
            
Gl.glVertex2d(750);
            
Gl.glEnd();

            
Gl.glBegin(Gl.GL_POLYGON);
            
Gl.glColor4d(0100.5);
            
Gl.glVertex2d(100100);
            
Gl.glVertex2d(10025);
            
Gl.glVertex2d(2525);
            
Gl.glVertex2d(25100);
            
Gl.glEnd();

            
// дожидаемся завершения визуализации кадра 
            
Gl.glFlush();

            
// обновляем изображение в элементе AnT 
            
AnT.Invalidate(); 

(AnT - это компонент на форме, куда картинка отрисовывается)

pax 14.11.2010 21:25

Ответ: Не работает альфа
 
А где включение блендинга?
Смотри в сторону функций glAlphaFunc, glBlendFunc

den 14.11.2010 22:01

Ответ: Не работает альфа
 
Всё, разобрался:
надо гденибуть вначале поставить-
PHP код:

Gl.glBlendFunc(Gl.GL_SRC_ALPHAGl.GL_ONE_MINUS_SRC_ALPHA); // - режим блендинга
Gl.glEnable(Gl.GL_BLEND); // - включить блендинг 


den 15.11.2010 22:23

Ответ: Не работает альфа
 
PHP код:

public Form1()
        {
            
InitializeComponent();
            
engine.Init(AnT);
            
Gl.glBlendFunc(Gl.GL_SRC_ALPHAGl.GL_ONE_MINUS_SRC_ALPHA);
            
Gl.glEnable(Gl.GL_BLEND);
        }

        private 
void AnT_Load(object senderEventArgs 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(50501);
            
Gl.glScaled(r.NextDouble(), r.NextDouble(),1);
            
Gl.glRotated(i001);
            
Gl.glBegin(Gl.GL_POLYGON);
            
Gl.glColor4d(1000.1);
            
Gl.glVertex2d(-25, -25);
            
Gl.glColor4d(0100.1);
            
Gl.glVertex2d(-2525);
            
Gl.glColor4d(0010.1);
            
Gl.glVertex2d(2525);
            
Gl.glColor4d(1110.1);
            
Gl.glVertex2d(25, -25);
            
Gl.glEnd();
            
Gl.glPopMatrix();
            
Gl.glFlush();
            
AnT.Invalidate();
        } 

вот чать кода. поток th выполняется, но на компоненте AnT нифига не отрисовывается!

--------------------

UPD- вот с геймдева цитата
Цитата:

Спец
У опенжл большие проблемы с работой в многопоточности, точнее с работой из не основного потока приложения.
100% безопасно его можно использовать только в основном потоке. Иначе - жди сюрпризов, даже если у тебя и заработает у людей с другим софтом/хардом возможно работать не будет.
какая жаль:(

pax 16.11.2010 11:01

Ответ: Не работает альфа
 
надо изменение графического интерфейса в WinForms делать через Invoke функцию.
Попробуй так:
PHP код:

private delegate void OnGUI();

        public 
void FunInvoke()
        {
            
// отрисовка
        
}

        public 
void fun()
        {
            
Invoke(new OnGUI(FunInvoke));
        } 


h1dd3n 16.11.2010 13:48

Ответ: Не работает альфа
 
Den
Глянь OpenTK там был пример работы winforms + opengl

den 21.11.2010 19:05

Ответ: Не работает альфа
 
Как в .Net или в Glut определить насколько повернулось колёсико мышы?
В Glut есть что то содержащие в названии MouseWheel, но я немогу понять как этим пользоватся:(

pax 21.11.2010 20:27

Ответ: Не работает альфа
 
На сколько повернулось определить нельзя, там шаги в каких-то единицах. Если колесо повернулось вперед: например значение 120, назад -120.

den 21.11.2010 20:45

Ответ: Не работает альфа
 
Цитата:

Сообщение от pax (Сообщение 169515)
На сколько повернулось определить нельзя, там шаги в каких-то единицах. Если колесо повернулось вперед: например значение 120, назад -120.

А как?:dontknow:
Как хоть чтонибуть узнать о колёсике? С помощью чего?

pax 21.11.2010 21:46

Ответ: Не работает альфа
 
Вот получение эвентов в Windows.Forms
http://msdn.microsoft.com/ru-ru/libr...ousewheel.aspx

den 27.11.2010 21:21

Ответ: Не работает альфа
 
Вложений: 1
как плавно искревить матрицу (часть матрицы)?
Вложение 11928
В голову пришло только при помощи glTranslate двигать кусочки матрицы на плавно изменяющееся значение.

pax 27.11.2010 21:23

Ответ: Не работает альфа
 
Что подразумевается под "искривить матрицу"?

den 27.11.2010 22:07

Ответ: Не работает альфа
 
то что на картинке;)

pax 27.11.2010 23:55

Ответ: Не работает альфа
 
На картинке изображена сетка, что за сетка?

Reks888 28.11.2010 11:43

Ответ: Не работает альфа
 
Den, вот это - матрица

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

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

А у тебя сто раз нарисованный график функции y=ax^2+bx+c и график х=1


Часовой пояс GMT +4, время: 04:17.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot