Неподвижные glVertex
Например
glColor4f($FF, $FF, $AA, 1);
glVertex2f(1, 1);
glEnd;
Юзая GDI все просто
Но я использую двойную буферизацию а там GDI не рабодает(Win32SDK.hlp)
[COLOR=blue]
glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, yourwidth, 0, yourheight, -1, 1); glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
;Вот здесь строй чё хочешь
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glEnable(GL_DEPTH_TEST);
;Здесь снова 3D режим.
[/COLOR]
Ну так переходи в плоский режим и строй:
[COLOR=blue]
glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, yourwidth, 0, yourheight, -1, 1); glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
;Вот здесь строй чё хочешь
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glEnable(GL_DEPTH_TEST);
;Здесь снова 3D режим.
[/COLOR]
Сколько у тебя лишнего кода!!!!!
К примеру писать glDisable(GL_DEPTH_TEST) и glEnable(GL_DEPTH_TEST) - необязательно, потому что glVertex2f юзается.
в своих программах его использовать тот так и
меняет.
Сколько у тебя лишнего кода!!!!!
К примеру писать glDisable(GL_DEPTH_TEST) и glEnable(GL_DEPTH_TEST) - необязательно, потому что glVertex2f юзается
glVertex2f = glVertex3f(X, Y, 1)
Ну так переходи в плоский режим и строй:
[COLOR=blue]
glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, yourwidth, 0, yourheight, -1, 1); glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
;Вот здесь строй чё хочешь
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glEnable(GL_DEPTH_TEST);
;Здесь снова 3D режим.
[/COLOR]
Thx, только это медленный способ хотя лучшего я не нашел
Thx, только это медленный способ хотя лучшего я не нашел
Если тебе это поможет, - то создав поверх обьекта, на котором рисуешь с помощью OpenGL, другой, то на нем можна отображать статические рисунки. В дельфи, к примеру можно было создать поверху панельку с изображением. Только для хорошего эффекта компонент должен быть одного цвета с фоновым цветом в OpenGL/
Если тебе это поможет, - то создав поверх обьекта, на котором рисуешь с помощью OpenGL, другой, то на нем можна отображать статические рисунки. В дельфи, к примеру можно было создать поверху панельку с изображением. Только для хорошего эффекта компонент должен быть одного цвета с фоновым цветом в OpenGL
Это тот же самый GDI, а при двойной буферизации GDI глючит
Это тот же самый GDI, а при двойной буферизации GDI глючит
Если твое изображение, которое должно находиться на одном и том же месте - статично, то глюков быть не должно. В противном случае действительно глючит :(
Если твое изображение, которое должно находиться на одном и том же месте - статично, то глюков быть не должно. В противном случае действительно глючит
Почитай в Win32SDK.hlp ))
Почитай в Win32SDK.hlp ))
Я это проверял лично !!! :x
Я это проверял лично
Я тоже
Когда выводишь одновременно и VCL и GDI с двойной буферизацией , то выводится только VCL
Ты наверное не использовал двойную буферизацию
Я тоже
Когда выводишь одновременно и VCL и GDI с двойной буферизацией , то выводится только VCL
Ты наверное не использовал двойную буферизацию
Смотри здесь:
Зачем ты два раза вызываешь SetDCPixelFormat?
И у меня другая функция его задания:
begin
nSize := sizeof(pfd); // Size of this structure
nVersion := 1; // Version number
dwFlags := PFD_DRAW_TO_window or
PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER; // Flags
iPixelType:= PFD_TYPE_RGBA; // RGBA pixel values
cColorBits:= 32; // 24-bit color
cDepthBits:= 32; // 32-bit depth buffer
iLayerType:= PFD_MAIN_PLANE; // Layer type
end;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
DescribePixelFormat(DC, nPixelFormat, sizeof(TPixelFormatDescriptor), pfd)
Интересно....
Зачем ты два раза вызываешь SetDCPixelFormat?
И у меня другая функция его задания:
begin
nSize := sizeof(pfd); // Size of this structure
nVersion := 1; // Version number
dwFlags := PFD_DRAW_TO_window or
PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER; // Flags
iPixelType:= PFD_TYPE_RGBA; // RGBA pixel values
cColorBits:= 32; // 24-bit color
cDepthBits:= 32; // 32-bit depth buffer
iLayerType:= PFD_MAIN_PLANE; // Layer type
end;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
DescribePixelFormat(DC, nPixelFormat, sizeof(TPixelFormatDescriptor), pfd)
Не там написал и забыл удалить :)
А че такая зверская функция? Я как у Краснова все пишу. Никаких DescribePixelFormat и подобной чуши =)
Не там написал и забыл удалить :)
А че такая зверская функция? Я как у Краснова все пишу. Никаких DescribePixelFormat и подобной чуши
Я тоже OpenGL по Краснову учил
Эта функция из GLEx
Мда....
Я тоже OpenGL по Краснову учил
Эта функция из GLEx
Мда....
А я кроме стандартного OpenGL.pas(gl.h) ничего не юзаю. :)
А я кроме стандартного OpenGL.pas(gl.h) ничего не юзаю
Даже GLU? ))
Из GLEx я юзаю только загрузку текстур
Просто оттуда пример привел
Даже GLU? ))
Из GLEx я юзаю только загрузку текстур
Просто оттуда пример привел
GLU? бывает юзаю, но очень редко. В основном пытаюсь обойтись gl.
GLU? бывает юзаю, но очень редко. В основном пытаюсь обойтись gl
Зачем? Например как ты без Quadric нарисуешь чайник? ))
К тому же GLU32.dll эта стандартная библиотека как и OpenGL32.dll
Зачем? Например как ты без Quadric нарисуешь чайник? ))
К тому же GLU32.dll эта стандартная библиотека как и OpenGL32.dll
ЗЫ. А нафига мне чайники рисовать? Всегда вместо оного рисую кубик ;) Да и Quadric я тоже не юзаю, хотя если что-то и надо, лучше по-моему напрямую из библиотеки юзать.
ЗЫ. А нафига мне чайники рисовать? Всегда вместо оного рисую кубик ;) Да и Quadric я тоже не юзаю, хотя если что-то и надо, лучше по-моему напрямую из библиотеки юзать
Из DGLUt что-ли?
Из DGLUt что-ли?
Нет, при помощи
glBegin(GL_LINES)
glEnd();
или
glBegin(GL_QUADS);
glEnd();
;))
Нет, при помощи
glBegin(GL_LINES)
glEnd();
или
glBegin(GL_QUADS);
glEnd();
;))
Понял ))
Нет, при помощи
glBegin(GL_LINES)
glEnd();
или
glBegin(GL_QUADS);
glEnd();
;))
8)))))
уажысь лучшего способа нету))) только медленнно работать будет... ОПТИМИЗАЦИЮ тебе провести надо)))
8)))))
уажысь лучшего способа нету))) только медленнно работать будет... ОПТИМИЗАЦИЮ тебе провести надо)))
Че-то я не понял? Это что по твоему кубик из 12 треугольничков будет медленней работать чем чайник из нескольких тысяч? Это ж какую оптимизацию то проводить придется, что-то я не догоняю. Насколько я проверял - так быстрее всего:
glBegin(GL_TRIANGLES);
glEnd();
Но не намного! а как оптимизировать подобную конструкцию я че-то действительно не понимаю.
ЗЫ. glFlush(); glFinish(); - не в счет, так как это и не оптимизация вообще...
Че-то я не понял? Это что по твоему кубик из 12 треугольничков будет медленней работать чем чайник из нескольких тысяч? Это ж какую оптимизацию то проводить придется, что-то я не догоняю. Насколько я проверял - так быстрее всего:
glBegin(GL_TRIANGLES);
glEnd();
Но не намного! а как оптимизировать подобную конструкцию я че-то действительно не понимаю.
ЗЫ. glFlush(); glFinish(); - не в счет, так как это и не оптимизация вообще...
glFinish наоборот тормозит прогу пока OpenGL рисует а glFlush просто выводит на экран(для инфы :))
Только чайник рисуется на патчах и еще не извесно что быстрее....
Че-то я не понял? Это что по твоему кубик из 12 треугольничков будет медленней работать чем чайник из нескольких тысяч? Это ж какую оптимизацию то проводить придется, что-то я не догоняю. Насколько я проверял - так быстрее всего:
glBegin(GL_TRIANGLES);
glEnd();
Но не намного! а как оптимизировать подобную конструкцию я че-то действительно не понимаю.
ЗЫ. glFlush(); glFinish(); - не в счет, так как это и не оптимизация вообще...
[]
\/
Пиши объявления:
const
GL_VERTEX_ARRAY = S8074;
GL_COLOR_ARRAY = $8076;
…
procedure glVertexPointer (size: GLint; atype: GLenum;
stride: GLsizei; data: pointer); stdcall; external OpenGL32;
procedure glColorPointer (size: GLint; atype: GLenum; stride: GLsizei;
data: pointer); stdcall; external OpenGL32;
procedure glDrawArrays (mode: GLenum; first: GLint; count: GLsizei);
stdcall; external OpenGL32;
procedure glEnableClientState (aarray: GLenum); stdcall; external OpenGL32;
procedure glDisableClientState (aarray: GLenum); stdcall; external OpenGL32;
…
Теперь нам станут доступны расширенные возможности, и пожалуй самые удобные и быстродействующие.
glVertexPointer(2, GL_FLOAT, 0, @aVertex);
glColorPointer(3, GL_FLOAT, 0, @aColors);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_POLYGON, 0, 64);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
- эти 7 строк способны заменить тысячи , если прописывать glVertex2f или glVertex3f.
Так что этот способ может оказать реальную пользу :).
P.S. Я этим все равно не пользуюсь, у меня нихрена никогда не выводится, только 2Д и то по праздникам :))))
ЗЗЮ Посмотрел бы я на того, кто стал бы чайник по точкам рисовать :)))
glFinish наоборот тормозит прогу пока OpenGL рисует а glFlush просто выводит на экран(для инфы :))
Только чайник рисуется на патчах и еще не извесно что быстрее....
Че-то мне кажется, что glFlush() как раз ускоряет прогу, а glFinish() токо заставляет дождаться окончания перерисовки кадра. Но, я точно не помню, щас гляну!
[]
\/
Пиши объявления:
const
GL_VERTEX_ARRAY = S8074;
GL_COLOR_ARRAY = $8076;
…
procedure glVertexPointer (size: GLint; atype: GLenum;
stride: GLsizei; data: pointer); stdcall; external OpenGL32;
procedure glColorPointer (size: GLint; atype: GLenum; stride: GLsizei;
data: pointer); stdcall; external OpenGL32;
procedure glDrawArrays (mode: GLenum; first: GLint; count: GLsizei);
stdcall; external OpenGL32;
procedure glEnableClientState (aarray: GLenum); stdcall; external OpenGL32;
procedure glDisableClientState (aarray: GLenum); stdcall; external OpenGL32;
…
Теперь нам станут доступны расширенные возможности, и пожалуй самые удобные и быстродействующие.
glVertexPointer(2, GL_FLOAT, 0, @aVertex);
glColorPointer(3, GL_FLOAT, 0, @aColors);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_POLYGON, 0, 64);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
- эти 7 строк способны заменить тысячи , если прописывать glVertex2f или glVertex3f.
Так что этот способ может оказать реальную пользу :).
P.S. Я этим все равно не пользуюсь, у меня нихрена никогда не выводится, только 2Д и то по праздникам :))))
ЗЗЮ Посмотрел бы я на того, кто стал бы чайник по точкам рисовать :)))
Чайник по точках рисовать? :)
Зы Это конечно можно, если точки из файла грузить, который был сгенерирован каким-то 3D Studio.
ЗЗЫ. Может ты неправильно формат пиксела определяешь и поэтому у тебя нихрена не рисуется?? Помню у меня долго была такая проблема...
2Proger_XP
Кстати не факт что несколько тысяч квадриков рисуются быстрее 8 вершин... :))
Кстати не факт что несколько тысяч квадриков рисуются быстрее 8 вершин....
А как ты из 8 вершин сделаешь чайник? ))
Патчи это просто треугольники(16 или 25 - точно не помню) с общей вершиной
Их можно генерировать прогой sPatch которую я в Инете не нашел а линк в книге не рабочий вроде(а может я и не проверял :))
glFlush - очищяет буфер вывода(как в файлах) и выводит все что там было на экран, не дожидаясь пока OpenGL дорисует
glFinish ждет(типа sleep) пока все операции OpenGL закончатся
Обычно их используют в конце процедуры вывода
glFinish;
glFlush; // хотя этого по сути можно и не делать
А как ты из 8 вершин сделаешь чайник? ))
Патчи это просто треугольники(16 или 25 - точно не помню) с общей вершиной
Их можно генерировать прогой sPatch которую я в Инете не нашел а линк в книге не рабочий вроде(а может я и не проверял :))
glFlush - очищяет буфер вывода(как в файлах) и выводит все что там было на экран, не дожидаясь пока OpenGL дорисует
glFinish ждет(типа sleep) пока все операции OpenGL закончатся
Обычно их используют в конце процедуры вывода
glFinish;
glFlush; // хотя этого по сути можно и не делать
А кто тебе сказал что я чайник рисую. Мне хватает пирамиды и куба в подавляющем большинстве случае.
Относительно glFlush - вот строчки из документации, входящей в поставку Delphi:
"The glFlush function forces execution of GL commands in finite time."
Что само по себе доолжно дать небольшое уменьшение скорости рендеринга. glFinish - не дает испортить картинку, поєтому и применяются они так:
glFlush();
glFinish();
То-есть сначала принуждаем дорисовать быстрее, а потом дорисовуем до хорошей картинки.
А кто тебе сказал что я чайник рисую. Мне хватает пирамиды и куба в подавляющем большинстве случае.
Относительно glFlush - вот строчки из документации, входящей в поставку Delphi:
"The glFlush function forces execution of GL commands in finite time."
Что само по себе доолжно дать небольшое уменьшение скорости рендеринга. glFinish - не дает испортить картинку, поєтому и применяются они так:
glFlush();
glFinish();
То-есть сначала принуждаем дорисовать быстрее, а потом дорисовуем до хорошей картинки
Ясно, мой глюк ))
Все равно лучше юзать стандартные функции GLU т.к может там и есть оптимизация
Например, быстрее(физически) будет нарисовать линию одной функцией чем по пикселам в GDI
Ясно, мой глюк ))
Все равно лучше юзать стандартные функции GLU т.к может там и есть оптимизация
Например, быстрее(физически) будет нарисовать линию одной функцией чем по пикселам в GDI
НЕ знаю, не проверял(лень немного :) ), это надо экспериментально проверить, а я все над своим движком думаю.И чем больше думаю - тем больше проблем возниикает... :((
Вот, к примеру, вопрос, нужна ли в движке поддержка квадриков? Я думаю что нет, но не уверен. Может кто-нить подумает "свежим взглядом" и подскажет :)
ЗЫ АПИ - рулит: скорость, весит мало (начальный этап 16 Кб)!!!!!! правда эта скорость... так ничего и незаметить мона...
Формат пиксела я правильно определял, просто всякими штукаи типа glPerspective, glFrustrum, glOrtho и проч. не умею... и все у меня из-за этого выглядело 2Д, ходя рисовалось как 3Д, Зато я наконец!!!!!!!! 8)) вччера смог по нормальному задавать свет (источник света крутится вокруг куба)... правда из-за АПИ, 10 млс таймера - у меня куб просто моргал, а источник летал от одной точки в другую... пришлось раз в 10 увеличить интервал!!! вот теперь думаю, как мне написать перехватчик, как в ВЦЛ обработчик onReSize (чтобы туда запихнуть все что с экраном происходить будет).
ЗЫ АПИ - рулит: скорость, весит мало (начальный этап 16 Кб)!!!!!! правда эта скорость... так ничего и незаметить мона...
glPerspective, glOrth и т.д задают не формат пикселя, а положение наблюдателя в пространстве и т.д
Хочешь я тебе примеров из книги на OpenGL кину?
Там как-раз про свет, 3D и т.д есть
DartBobr
А я проверял ))
Экран с разрешением 1024x768 жидко-кристаллический SetPixel'ом закрашивается ~5 секунд а Rectangle'ом - ~1 секунду
Насчет пикселей есть модуль для Delphi с отличной скоростью закрашивающий форму с эффектом плазмы(по-пиксельно)
Пример(exe) в аттаче
Формат пиксела я правильно определял, просто всякими штукаи типа glPerspective, glFrustrum, glOrtho и проч. не умею... и все у меня из-за этого выглядело 2Д, ходя рисовалось как 3Д, Зато я наконец!!!!!!!! 8)) вччера смог по нормальному задавать свет (источник света крутится вокруг куба)... правда из-за АПИ, 10 млс таймера - у меня куб просто моргал, а источник летал от одной точки в другую... пришлось раз в 10 увеличить интервал!!! вот теперь думаю, как мне написать перехватчик, как в ВЦЛ обработчик onReSize (чтобы туда запихнуть все что с экраном происходить будет).
ЗЫ АПИ - рулит: скорость, весит мало (начальный этап 16 Кб)!!!!!! правда эта скорость... так ничего и незаметить мона...
Покажи!!! Я вот, к примеру, тоже долго не могу понять с glFrustum одну фигню. Просто воспринимаю как есть :(
2Proger_XP[\B]
Значит несколько полигонов будет быстрее несколькох тысяч квадриков, так? :)
Покажи!!! Я вот, к примеру, тоже долго не могу понять с glFrustum одну фигню. Просто воспринимаю как есть :(
2Proger_XP [\B]
Значит несколько полигонов будет быстрее несколькох тысяч квадриков, так?
Именно
Только это не просто "квадратики" ;)
А че за фигню ты не понимаешь?
З.Ы: советую скачать тот пример из моего поста выше, хотя бы из красоты
Именно
Только это не просто "квадратики" ;)
А че за фигню ты не понимаешь?
З.Ы: советую скачать тот пример из моего поста выше, хотя бы из красоты
Да вот непойму - последние два параметра - расстояния до ближней и дальней плоскости отсечения. Если мы хотим находиться внутри "выделенного" пространства, то нам надо вперед двигаться, а во всех примерах мы почему-то делаем Translatef() с отрицательным третьим параметром... :???:
Да вот непойму - последние два параметра - расстояния до ближней и дальней плоскости отсечения. Если мы хотим находиться внутри "выделенного" пространства, то нам надо вперед двигаться, а во всех примерах мы почему-то делаем Translatef() с отрицательным третьим параметром... :???:
Уя!!! я понял почему эта продса не работала!!!!!!
там где она стояла не было wglMakeCurrent(DC,hrc); как только написал появилось, правда были потом другие трудности... но ето ладно... это все АПИ.
Вот прога, точнее исходник: вес <10 Кб, как скомпилируешь .exe в 45 Кб будет.
Ошибка по всем адресам, помогло только аварийное завершение.
8( а так посмотреть хотел(((