использование ключа ключа certin opengl [duplicate]

Прочитайте документ:

В общем случае вместо $ HTTP_RAW_POST_DATA следует использовать вход php: //.

blockquote>

, как в php Manual

183
задан 26 September 2008 в 04:39
поделиться

8 ответов

Самый простой способ - нарисовать примитивы как GL_LINE_STRIP.

glBegin(GL_LINE_STRIP);
/* Draw vertices here */
glEnd();
5
ответ дан FedeWar 21 August 2018 в 10:45
поделиться
  • 1
    нет, если это куча GL_TRIANGLES: вы получите линии между ними. В OpenGL 1.x или устаревшем вы используете glPolygonMode. В недавнем OpenGL вы играете с геометрическим шейдером. – Fabrice NEYRET 6 October 2015 в 20:32

Из http://cone3d.gamedev.net/cgi-bin/index.pl?page=tutorials/ogladv/tut5

// Turn on wireframe mode
glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);

// Draw the box
DrawBox();

// Turn off wireframe mode
glPolygonMode(GL_FRONT, GL_FILL);
glPolygonMode(GL_BACK, GL_FILL);
24
ответ дан John Millikin 21 August 2018 в 10:45
поделиться
  • 1
    выполнение двух вызовов является избыточным. используйте GL_FRONT_AND_BACK – shoosh 30 September 2008 в 10:01
  • 2
    В качестве дополнения к комментарию @ shoosh в Красной книге указано, что GL_FRONT и GL_BACK устарели и удалены из OpenGL 3.1 и выше. Теперь вы все равно можете использовать их через расширение совместимости, но если у вас есть выбор между совместимостью вперед и обратно, я бы рекомендовал для первого. – fouric 26 March 2013 в 06:28

В Modern OpenGL (OpenGL 3.2 и выше) вы можете использовать Geometry Shader для этого:

#version 330

layout (triangles) in;
layout (line_strip /*for lines, use "points" for points*/, max_vertices=3) out;

in vec2 texcoords_pass[]; //Texcoords from Vertex Shader
in vec3 normals_pass[]; //Normals from Vertex Shader

out vec3 normals; //Normals for Fragment Shader
out vec2 texcoords; //Texcoords for Fragment Shader

void main(void)
{
    int i;
    for (i = 0; i < gl_in.length(); i++)
    {
        texcoords=texcoords_pass[i]; //Pass through
        normals=normals_pass[i]; //Pass through
        gl_Position = gl_in[i].gl_Position; //Pass through
        EmitVertex();
    }
    EndPrimitive();
}

Замечания:

1
ответ дан LMD 21 August 2018 в 10:45
поделиться

Предполагая, что в OpenGL 3 и выше есть перекрестно-совместимый контекст, вы можете использовать glPolygonMode, как упоминалось ранее, но обратите внимание, что строки с толщиной более 1px теперь устарели. Поэтому, пока вы можете рисовать треугольники как проволочные рамки, они должны быть очень тонкими. В OpenGL ES вы можете использовать GL_LINES с тем же ограничением.

В OpenGL можно использовать геометрические шейдеры, чтобы принимать входящие треугольники, дизассемблировать их и отправлять их для растеризации как квадранты (пары треугольников действительно ), эмулируя толстые линии. Довольно просто, правда, за исключением того, что геометрические шейдеры печально известны плохим масштабированием производительности.

Что вы можете сделать вместо этого, и что также будет работать в OpenGL ES, это использовать шейдер фрагмент . Подумайте о применении текстуры треугольника с проволочной рамкой к треугольнику. За исключением того, что текстуры не нужны, ее можно создать процедурно. Но достаточно поговорим, давайте сделаем код. Фрагментный шейдер:

in vec3 v_barycentric; // barycentric coordinate inside the triangle
uniform float f_thickness; // thickness of the rendered lines

void main()
{
    float f_closest_edge = min(v_barycentric.x,
        min(v_barycentric.y, v_barycentric.z)); // see to which edge this pixel is the closest
    float f_width = fwidth(f_closest_edge); // calculate derivative (divide f_thickness by this to have the line width constant in screen-space)
    float f_alpha = smoothstep(f_thickness, f_thickness + f_width, f_closest_edge); // calculate alpha
    gl_FragColor = vec4(vec3(.0), f_alpha);
}

И вершинный шейдер:

in vec4 v_pos; // position of the vertices
in vec3 v_bc; // barycentric coordinate inside the triangle

out vec3 v_barycentric; // barycentric coordinate inside the triangle

uniform mat4 t_mvp; // modeview-projection matrix

void main()
{
    gl_Position = t_mvp * v_pos;
    v_barycentric = v_bc; // just pass it on
}

Здесь барицентрические координаты - это просто (1, 0, 0), (0, 1, 0) и (0, 0, 1) для трех треугольных вершин (порядок не имеет значения, что делает упаковку на треугольные полосы потенциально проще).

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

17
ответ дан the swine 21 August 2018 в 10:45
поделиться
  • 1
    Я думал, что это выглядит многообещающим, однако это, похоже, не работает в любом качестве с OpenGL 3.2 (не-ES). Хотя возможно, я что-то испортил, я немного поиграл с этим и не совсем уверен, как это даже предназначено для использования. Дополнительная информация о том, что вы намереваетесь делать с помощью этих шейдеров, будет полезна; Я не вижу, как ничего, кроме заливки, создавало бы что-нибудь полезное, но это даже не работает, учитывая, что альфа-значение gl_FragColor, похоже, полностью игнорируется в OpenGL 3.2 ... – user1167662 1 January 2016 в 04:43
  • 2
    Конечно. Вы можете ссылаться на чью-то реализацию той же идеи в stackoverflow.com/questions/7361582/… . – the swine 3 January 2016 в 22:38
  • 3
    Ну, конечно. Вот и весь смысл этого ответа. – the swine 4 January 2016 в 16:05
  • 4
    @BrunoLevy, вы можете получить дополнительную координацию в webGL, нет? Если вам повезет, вы можете получить эти координаты из texcoords, если у вас очень простые модели, но в остальном вам просто нужно добавить новые координаты. Было бы очень хорошо, если бы это сработало без него :). Все, что вам нужно, это передать один скаляр на вершину (а затем развернуть его до 3-вектора в вершинном шейдере). – the swine 4 May 2016 в 19:25
  • 5
    Ах, теперь я вижу ... f_width () - мой друг, в этом отношении. благодаря – Neil Gatenby 25 January 2018 в 12:24
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );

для включения,

glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );

, чтобы вернуться в нормальное состояние.

Обратите внимание, что такие вещи, как текстурирование и освещение, будут по-прежнему применяться к линиям каркаса если они включены, что может показаться странным.

315
ответ дан user 21 August 2018 в 10:45
поделиться

Вы можете использовать библиотеки пересылок, например:

  1. для сферы:
    glutWireSphere(radius,20,20);
    
  2. для цилиндра:
    GLUquadric *quadratic = gluNewQuadric();
    gluQuadricDrawStyle(quadratic,GLU_LINE);
    gluCylinder(quadratic,1,1,1,12,1);
    
  3. для куб:
    glutWireCube(1.5);
    
1
ответ дан Vallentin 21 August 2018 в 10:45
поделиться

Если это OpenGL ES 2.0, с которым вы имеете дело, вы можете выбрать одну из констант режима рисования из

GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, для рисования линий,

GL_POINTS (если вы нужно нарисовать только вершины) или

GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN и GL_TRIANGLES для рисования заполненных треугольников

в качестве первого аргумента для вашего

glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices)

или

glDrawArrays(GLenum mode, GLint first, GLsizei count).

0
ответ дан Victor 21 August 2018 в 10:45
поделиться

Если вы используете фиксированный конвейер (OpenGL & lt; 3.3) или профиль совместимости, который вы можете использовать

//Turn on wireframe mode
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

//Draw the scene with polygons as lines (wireframe)
renderScene();

//Turn off wireframe mode
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

В этом случае вы можете изменить ширину линии, вызвав glLineWidth

В противном случае вам нужно изменить режим многоугольника внутри метода рисования (glDrawElements, glDrawArrays и т. д.), и вы можете получить некоторые приблизительные результаты, потому что ваши данные вершин для треугольников и вы выводите строки. Для получения наилучших результатов рассмотрите использование Geometry shader или создайте новые данные для каркаса.

3
ответ дан Zaphyk 21 August 2018 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: