Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.205.5] |
|
Сообщ.
#1
,
|
|
|
Спасибки огромное за статью )) Мне наконец-то начинает становиться понятно, что и к чему.
Но можно спросить у знающих Direct X гуру? Я потихоньку осваиваю Direct X , мне он нужен для программки в VS 2005 (VS 2008) по визуализации результатов функций в 3D (множество точек образующих облако, по идее должно выглядеть красиво). Так вот в чем мой вопрос - это реально сделать с помощью Direct X или все таки лучше Open GL? И если да ,то в каком направлении мне более усиленно работать? Эта тема была разделена из темы "Статьи по DirectX" |
Сообщ.
#2
,
|
|
|
Цитата aurea.lat @ Да, конечно.Так вот в чем мой вопрос - это реально сделать с помощью Direct X Цитата aurea.lat @ Пиши на том что знаешь. Если есть хоть какой-то опыт в DirectX, то пиши на нем. Задачка простая, и с нуля реализуется примерно за одинаковое время и там и там.в каком направлении мне более усиленно работать? Цитата aurea.lat @ Если задача состоит только в выводе массива точек, то я бы выбрал OpenGL. Просто там это можно чуть проще сделать даже не думая о billboars.или все таки лучше Open GL? struct Particle // частица { unsigned char r, g, b, a; // цвет float x, y, z; // координаты }; Particle particles[N]; // массив всех частиц 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" |
Сообщ.
#3
,
|
|
|
Цитата albom @ glEnable(GL_POINT_SMOOTH); // круглые частицы glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); При использовании GL_POINT_SMOOTH большинство реализаций GL будут выпадать в софтвар, так что если нужны сглаженные точки лучше уж использовать billboards с альфа блендингом (через GL_POINT_SPRITE). |
Сообщ.
#4
,
|
|
|
OMG, что у тебя за древние реализации??
Ёще RIVA 128 одинадцать лет назад умела рисовать это аппаратно. |
Сообщ.
#5
,
|
|
|
Цитата albom @ OMG, что у тебя за древние реализации?? Ёще RIVA 128 одинадцать лет назад умела рисовать это аппаратно. Насчет большинства я конечно погорячился, то вот в некоторых новых (и не очень) ATI-шных дровах это наблюдается - они видимо просто не утруждают себя реализовывать нормально эту "устаревшую" функциональность, как и антиалиасинг полигонов и т.д. |
Сообщ.
#6
,
|
|
|
albom Я только начала осваивать DirectX и дальше примитивов (линий и треугольничков) пока не забралась именно поэтому я была не уверена реально это или нет. Но вопрос тут не только в простом отображении массива но и в динамической демонстрации (рассматривается изменение картинки на множестве итераций, функция должна порождать что-то вроде хаоса точек и количество их будет достаточно существенным (мне говорили что не менее 1000 итераций работы функции если не больше))
|
Сообщ.
#7
,
|
|
|
Цитата aurea.lat @ В смысле анимация? и в динамической демонстрации Цитата aurea.lat @ Одна итерация - одно множество точек, другая итераци - дргое множество? Т.е., опять же, грубо говоря, каждая итерация описывает одну сцену в какой-то момент времени? рассматривается изменение картинки на множестве итераций, функция должна порождать что-то вроде хаоса точек и количество их будет достаточно существенным (мне говорили что не менее 1000 итераций работы функции если не больше) Но, в любом случае, не вижу каких-либо проблем сейчас с отрисовкой, но тебе, конечно, должно быть виднее, что ты там собираешься рисовать Добавлено Цитата mitrich @ Вот с этим точно были проблемы почти у всех , как и антиалиасинг полигонов Цитата mitrich @ В принципе уже можно писать без кавычек, так как в новом (ещё не вышедшем) стандарте OpenGL уже не будет этой функциональности, и POINT_SPRITE будет включен постоянно. Но сейчас это позволяет сократить код, так почему бы не воспользоваться? Тем более, что переделать на POINT_SPRITE совсем не долго. реализовывать нормально эту "устаревшую" функциональность |
Сообщ.
#8
,
|
|
|
Да скорее всего анимацию У меня преподаватель пока не определился что от меня хочет.
Большое спасибо за советыAlbom Я пока что осваиваюсь со всем этим Но уже кое что получается. |
Сообщ.
#9
,
|
|
|
Пробовала пример с рисованием вершин в MFC
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(); Ничего не прорисовывается. Как это исправить? В OUTPUT пишет '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). |
Сообщ.
#10
,
|
|
|
Цитата aurea.lat @ Покажи больше кода (инициализация, настройка). В том, что ты сейчас написал ошибок нет. Ничего не прорисовывается. Как это исправить? |
Сообщ.
#11
,
|
|
|
Если вместо точек делаю прорисовку линий то отображение идет, не получается только с вершинами
// 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); } |
Сообщ.
#12
,
|
|
|
Цитата aurea.lat @ Если вместо точек делаю прорисовку линий то отображение идет, не получается только с вершинами Вообще, странно. А если добавить настройку матриц? glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-2, 2, -2, 2, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); |
Сообщ.
#13
,
|
|
|
Все так же
Самое интересное что на ноуте у друга прорисовывается а у меня все идет без ошибок, но при запуске ничего не рисует. и сплошные No symbols loaded. |
Сообщ.
#14
,
|
|
|
Цитата aurea.lat @ Это не имеет абсолютно ни какого отношения ни к OpenGL, ни к работоспособности программы. и сплошные No symbols loaded. |