forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   OpenGL (http://forum.boolean.name/showthread.php?t=356)

Samodelkin 18.06.2014 13:47

Ответ: OpenGL
 
glViewport точно также - работает для выводимых примитивов, но glClear всё равно закрашивает весь экран.
----
Вот еще вопрос: контекст можно создать например через freeglut или через wgl функции winapi.
В последних больше всяких настроек, но вообще нужно ли такое количество для среднестатистического opengl движка?
И соответственно в Linux чего лучше использовать?

RegIon 03.10.2016 18:18

Ответ: OpenGL
 

Как включить АА (антиалиазинг) ??
Рисую квадами, так как нужно задавать толщину линии, а glLineWidth не работает.

PHP код:

glEnable(GL_POLYGON_SMOOTH);
    
glEnable(GL_LINE_SMOOTH);
    
glEnable(GL_BLEND);
    
glBlendFunc(GL_SRC_ALPHAGL_ONE_MINUS_SRC_ALPHA);
    
glLineWidth(0.5f); 

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

И пинайте меня, но я рисую без VBO, так как не хотел запариваться . Само рисование:
PHP код:

void GLRender() {
    if (
_hDC) {

        
glClearColor(bgColor[0] / 256.0fbgColor[1] / 256.0fbgColor[2] / 256.0f0.0f);
        
glClear(GL_COLOR_BUFFER_BIT);
    
        
glLoadIdentity();
        
glOrtho(0_w0_h, -11);
        
        
glPushMatrix();
        
        
DrawLines();
    
        
glPopMatrix();

        
SwapBuffers(_hDC);
    }
}

void DrawCustomLine(GLLine line) {

    
glColor3ub(line.color[0], line.color[1], line.color[2]);

    
float nx line.x2 line.x1;
    
float ny line.y2 line.y1;
    
float len sqrtf(nx*nx ny*ny);
    
nx /= len *2;
    
ny /= len *2;

    
//0__1
    //I  I
    //3__2
    
glVertex2f(line.x1 floor(line.thinkness ny), line.y1 ceil(line.thinkness nx));
    
glVertex2f(line.x1 ceil(line.thinkness ny), line.y1 floor(line.thinkness nx));
    
    
glVertex2f(line.x2 ceil(line.thinkness ny), line.y2 floor(line.thinkness nx));
    
glVertex2f(line.x2 floor(line.thinkness ny), line.y2 ceil(line.thinkness nx));

}

void DrawLines() {

    
glBegin(GL_QUADS);

    for (
size_t i 0lineBuffer.size(); i++) {

        
DrawCustomLine(lineBuffer[i]); 
    }

    
glEnd();


А если через VBO, то подскажите как отрисовать кучу Квадов разного цвета передав один массив.

Mhyhr 03.10.2016 19:41

Ответ: OpenGL
 
Если не по доисторическому, то так или иначе надо хоть простейший шейдер таки написать, и передавать в него координаты и цвет. Это не сложно погугли simple opengl shader example и довавь свой uniform.

К слову glLineWidth - устаревшая функция.

Nerd 03.10.2016 20:14

Ответ: OpenGL
 
pfffff
Код:

    glColor4ub(line.color[0], line.color[1], line.color[2],64);

    float d = 0.4;
    for(int i=0;i<4;i++){
      float dx = sin(i*1.6)*d;
      float dy = cos(i*1.6)*d;
        glVertex2f(dx+line.x1 - floor(line.thinkness * ny), dy+line.y1 + ceil(line.thinkness * nx));
          glVertex2f(dx+line.x1 + ceil(line.thinkness * ny), dy+line.y1 - floor(line.thinkness * nx));
        glVertex2f(dx+line.x2 + ceil(line.thinkness * ny), dy+line.y2 - floor(line.thinkness * nx));
          glVertex2f(dx+line.x2 - floor(line.thinkness * ny), dy+line.y2 + ceil(line.thinkness * nx));
    }


thickness

RegIon 04.10.2016 00:48

Ответ: OpenGL
 
Это понятно, как мне линию сгладить?
Anti-Alias е включается.

Knightmare 04.10.2016 11:03

Ответ: OpenGL
 
Цитата:

Сообщение от RegIon (Сообщение 308944)
Это понятно, как мне линию сгладить?
Anti-Alias е включается.

Ну таки что-то неправильно делаешь раз не включается. Еще можно текстуру натянуть на квады, но не уверен что получится на тонких линиях.
Что касается VBO - надо юзать glBufferData, glEnableVertexAttribArray и glVertexAttribPointer (но я не уверен что в последних версиях ОГЛ это труъ путь, хотя в любом случае лучше чем сейчас у тебя). А там хоть каждый вертекс рисуй разным цветом.

RegIon 04.10.2016 15:07

Ответ: OpenGL
 
PHP код:

void GLSetFontBitmap(const BYTEbitmapint widthint heightint pixel_size) {
    
glGenTextures(1, &fontTexture);
    
height 2;
    
width 2;
    
BYTE *data = new BYTE[3]{
        
255,0,00,255,0,
        
255,0,00,0,255
    
};

    
glBindTexture(GL_TEXTURE_2DfontTexture);
    
glTexImage2D(GL_TEXTURE_2D0GL_RGBheightwidth0GL_RGBGL_UNSIGNED_BYTEdata);
    
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_NEAREST);
    
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MIN_FILTERGL_NEAREST);

    
glActiveTexture(GL_TEXTURE0);


Почему вылетает MAV при вызове glActiveTexture()??



Студия 15, GL из под коробки, glew с NuGet

UPD. Собрал отдельный проект чисто на С++, все равно вышибает на том же месте.
Проект:
https://1drv.ms/u/s!AsK_zL9knxgkhiSs321g6ajyy_Ec


Часовой пояс GMT +4, время: 04:57.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot