На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Визуализация облака точек , (разделено)
    :lol: Спасибки огромное за статью :))) Мне наконец-то начинает становиться понятно, что и к чему.
    Но можно спросить у знающих Direct X гуру? Я потихоньку осваиваю Direct X , мне он нужен для программки в VS 2005 (VS 2008) по визуализации результатов функций в 3D (множество точек образующих облако, по идее должно выглядеть красиво). Так вот в чем мой вопрос - это реально сделать с помощью Direct X или все таки лучше Open GL? И если да ,то в каком направлении мне более усиленно работать?

    Эта тема была разделена из темы "Статьи по DirectX"
    Сообщение отредактировано: aurea.lat -
      Цитата aurea.lat @
      Так вот в чем мой вопрос - это реально сделать с помощью Direct X
      Да, конечно.

      Цитата aurea.lat @
      в каком направлении мне более усиленно работать?
      Пиши на том что знаешь. Если есть хоть какой-то опыт в DirectX, то пиши на нем. Задачка простая, и с нуля реализуется примерно за одинаковое время и там и там.

      Цитата aurea.lat @
      или все таки лучше Open GL?
      Если задача состоит только в выводе массива точек, то я бы выбрал OpenGL. Просто там это можно чуть проще сделать даже не думая о billboars.
      ExpandedWrap disabled
        struct Particle // частица
        {
                unsigned char r, g, b, a; // цвет
                float         x, y, z;    // координаты
        };
         
        Particle particles[N];   // массив всех частиц
      Отрисовка:
      ExpandedWrap disabled
            glPointSize(1.5f);              // размер частиц
            glEnable(GL_POINT_SMOOTH);      // круглые частицы
            glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
         
            glEnable(GL_BLEND);                                
            glBlendFunc(GL_SRC_ALPHA, GL_ONE);  // полупрозрачность частиц
         
            // вкл.
            glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Particle), &particles[0].r ); // цвет
            glEnableClientState(GL_COLOR_ARRAY);
            glVertexPointer( 3, GL_FLOAT, sizeof(Particle), &particles[0].x ); // координаты
            glEnableClientState(GL_VERTEX_ARRAY);
            
            glDrawArrays(GL_POINTS, 0, N); // рисуем все частицы
            
            // выкл.
            glDisableClientState(GL_VERTEX_ARRAY);
            glDisableClientState(GL_COLOR_ARRAY);
            glDiable(GL_BLEND);


      Тебе осталось только научится инициализировать контекст OpenGL (см. пример), и вроде как всё.

      Сообщения были разделены в тему "Разработки & DirectX"
        Цитата albom @
        glEnable(GL_POINT_SMOOTH); // круглые частицы
        glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);

        При использовании GL_POINT_SMOOTH большинство реализаций GL будут выпадать в софтвар, так что если нужны сглаженные точки лучше уж использовать billboards с альфа блендингом (через GL_POINT_SPRITE).
        Сообщение отредактировано: mitrich -
          OMG, что у тебя за древние реализации??
          Ёще RIVA 128 одинадцать лет назад умела рисовать это аппаратно.
            Цитата albom @
            OMG, что у тебя за древние реализации??
            Ёще RIVA 128 одинадцать лет назад умела рисовать это аппаратно.

            Насчет большинства я конечно погорячился, то вот в некоторых новых (и не очень) ATI-шных дровах это наблюдается - они видимо просто не утруждают себя реализовывать нормально эту "устаревшую" функциональность, как и антиалиасинг полигонов и т.д.
              albom Я только начала осваивать DirectX и дальше примитивов (линий и треугольничков) пока не забралась именно поэтому я была не уверена реально это или нет. Но вопрос тут не только в простом отображении массива но и в динамической демонстрации (рассматривается изменение картинки на множестве итераций, функция должна порождать что-то вроде хаоса точек и количество их будет достаточно существенным (мне говорили что не менее 1000 итераций работы функции если не больше))
              Сообщение отредактировано: aurea.lat -
                Цитата aurea.lat @
                и в динамической демонстрации
                В смысле анимация?

                Цитата aurea.lat @
                рассматривается изменение картинки на множестве итераций, функция должна порождать что-то вроде хаоса точек и количество их будет достаточно существенным (мне говорили что не менее 1000 итераций работы функции если не больше)
                Одна итерация - одно множество точек, другая итераци - дргое множество? Т.е., опять же, грубо говоря, каждая итерация описывает одну сцену в какой-то момент времени?
                Но, в любом случае, не вижу каких-либо проблем сейчас с отрисовкой, но тебе, конечно, должно быть виднее, что ты там собираешься рисовать :)

                Добавлено
                Цитата mitrich @
                , как и антиалиасинг полигонов
                Вот с этим точно были проблемы почти у всех :yes-sad:

                Цитата mitrich @
                реализовывать нормально эту "устаревшую" функциональность
                В принципе уже можно писать без кавычек, так как в новом (ещё не вышедшем) стандарте OpenGL уже не будет этой функциональности, и POINT_SPRITE будет включен постоянно. Но сейчас это позволяет сократить код, так почему бы не воспользоваться? Тем более, что переделать на POINT_SPRITE совсем не долго.
                  Да скорее всего анимацию :huh: У меня преподаватель пока не определился что от меня хочет.
                  :lol: Большое спасибо за советыAlbom ;)
                  Я пока что осваиваюсь со всем этим :wall: Но уже кое что получается.
                    Пробовала пример с рисованием вершин в MFC
                    ExpandedWrap disabled
                          glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
                          glClear (GL_COLOR_BUFFER_BIT);      // очистка буфера цвета
                       
                          glPointSize (20);                   // размер точек
                          glColor3f (1.0, 0.0, 0.5);          // текущий цвет примитивов
                          glBegin (GL_POINTS);
                              glVertex2f (-1, -1);
                              glVertex2f (-1, 1);
                              glVertex2f (0, 0);
                              glVertex2f (1, -1);
                              glVertex2f (1, 1);
                          glEnd();


                    Ничего не прорисовывается. Как это исправить? :huh:

                    В OUTPUT пишет
                    ExpandedWrap disabled
                      'Example.exe': Loaded 'C:\Documents and Settings\Натаха-ха\open gl\16\Debug\Example.exe', Symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\opengl32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\secur32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\user32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\glu32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\ddraw.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\dciman32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_c8452471\mfc80d.dll', Symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll', Symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\shlwapi.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\oleaut32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\ole32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\imm32.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\uxtheme.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\MSCTF.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\version.dll', No symbols loaded.
                      'Example.exe': Unloaded 'C:\WINDOWS\system32\version.dll'
                      'Example.exe': Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\nvoglnt.dll', No symbols loaded.
                      'Example.exe': Loaded 'C:\WINDOWS\system32\mcd32.dll', No symbols loaded.
                      'Example.exe': Unloaded 'C:\WINDOWS\system32\mcd32.dll'
                      'Example.exe': Loaded 'C:\WINDOWS\system32\comctl32.dll', No symbols loaded.
                      The program '[3652] Example.exe: Native' has exited with code 0 (0x0).
                      Цитата aurea.lat @
                      Ничего не прорисовывается. Как это исправить?
                      Покажи больше кода (инициализация, настройка). В том, что ты сейчас написал ошибок нет.
                        Если вместо точек делаю прорисовку линий то отображение идет, не получается только с вершинами :huh:

                        ExpandedWrap disabled
                          // ExampleView.cpp
                          //
                           
                          #include "stdafx.h"
                          #include "Example.h"
                           
                          #include "ExampleDoc.h"
                          #include "ExampleView.h"
                           
                          #ifdef _DEBUG
                          #define new DEBUG_NEW
                          #undef THIS_FILE
                          static char THIS_FILE[] = __FILE__;
                          #endif
                           
                          /////////////////////////////////////////////////////////////////////////////
                          // CExampleView
                           
                          IMPLEMENT_DYNCREATE(CExampleView, CView)
                           
                          BEGIN_MESSAGE_MAP(CExampleView, CView)
                              //{{AFX_MSG_MAP(CExampleView)
                              ON_WM_CREATE()
                              ON_WM_DESTROY()
                              //}}AFX_MSG_MAP
                              // Standard printing commands
                              ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
                              ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
                              ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
                          END_MESSAGE_MAP()
                           
                          /////////////////////////////////////////////////////////////////////////////
                          // CExampleView construction/destruction
                           
                          CExampleView::CExampleView()
                          {
                              // TODO: add construction code here
                           
                          }
                           
                          CExampleView::~CExampleView()
                          {
                          }
                           
                          BOOL CExampleView::PreCreateWindow(CREATESTRUCT& cs)
                          {
                              // TODO: Modify the Window class or styles here by modifying
                              //  the CREATESTRUCT cs
                           
                              cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
                           
                              return CView::PreCreateWindow(cs);
                          }
                           
                          /////////////////////////////////////////////////////////////////////////////
                          // CExampleView drawing
                           
                          void CExampleView::OnDraw(CDC* pDC)
                          {
                              CRect clientRect;
                           
                              CExampleDoc* pDoc = GetDocument();
                              ASSERT_VALID(pDoc);
                           
                              // TODO: add draw code for native data here
                              GetClientRect(&clientRect);
                              glViewport(0, 0, clientRect.right, clientRect.bottom);
                           
                              glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
                              glClear (GL_COLOR_BUFFER_BIT);      // очистка буфера цвета
                           
                              glPointSize (20);                   // размер точек
                              glColor3f (1.0, 0.0, 0.5);          // текущий цвет примитивов
                              glBegin (GL_POINTS);
                                  glVertex2f (-1, -1);
                                  glVertex2f (-1, 1);
                                  glVertex2f (0, 0);
                                  glVertex2f (1, -1);
                                  glVertex2f (1, 1);
                              glEnd();
                           
                          }
                           
                          /////////////////////////////////////////////////////////////////////////////
                          // CExampleView printing
                           
                          BOOL CExampleView::OnPreparePrinting(CPrintInfo* pInfo)
                          {
                              // default preparation
                              return DoPreparePrinting(pInfo);
                          }
                           
                          void CExampleView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
                          {
                              // TODO: add extra initialization before printing
                          }
                           
                          void CExampleView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
                          {
                              // TODO: add cleanup after printing
                          }
                           
                          /////////////////////////////////////////////////////////////////////////////
                          // CExampleView diagnostics
                           
                          #ifdef _DEBUG
                          void CExampleView::AssertValid() const
                          {
                              CView::AssertValid();
                          }
                           
                          void CExampleView::Dump(CDumpContext& dc) const
                          {
                              CView::Dump(dc);
                          }
                           
                          CExampleDoc* CExampleView::GetDocument() // non-debug version is inline
                          {
                              ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CExampleDoc)));
                              return (CExampleDoc*)m_pDocument;
                          }
                          #endif //_DEBUG
                           
                          /////////////////////////////////////////////////////////////////////////////
                          // CExampleView message handlers
                           
                          int CExampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
                          {
                              PIXELFORMATDESCRIPTOR pfd;
                              int iPixelFormat;
                              CDC *pDC;
                           
                              if (CView::OnCreate(lpCreateStruct) == -1)
                                  return -1;
                           
                              // TODO: Add your specialized creation code here
                              pDC = GetDC();
                              memset(&pfd, 0, sizeof(pfd));
                              pfd.nSize = sizeof(pfd);
                              pfd.nVersion = 1;
                              pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
                              pfd.iPixelType = PFD_TYPE_RGBA;
                              pfd.iLayerType = PFD_MAIN_PLANE;
                              pfd.cDepthBits = 16;
                              iPixelFormat = ChoosePixelFormat(pDC->m_hDC, &pfd);
                              SetPixelFormat(pDC->m_hDC, iPixelFormat, &pfd);
                              m_hglrc = wglCreateContext(pDC->m_hDC);
                              wglMakeCurrent(pDC->m_hDC, m_hglrc);
                              ReleaseDC(pDC);
                           
                              return 0;
                          }
                           
                          void CExampleView::OnDestroy()
                          {
                              CView::OnDestroy();
                              
                              // TODO: Add your message handler code here
                           
                              wglMakeCurrent(NULL, NULL);
                          }
                          Цитата aurea.lat @
                          Если вместо точек делаю прорисовку линий то отображение идет, не получается только с вершинами

                          Вообще, странно.
                          А если добавить настройку матриц?
                          ExpandedWrap disabled
                                glMatrixMode(GL_PROJECTION);
                                glLoadIdentity();
                                glOrtho(-2, 2, -2, 2, -1, 1);
                                glMatrixMode(GL_MODELVIEW);
                                glLoadIdentity();
                            :huh: Все так же :(
                            Самое интересное что на ноуте у друга прорисовывается а у меня все идет без ошибок, но при запуске ничего не рисует. и сплошные No symbols loaded.
                            Сообщение отредактировано: aurea.lat -
                              Цитата aurea.lat @
                              и сплошные No symbols loaded.
                              Это не имеет абсолютно ни какого отношения ни к OpenGL, ни к работоспособности программы.
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,1126 ]   [ 15 queries used ]   [ Generated: 18.05.24, 00:52 GMT ]