Войти
ПрограммированиеФорумГрафика

как в OpenGL рисовать поверх всего , что есть на сцене ?

Страницы: 1 2 Следующая »
#0
7:34, 19 авг. 2018

Как мне без всяких текстур , и.т.д . в OpenGL нарисовать хотя бы линии , по верх всех объектов на сцене ?
Короче у меня есть GizmoManipulator( Move , Scale , Roatate ) , и его компоненты должны рисоваться поверх всего что есть на сцене .
каким самым простым способом в OpenGL это можно сделать ? может glDepthBuffer!


#1
(Правка: 7:44) 7:44, 19 авг. 2018

GL_LINES, можно протащить Deprecated функционал "только для редактора".
Либо glDrawPixels, либо FBO. Зависит от версии OpenGL. Нужна максимальная совместимость со старыми железками(и серьезный удар по филлрейту) - glDrawPixels.
Есть другой вариант, таким способом WGL рисует шрифты.
Создается 2D текстура n размера, на ней уже рисуется всё что надо, затем рисуется как обычный прямоугольник с текстурой.
Тоже не особо быстро, но в случае шрифтов это закэшировать можно.

#2
8:22, 19 авг. 2018

monobogdan
> GL_LINES, можно протащить Deprecated функционал "только для редактора".
> Либо glDrawPixels, либо FBO. Зависит от версии OpenGL. Нужна максимальная
> совместимость со старыми железками(и серьезный удар по филлрейту) -
> glDrawPixels.
> Есть другой вариант, таким способом WGL рисует шрифты.
> Создается 2D текстура n размера, на ней уже рисуется всё что надо, затем
> рисуется как обычный прямоугольник с текстурой.
> Тоже не особо быстро, но в случае шрифтов это закэшировать можно.
ну это все понятно , только мне нужен максимально простой способ на чистом OpenGL (gl.h.glu.h) ?

#3
8:29, 19 авг. 2018

werasaimon

Отключаешь тест глубины и рисуешь элементы. Порядок - в зависимости от ракурса.

#4
12:20, 19 авг. 2018

monobogdan
> GL_LINES, можно протащить Deprecated функционал "только для редактора".

пошто линии обидели?

#5
(Правка: 12:47) 12:46, 19 авг. 2018

Как вариант:

+ Показать

А в битмапе рисуешь что хочешь. Но тут уже поверх OpenGL и другими средствами.

#6
14:51, 19 авг. 2018

Очищаешь буфер глубины перед рендером.

#7
(Правка: 15:36) 15:35, 19 авг. 2018

В самом конце рендера отключаешь буфер глубины и рисуешь. Либо можно не отключать буфер глубины, а сделать glDepthFunc(GL_ALWAYS).

maks242
> Очищаешь буфер глубины перед рендером.
А не слишком ли накладно выйдет?

#8
16:22, 19 авг. 2018

Vlad2001_MFS
> А не слишком ли накладно выйдет?
Ну если он захочет рисовать не просто линии, а какой-то куб, который обычно в гизмо является началом, то без теста глубины тут никак

#9
19:38, 19 авг. 2018

maks242
Не спорю. Тут скорее всего имелось ввиду 2D поверх остальной сцены(ошибаюсь?), а для этого чистить буфер глубины слишком жирно.

#10
(Правка: 19:48) 19:39, 20 авг. 2018

maks242
> Тут скорее всего имелось ввиду 2D поверх остальной сцены(ошибаюсь?
Именно так !


Ghost2
> Отключаешь тест глубины и рисуешь элементы. Порядок - в зависимости от ракурса.
Буфер глубины не чего не дал , только чёрный екран  !
Поэтому сделал чисто геометричкую проекцию в 2Д , так заработало.  Может кто придумает ещё более простой способ?

void paintGL()
{

    glViewport(0, 0, w, h );

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    camera.LookAt( mEye , mCenter , mUp  );

   
    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(camera.getProjectionMatrix());
    glLoadIdentity();

    glMatrixMode(GL_MODELVIEW);
    glLoadMatrixf(camera.getTransformMatrix());


    // тут рисуем в 3Д

    //....................//
    //... this code ......//
    //....................//


    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-1, 1, -1, 1);
    glMatrixMode(GL_MODELVIEW);

     // тут рисуем в 2Д 

     glPushMatrix();
     glMultMatrix( camera.getProjectionMatrix());
     glMultMatrix( camera.getViewMatrix());
     GizmoManipulator.Draw();
     glPopMatrix();
}

#11
20:29, 20 авг. 2018

The OpenGL R Graphics System: A Specification (Version 4.6 (Compatibility Profile) - May 14, 2018)

E.2.2 Removed Features

Edge flags and fixed-function vertex processing - ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TexCoordPointer, VertexPointer, EnableClientState, DisableClientState, and InterleavedArrays, ClientActiveTexture (section 10.3); Frustum, LoadIdentity, LoadMatrix, LoadTransposeMatrix, MatrixMode, MultMatrix, MultTransposeMatrix, Ortho, PopMatrix, PushMatrix, Rotate, Scale, and Translate (section 12.1.1; Enable/Disable targets RESCALE_NORMAL and NORMALIZE (section 12.1.2); TexGen* and Enable/Disable targets TEXTURE_GEN_* (section 12.1.3, Material*, Light*, LightModel*, and ColorMaterial, ShadeModel, and Enable/Disable targets LIGHTING, VERTEX_PROGRAM_TWO_SIDE, LIGHTi, and COLOR_MATERIAL (sections 12.2.2 and 12.2.3; ClipPlane; and all associated fixed-function vertex array, multitexture, matrix and matrix stack, normal and texture coordinate, lighting, and clipping state. A vertex shader must be defined in order to draw primitives.

Language referring to edge flags in the current specification is modified as though all edge flags are TRUE.

Note that the FrontFace and ClampColor commands in section 12.2 are not deprecated, as they still affect other non-deprecated functionality; however, the ClampColor targets CLAMP_VERTEX_COLOR and CLAMP_FRAGMENT_COLOR are deprecated.

#12
20:30, 20 авг. 2018

Да, кстати, у тебя же была своя математическая библиотека со своими матрицами. Почему ты ей не пользуешься?

#13
20:43, 20 авг. 2018

werasaimon
> void paintGL()
Я это посмотрел и мне стало физически больно.

Ты что нибудь слышал про отключение теста глубины?

#14
21:14, 20 авг. 2018

werasaimon

> Буфер глубины не чего не дал , только чёрный екран !
Изображение

maks242

> какой-то куб, который обычно в гизмо является началом, то без теста глубины тут никак
Элементарно - рисуешь только те грани, которые видны.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика