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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2012, 15:40   #1
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
Сообщение С# перемещение вершин квадрата

нарисовать квадрат и с помощью клавиш перемещать вершину (влево, вправо, вверх или вниз) вершину выбрать клавишей tab. для начала хотелось бы спросить как передвинуть вершину. клавишей w хотел передвинуть вершину, но почему то она не двигается:
Код:
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.OpenGl;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        private static bool Init()
        {
            Gl.glShadeModel(Gl.GL_SMOOTH);
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
            Gl.glClearDepth(1.0f);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glDepthFunc(Gl.GL_LEQUAL);
            Gl.glEnable(Gl.GL_COLOR_MATERIAL);
            Gl.glEnable(Gl.GL_LIGHTING);
            Gl.glEnable(Gl.GL_LIGHT0);
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT,
                      Gl.GL_NICEST);

            return true;
        }
        private static void Resize(int width, int height)
        {
            if (height == 0)
            {
                height = 1;
            }

            Gl.glViewport(0, 0, width, height);
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluPerspective(45, width / (double)height, 0.1, 100);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
        }

        private void Draw()
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glLoadIdentity();
            Gl.glTranslated(0.0, -0.5, -4.0);
            Gl.glRotated(0.0, 0.0, 1.0, 0.0);
            Gl.glColor3d(0.6, 0.4, 0.2);
            Gl.glBegin(Gl.GL_QUADS);           
            Gl.glVertex2d(-1,-1);
            Gl.glVertex2d(-2,-1);
            Gl.glVertex2d(-2,1);
            Gl.glVertex2d(-1,1);
            Gl.glEnd();
            Gl.glTranslated(0.0, 1.0, 0.0);
            Gl.glFlush();
        }


        public Form1()
        {
            InitializeComponent();
            simpleOpenGlControl1.InitializeContexts();
            Init();
            Resize(simpleOpenGlControl1.Width,simpleOpenGlControl1.Height);
        }

        private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
        {
            Draw();
        }

        private void simpleOpenGlControl1_Resize(object sender, EventArgs e)
        {
            Resize(simpleOpenGlControl1.Width, simpleOpenGlControl1.Height);
        }

        private void simpleOpenGlControl1_KeyDown(object sender, KeyEventArgs e)
        {
            int x = -1;
            switch(e.KeyCode){
                case Keys.W:                    
                        Gl.glBegin(Gl.GL_QUADS);
                        Gl.glVertex2d(-1,-1);
            Gl.glVertex2d(x++,-1);
            Gl.glVertex2d(-2,1);
            Gl.glVertex2d(-1,1);
                        Gl.glEnd();
                        Gl.glFlush();
                break;
            }
        }
    }
}
alex(21) вне форума Ответить с цитированием
Старый 05.11.2012, 18:37   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,885
По умолчанию

