Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Дневники и блоги —› ARCHANGEL's blog
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 13 июля 2012 18:28
· Личное сообщение · #1

Добрый день, уважаемые форумчане. Ни для кого не секрет, что решил я с недавних пор пойти учиться программированию. Поэтому стали меня интересовать практические аспекты кодинга, иногда весьма далёкие от вопросов реверсинга. Поэтому чтоб не засорять форум, решил создать этот блог. Стоит сказать, что вопросы, которые планируется тут разбирать, не такие уж и бесполезные. Они часто могут возникать при написании тех же кейгенов или тулз для реверсинга, так что, надеюсь, каждый сможет найти здесь что-нибудь интересное. Как некоторые уже догадались, вопросы Common Controls, простым числам, и сегодняшний вопрос по OpenGL как раз из серии учебных. Теперь о самом вопросе.

На днях выполнял задание про отрисовку простых фигур: треугольника, квадрата и т.д. Решено было выполнять рисование средствами OpenGL. Литературы по этому делу много, поэтому я разобрался, что и как. Т.е. в литературе советовали использовать бибилиотеку glut.dll, которая сама не относится к стандартному OpenGL, но её применение, как я понял, упрощает использование OpenGL в своих проектах. Далее я решил создать базовый класс для отрисовки треугольника, а от него создать производные классы для отрисовки других геометрических фигур. Но на практике получилась вот такая сложность. Дело в том, что glut, по сути, инкапсулирует функции Windows и OpenGL, что упрощает операции с ними. Но от базовых вещей же никуда не деться. Т.е. если процедура обработки оконных сообщений (CALLBACK WindowProc) должна присутствовать, то в классе она должна быть статической. Так и здесь:
Code:
  1. glutDisplayFunc(Draw); //где Draw - колбэк, а значит не может быть простым методом класса


Но вот проблема - мне нужно передать внутрь Draw несколько параметров. Являясь статическим методом, Draw не имеет указателя this, а значит не видит обычных полей. Статические поля он видит, но при попытке в конструкторе присвоить значения этим полям появляется ошибка линковки. Понятное дело, что по-хорошему, можно обойтись совсем без классов, но это превратит код в кашу - большое количество глобальных переменных, почти одинаковые функции со схожим функционалом принесут путаницу раньше, чем будут отрисованы несколько фигур. Кто посоветует, как быть в такой ситуации и как решить проблему со статическими функциями-членами?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 февраля 2013 16:27
· Личное сообщение · #2

ты бы бросал уже изучать все подряд
а опредялся с предметной областью где интересней/переспективней/итд
или ты себя видишь только как программерская раб-сила ?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 28 февраля 2013 16:36
· Личное сообщение · #3

reversecode
Всё гораздо проще. Передо мной стоит несколько задач:

1. Научиться кодить быстро.
2. Научиться кодить графику.
3. Научиться кодить сложные математические алгоритмы (численные методы).

Зачем это надо? Во-первых, тулзы для реверсинга хочется кодить. Во-вторых, чтоб они не были страшненькими. В-третьих - это для работы.

В учебном заведении, которое я нынче посещаю, сейчас идёт прекрасный курс Win API. Вы, я полагаю, понимаете, как о для меня "нов и как его глубоко преподают". С++ уже как-то осилили. Теперь надо б изучить нормальный фреймворк. Студия - это прекрасно, но это ж не фреймворк. С шарп - ну, я его недолюбливаю. А кьют можно и поизучать пока. А что - идея мне нравится, объектно-ориентирован, красив в плане графики, позволяет наряду с его нововведениями типа метаобъектов использовать и то, чему я научился раньше типа stl, WinAPI и фишечек, специфичных для студийного компилятора. Вон hors смог дай запилить, красавчик. Может, и я когда-нибудь что-то запилю полезное для людей.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 февраля 2013 16:39 · Поправил: reversecode
· Личное сообщение · #4

ARCHANGEL пишет:
1. Научиться кодить быстро.
2. Научиться кодить графику.
3. Научиться кодить сложные математические алгоритмы (численные методы).


!= (не равно)

ARCHANGEL пишет:
тулзы для реверсинга хочется кодить


1,2,3 => gamedev.ru

ARCHANGEL пишет:
В-третьих - это для работы.

если в gamedev, то тогда понятно




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 28 февраля 2013 16:58 · Поправил: neomant
· Личное сообщение · #5

reversecode пишет:
ты бы бросал уже изучать все подряд
а опредялся с предметной областью где интересней/переспективней/итд


А почему бы и не поизучать, если интересно. Хотя бы затем, чтобы знать, что есть и затем выбрать для себя, что лучше подходит. Сам изучил Java, хотя пока практических применений ему не вижу. На счёт C# - предвзятое отношение к нему, хотя это и не тема для священных войн. Может потому не нравится, что чуть меньше чем полностью идея содрана с Явы. Ещё раздражает его визуальная среда разработки в Студии, попахивает чем-то Дельфийским и потыкает новичкам в говнокодерстве.

-----
Следуй за белым кроликом





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 февраля 2013 17:10
· Личное сообщение · #6

neomant пишет:
А почему бы и не поизучать, если интересно.

оглядываясь назад по своему пути, вижу что очень много ценного времени было потрачено на изучение того что нафиг не надо,
потому что основное в выборе стало именно интерес в технологиях,переспективах

не.., дело конечно хозяйское
но как по мне, нету смысла окучивать кустик гдето в лесу, если планируешь перебиратся в город а кустик вместе с рощей все равно сравняют через несколько лет с землей




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 18 марта 2013 20:41
· Личное сообщение · #7

Хэллоу, товарищи. Появилась у меня новая задачка, из теории графов. Мне нужно в графе получить все допустимые маршруты из точки А до точки В. Именно не кратчайшие, не эйлеровы и гамильтоновы, не проверить, есть маршрут или нет, а именно все. Гуглил. Похоже, это - дежурный вопрос студенческого сообщества. Вот только дежурные ответы как-то не гуглятся. Что подскажете, уважаемые?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 18 марта 2013 20:55
· Личное сообщение · #8

Рекурсивно обходим вершины начиная с A. Пройденое ребро к вершине x помечаем. Два варианта: достигли B - копируем пройденый маршрут; попали в тупик - откидываем.

-----
Следуй за белым кроликом





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 18 марта 2013 22:10
· Личное сообщение · #9

Рекурсия, плюс, если граф большой, нужно продумать, как и где хранить промежуточные значения.

-----
http://ntinfo.biz





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 19 марта 2013 00:27
· Личное сообщение · #10

Хорошо, ну а если более подробно? Смотрите, что мне неясно. Изначально граф - это некий контейнер объектов. Как я понимаю, он содержит внутри себя ребра, чтоб можно было отмечать уже пройденные. Ребро должно содержать информацию о вершинах, которые это ребро соединяет. Но в качестве начала движения, да и в качестве конца движения тоже, мы задаем вершину. Получается, что в рёбрах неудобно искать вершину. Если же поменять вершины и рёбра местами, т.е. в контейнере хранить экземпляры объектов "вершин", то проблема - как помечать рёбра. И как быть?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 19 марта 2013 01:02
· Личное сообщение · #11

ARCHANGEL пишет:
проблема - как помечать рёбра


Создать еще один контейнер объектов, где будут храниться пройденные пути. Потом рекурсивно начать обход графа. Если нового пути нет во втором контейнере, то добавляем его во второй контейнер, если есть игнорируем.

Если задача чисто практическая, например нужно реализовать графы в своей программе, то можно использовать уже готовые библиотеки. Для питона я использовал вот это http://gitorious.org/projects/graphine/pages/Home

-----
http://ntinfo.biz





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 29 марта 2013 00:28
· Личное сообщение · #12

Я вот до сих пор не понимаю где практически можно применить графы. Вот с деревьями я разобрался от и до. А графы темень...

-----
have a nice day





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 29 марта 2013 01:36
· Личное сообщение · #13

Nimnul пишет:
Я вот до сих пор не понимаю где практически можно применить графы. Вот с деревьями я разобрался от и до. А графы темень...


Графы используют для генерации кода в полиморфных крипторах.

-----
http://ntinfo.biz





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 29 марта 2013 02:26
· Личное сообщение · #14

ida & hexrays так же графы
там где кодо геренация или есть алгоритмы сортировки/упаковки тоже есть




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 29 марта 2013 19:59 · Поправил: Nimnul
· Личное сообщение · #15

reversecode

В чем отличие сортировки на графах и на деревьях? Преимущество есть?

-----
have a nice day





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 марта 2013 15:32
· Личное сообщение · #16

имеется ввиду не сортировка десятка чисел
а сортировка в графе
--> Link <-- итд




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 30 марта 2013 15:56
· Личное сообщение · #17

Иными словами графы нужны только для решения абстрактных математических задач?

-----
have a nice day





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 марта 2013 16:01 · Поправил: reversecode
· Личное сообщение · #18

если IDA и hexrays для тебя это абстрактный продукт, то мне добавить нечего


http://habrahabr.ru/post/151151/
https://ru.wikipedia.org/wiki/Задача_коммивояжёра

и гуглите
"практическое применение задачи коммивояжера"




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 30 марта 2013 16:09 · Поправил: Nimnul
· Личное сообщение · #19

причем здесь IDA и др. Я хочу задачу из "жизни" которую решить можно только\лучше на графах.

