Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2017, 01:24   #1
Роман12212221
 
Регистрация: 27.11.2016
Сообщений: 4
По умолчанию Не срабатывает мышь

Здравствуйте. Вообщем выпало на мою нелегкую работать с Tao Framework и с Glut соответственно. Пишу на С#. Имею такой код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.Platform.Windows;
using Tao.OpenGl;
using Tao.FreeGlut;
using Tao.FreeType;
using System.Threading.Tasks;

namespace Cells.engine
{
    class torus
    {

        
        public static void startdraw(SimpleOpenGlControl screen,uint n)
        {
            
            Gl.glBegin(Gl.GL_POINTS);
            screen.MouseMove += new MouseEventHandler(screen_MouseMove);

            

        }

        static void screen_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                double x = e.X;
                double y = e.Y;
                x = Math.Round(x,0);
                y = Math.Round(y, 0);
                Gl.glVertex2f((float)x,(float)y);
              
                
            }

        }


        internal static void draw(SimpleOpenGlControl screen,uint n)
        {

            bool endgame = false;
            int[,] grid = new int[screen.Height,screen.Width];
            startdraw(screen,n);
            
        }


      
    

    }
}
По всем законам логики эта штука при нажатии на любую точку окна в этом месте должно появляться белая точка. Но нет! Тыкните носом пожалуйста!
Роман12212221 вне форума Ответить с цитированием
Старый 05.12.2017, 08:32   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Чего то вы слишком просто захотели.
А настройки камеры разве не надо??
а сопоставить координаты из оконного режима в OGL??
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.12.2017, 12:01   #3
Роман12212221
 
Регистрация: 27.11.2016
Сообщений: 4
По умолчанию

Нет, нажатие просто не срабатывает.
Если вы про инциализацию OGL, да прочее, то там всё есть, только в другом классе

Последний раз редактировалось Роман12212221; 05.12.2017 в 12:09.
Роман12212221 вне форума Ответить с цитированием
Старый 05.12.2017, 12:08   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Код:
screen.MouseMove += new MouseEventHandler(screen_MouseMove);
А разве это не событие перемещения мыши?

Код:
Gl.End()
нигде не видно.

Где инициализация контекста?
Что вы совсем не то делаете.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 05.12.2017 в 12:11.
WorldMaster вне форума Ответить с цитированием
Старый 05.12.2017, 14:01   #5
Роман12212221
 
Регистрация: 27.11.2016
Сообщений: 4
По умолчанию

Говорю же, Gl.glEnd() в другом классе
Код:
     public static void Draw(SimpleOpenGlControl opengl,uint n)
        {

            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
            Gl.glLoadIdentity();
            Gl.glColor3ub(200, 240, 230);
            torus.draw(opengl,n);
            Gl.glEnd();
            Gl.glFlush();
            opengl.Invalidate();


            }
Роман12212221 вне форума Ответить с цитированием
Старый 05.12.2017, 15:25   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Кто вас так учил писать то??
Должен быть единый цикл рендеринга картинки. Формировать данные можете где хотите но рендерить то надо в едином.

Код:
double x = e.X;
double y = e.Y;
... 
Gl.glVertex2f((float)x,(float)y);
Еще раз уточню что координаты окна и OGL не сопоставимы. Необходимы дополнительные преобразования.


Вообще по хорошему при создании объекта неплохо после генерации точек создать glList или что покруче в карточку залить. Но даже если и без этого то хотябы просто List<vertex> а уж затем в таймере рендера организовать :

Код:
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3ub(200, 240, 230);
glBegin
// foreach glvertex ... 
glEnd
glSwapBuffers


Вот нашел старый код:

Код:
        /// <summary>
        /// Производит преобразование оконных координат в координаты OpenGL
        /// </summary>
        /// <param name="mseX"></param>
        /// <param name="mseY"></param>
        /// <param name="GLX"></param>
        /// <param name="GLY"></param>
        public static void ScreenToGL(int mseX, int mseY, out float GLX, out float GLY, out float GLZ)  // процедура перевода экранных координат в GL
        {
            int[] Viewport = new int[4];
            double[] mvMatrix = new double[16];
            double[] ProjMatrix = new double[16];
            double wx, wy, wz, RealY;
            Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX, mvMatrix);
            Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX, ProjMatrix);
            Gl.glGetIntegerv(Gl.GL_VIEWPORT, @Viewport);

            RealY = Viewport[3] - mseY;

            Glu.gluUnProject(mseX, RealY, 0.1f, mvMatrix, ProjMatrix, Viewport, out wx, out wy, out wz);
            GLX = Convert.ToSingle(wx);
            GLY = Convert.ToSingle(wy);
            GLZ = Convert.ToSingle(wz);
        }

        public static void GlToScreen(float GLX, float GLY, float GLZ, out int mseX, out int mseY)  // процедура перевода экранных координат в GL
        {
            int[] Viewport = new int[4];
            double[] mvMatrix = new double[16];
            double[] ProjMatrix = new double[16];
            double wx, wy, wz;
            Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX, mvMatrix);
            Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX, ProjMatrix);
            Gl.glGetIntegerv(Gl.GL_VIEWPORT, @Viewport);

            Glu.gluProject(GLX, GLY, GLZ, mvMatrix, ProjMatrix, Viewport, out wx, out wy, out wz);
            if (!double.IsNaN(wx) && !double.IsNaN(wy) && !double.IsNaN(wz))
            {
                wy = Viewport[3] - wy;
                mseX = Convert.ToInt32(wx);
                mseY = Convert.ToInt32(wy);
            }
            else
            {
                mseX = 0;
                mseY = 0;
            }
        }



И еще .. при каждом вызове startdraw вы будете создавать подписку на событие. А без допобработки они будут накапливаться и вызываться потом туеву учу раз. Так что концепцию приложения нужно срочно менять.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 05.12.2017 в 16:03.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер срабатывает раньше времени или вообще не срабатывает Terebonko JavaScript, Ajax 1 03.08.2017 11:48
Мышь program2001 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 12.07.2011 03:53
Мышь Salvatore- Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.09.2009 16:57
Мышь Михаил Юрьевич Общие вопросы Delphi 8 09.06.2008 11:23
Мышь kl45gp Общие вопросы Delphi 7 16.06.2007 22:47