А ничего, что
Код:
private void Draw()
        {
            ...   
            Gl.glVertex2d(-1,-1);
            Gl.glVertex2d(-2,-1);
            Gl.glVertex2d(-2,1);
            Gl.glVertex2d(-1,1);
всегда рисует одну и ту же форму квадрата ?
Этот метод именно и вызывается для отрисовки, а то, что Вы там меняете по кнопке - просто не учитывается.
Сделать надо так - по кнопке менять переменную (координату), а в отрисовке использовать эту переменную как нужную координату.
phomm вне форума Ответить с цитированием
Старый 06.11.2012, 10:08   #3
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

объявил переменные x и y:
Код:
...
public partial class Form1 : Form
    {
        int x=0, y=0;
        private static bool Init()
.....
в функции draw использовал эти переменные:
Код:
private void Draw()
        {
            ...   
            Gl.glVertex2d(x,y);
            Gl.glVertex2d(-2,-1);
            Gl.glVertex2d(-2,1);
            Gl.glVertex2d(-1,1);
затем изменил:
Код:
private void simpleOpenGlControl1_KeyDown(object sender, KeyEventArgs e)
        {
            switch(e.KeyCode){
                case Keys.W: 
                 x++;
                 y++;
                 Draw();
                 break;
        }
результат тот же. ничего не меняется
alex(21) вне форума Ответить с цитированием
Старый 06.11.2012, 12:45   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,885
По умолчанию

Проект киньте архивом, покопаем-с
phomm вне форума Ответить с цитированием
Старый 06.11.2012, 13:00   #5
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

Цитата:
результат тот же. ничего не меняется
оказывается меняется, просто нужно после нажатия клавиши изменить размер окна и после этого фигура перерисовывается. а как сделать так чтобы не нужно было изменять размер окна, а просто нажать клавишу и фигура сразу перерисовывается?
и еще один вопрос. я написал для изменения координат по одной вершине, а нужно нажимая клавишу Tab выбирать любые 4.
вот мои наработки:
Код:
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.OpenGl;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        int x = -1, y = -1;
        private static bool Init()
        {
            Gl.glShadeModel(Gl.GL_SMOOTH);
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
            Gl.glClearDepth(1.0f);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glDepthFunc(Gl.GL_LEQUAL);
            Gl.glEnable(Gl.GL_COLOR_MATERIAL);
            Gl.glEnable(Gl.GL_LIGHTING);
            Gl.glEnable(Gl.GL_LIGHT0);
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT,
                      Gl.GL_NICEST);

            return true;
        }
        private static void Resize(int width, int height)
        {
            if (height == 0)
            {
                height = 1;
            }

            Gl.glViewport(0, 0, width, height);
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluPerspective(45, width / (double)height, 0.1, 100);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
        }

        private void Draw()
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glLoadIdentity();
            Gl.glTranslated(0.0, -0.5, -4.0);
            Gl.glRotated(0.0, 0.0, 1.0, 0.0);
            Gl.glColor3d(0.6, 0.4, 0.2);
            Gl.glBegin(Gl.GL_QUADS); 
            Gl.glVertex2d(x,y);
            Gl.glVertex2d(-1,1);
            Gl.glVertex2d(1,1);
            Gl.glVertex2d(1,-1);
            Gl.glEnd();
            Gl.glTranslated(0.0, 1.0, 0.0);
            Gl.glFlush();
        }


        public Form1()
        {
            InitializeComponent();
            simpleOpenGlControl1.InitializeContexts();
            Init();
            Resize(simpleOpenGlControl1.Width,simpleOpenGlControl1.Height);
        }

        private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
        {
            Draw();
        }

        private void simpleOpenGlControl1_Resize(object sender, EventArgs e)
        {
            Resize(simpleOpenGlControl1.Width, simpleOpenGlControl1.Height);
        }

        private void simpleOpenGlControl1_KeyDown(object sender, KeyEventArgs e)
        {
            
            switch(e.KeyCode){
                case Keys.A:
                    x=x-1;
                    Draw();
                break;
                case Keys.D:
                x = x + 1;
                Draw();
                break;
                case Keys.W:
                y = y + 1;
                Draw();
                break;
                case Keys.S:
                y = y - 1;
                Draw();
                break;
            }
        }
    }
}
alex(21) вне форума Ответить с цитированием
Старый 06.11.2012, 15:01   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,885
По умолчанию

Ну проект-то киньте (архивом всю папку с проектом и сюда на форум прикрепить), недосуг мне копипастить с форума и собирать проект с нуля.
А про кнопки - легко, странно что идея Вам не пришла - создать переменную, которую увеличивать по табу, если больше 4 то скидывать, зацикливая её изменение на 4 позиции, а по этой переменной и определять какую вершину двигаете.
phomm вне форума Ответить с цитированием
Старый 06.11.2012, 15:22   #7
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

вот мой проект. в теории я понял, но реализовать не получается
Вложения
Тип файла: rar WindowsFormsApplication3.rar (247.6 Кб, 8 просмотров)
alex(21) вне форума Ответить с цитированием
Старый 06.11.2012, 20:00   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,885
По умолчанию

Вот сделал, таб почему-то не хочет работать, сделал по пробелу.
Ключевое это инвалидейт в конце Draw (думаю, Вы пропустили сей момент из туторов по тао) ну и конечно счетчик какую вершину меняем(по пробелу). Сами вершины пришлось сложить в массив, чтобы изображение сохранялось при смене текущей меняемой вершины (а иначе там каша получается)
Вложения
Тип файла: zip Form1.zip (1.0 Кб, 7 просмотров)
phomm вне форума Ответить с цитированием
Старый 11.11.2012, 17:47   #9
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

phomm, спасибо
alex(21) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование квадрата KocT9 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 22.10.2014 11:58
Формирование магического квадрата waitisova C# (си шарп) 0 25.05.2011 22:00
Загадка квадрата. zetr0 Помощь студентам 6 17.03.2011 00:22
Качение квадрата Leshiy1 Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2010 20:20
найти возможные координаты вершин квадрата(полное условие внутри).очень срочно.заранне благодарен. Juicy_G Помощь студентам 2 23.12.2008 18:19