Ясно сейчас гляну.

-----
have a nice day





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 01 апреля 2013 22:02 · Поправил: neomant
· Личное сообщение · #20

Nimnul пишет:
В чем отличие сортировки на графах и на деревьях?

В чём отличие графов и деревьев, не беря в расчёт, что у деревьев нет циклов?

-----
Следуй за белым кроликом





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 02 апреля 2013 12:00
· Личное сообщение · #21

Деревья теже самые графы только с четко установленным количеством(2) ссылок на подчиненные узлы.

-----
have a nice day





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 02 апреля 2013 13:07 · Поправил: neomant
· Личное сообщение · #22

Nimnul пишет:
Деревья теже самые графы только с четко установленным количеством(2) ссылок на подчиненные узлы.

Это бинарные деревья, в общем случае это не так.

-----
Следуй за белым кроликом





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 02 апреля 2013 13:08
· Личное сообщение · #23

Продолжайте вашу мысль

-----
have a nice day





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 02 апреля 2013 19:43 · Поправил: neomant
· Личное сообщение · #24

Nimnul пишет:
В чем отличие сортировки на графах и на деревьях? Преимущество есть?

То есть поиск и сортировка на деревьях - это и есть поиск и сортировка на графах.

-----
Следуй за белым кроликом





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 03 апреля 2013 09:45
· Личное сообщение · #25

Ну, есть ещё и задачи не из области информатики. Например, распределение потока жидкости или газа в кольцевой системе (гидравлический расчёт). Подобная же задача встречается и у электриков. Там же может быть поставлена задача проверки возможности построения на указанных вершинах планарного графа с целью выявить, возможна ли реализация электрической схемы на плоскости - без пересечения контактов.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 04 апреля 2013 12:06
· Личное сообщение · #26

Ну это уже другое дело. В последнее время меня аж страть одолевает насчет структур данных всяких.

-----
have a nice day





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 19 апреля 2013 16:08
· Личное сообщение · #27

Товарищи, собираюсь писать приложение, которое в ходе своей работы должно строить графики некоторых полиномиальных функций и сохранять эти графики в виде картинок. Формат хранения этих самых картинок (изображений) не принципиален, т.е. jpeg, bmp, png - подойдут. Вызывает затруднение такой момент. Допустим, я в клиентской области окна отобразил график так, как мне нужно. Как бы теперь программно сохранить эту область в виде картинки? Т.е. такой своеобразный принтскрин клиенсткой области окна - как это всё вообще может быть реализовано?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 19 апреля 2013 16:46
· Личное сообщение · #28

BitBlt, не?

-----
Следуй за белым кроликом





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 19 апреля 2013 16:56
· Личное сообщение · #29

neomant
Как на диск потом изображение сохранить, которое получено в памяти в результате копирования? После вызова BitBlt у нас же ещё нет изображения в виде файла, или я ошибаюсь?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 19 апреля 2013 17:45
· Личное сообщение · #30

Точно сейчас не скажу, примерно, в теории. Создаём контекст изображения в памяти, совместимый с контекстом окна, BitBlt в него из контекста окна и после этого имеем битовое изображение. Затем формируем BMP заголовок и скидываем всё на диск. Но лучше не заморачиваться сильно и поискать уже готовые наработки.

-----
Следуй за белым кроликом





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 19 апреля 2013 19:24 · Поправил: OKOB
· Личное сообщение · #31

--> Как-то так <--

или так

Code:
  1. #include <windows.h>
  2.  
  3. bool SaveBMPFile(char *filename, HBITMAP bitmap, HDC bitmapDC, int width, int height);
  4.  
  5. bool ScreenCapture(int x, int y, int width, int height, char *filename){
  6.    // get a DC compat. w/ the screen
  7.    HDC hDc = CreateCompatibleDC(0);
  8.    // make a bmp in memory to store the capture in
  9.    HBITMAP hBmp = CreateCompatibleBitmap(GetDC(0), width, height);
  10.    // join em up
  11.    SelectObject(hDc, hBmp);
  12.    // copy from the screen to my bitmap
  13.    BitBlt(hDc, 0, 0, width, height, GetDC(0), x, y, SRCCOPY);
  14.    // save my bitmap
  15.    bool ret = SaveBMPFile(filename, hBmp, hDc, width, height);
  16.    // free the bitmap memory
  17.    DeleteObject(hBmp);
  18.    return ret;
  19.    }
  20.    
  21. main(){
  22.    ScreenCapture(500, 200, 300, 300, "c:\testScreenCap.bmp");
  23.    system("pause");
  24.    }


с использованием --> SaveBMPFile <--

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: ARCHANGEL
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
 eXeL@B —› Дневники и блоги —› ARCHANGEL's blog
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати