Четверг, 28 Марта 2024, 20:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Не рисует треугольник в opengl
Не рисует треугольник в opengl
afqДата: Понедельник, 30 Октября 2017, 20:39 | Сообщение # 1
Разработчик
Сейчас нет на сайте
код на github https://github.com/xverizex/Sixie/blob/master/main.c
Выпишу сюда две функции
Код

void draw_triangles ()
{
    glBegin ( GL_TRIANGLES );
    glVertex2f ( 0.0f, 0.0f );
    glVertex2f ( 25.0f, 25.0f );
    glVertex2f ( 50.0f, 0.0f );

    glVertex2f ( -50.0f, 0.0f );
    glVertex2f ( -75.0f, 50.0f );
    glVertex2f ( -25.0f, 0.0f );
    glEnd ();
    glFlush ();
}

gboolean render ( GtkGLArea *area, GdkGLContext *context, gpointer user_data )
{
    glClearColor ( 0.44, 0.44, 0.44, 1.0 );
    glColor3f ( 1.0f, 1.0f, 1.0f );
    glClear ( GL_COLOR_BUFFER_BIT );

    draw_triangles ();

    return TRUE;
}


В документации сказано что после выставлении цвета, можно нарисовать объект.
VuvkДата: Вторник, 31 Октября 2017, 07:03 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Попробуй нарисовать в рамках логических координат: -1...1
Установлены ли параметры проекционной, модельной матриц?

---
Посмотрел код, там такого и в помине нет.
Попробуй такое:

Код

void draw_triangles ()
{
  glBegin(GL_TRIANGLES);
    glColor3f(1, 0, 0);
    glVertex3f(-1, -1, -1);

    glColor3f(0, 1, 0);
    glVertex3f(1, -1, -1);

    glColor3f(0, 0, 1);
    glVertex3f(0, 1, -1);
  glEnd();
  glFlush ();
}

gboolean render ( GtkGLArea *area, GdkGLContext *context, gpointer user_data )
{
    glViewport(0, 0, WIDTH, HEIGHT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45, (double)WIDTH / HEIGHT, 0.1, 1000);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();    

    glClearColor ( 0.44, 0.44, 0.44, 1.0 );
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    draw_triangles ();

    return TRUE;
}


Я в гтк не шарю, но после draw_triangles должен быть ещё SwapBuffers или что-нибудь такое


Сообщение отредактировал Vuvk - Вторник, 31 Октября 2017, 07:12
afqДата: Вторник, 31 Октября 2017, 16:03 | Сообщение # 3
Разработчик
Сейчас нет на сайте
Vuvk, невыходит.
OrdanДата: Среда, 01 Ноября 2017, 04:31 | Сообщение # 4
Главный зомби
Сейчас нет на сайте
afq, вы наверное glTranslatef потеряли где то

Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
VuvkДата: Среда, 01 Ноября 2017, 06:27 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Не поленился и накидал отрисовку треугольника. Правда на Си и SDL2. Но везде одно и то же...
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#include "GL/gl.h"
#include "GL/glu.h"
#include "SDL2/SDL.h"

#define WIDTH   1024
#define HEIGHT  768

bool quit = false;
SDL_Window* sdlWindow = NULL;
SDL_Event   sdlEvent;
SDL_GLContext sdlGlContext;

void draw_triangles ()
{
  glBegin(GL_TRIANGLES);
    glColor3f(1, 0, 0);
    glVertex3f(-1, -1, -3);

    glColor3f(0, 1, 0);
    glVertex3f(1, -1, -3);

    glColor3f(0, 0, 1);
    glVertex3f(0, 1, -3);
  glEnd();
  glFlush ();
}

void render ()
{
    glViewport(0, 0, WIDTH, HEIGHT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45, (double)WIDTH / HEIGHT, 0.1, 1000);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glClearColor ( 0.44, 0.44, 0.44, 1.0 );
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    draw_triangles ();

    SDL_GL_SwapWindow(sdlWindow);
}

#undef main
int main(int args, char* argv[])
{
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("Couldn't init SDL2! Error: %s\n", SDL_GetError());
        return 1;
    }

    sdlWindow = SDL_CreateWindow("Example",
                    SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                    WIDTH, HEIGHT,
                    SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);

    if (sdlWindow == NULL)
    {
        printf("Couldn't init SDL2-window! Error: %s\n", SDL_GetError());
        return 2;
    }

    sdlGlContext = SDL_GL_CreateContext(sdlWindow);

    while (!quit)
    {
        render ();

        while(SDL_PollEvent(&sdlEvent) == 1)
        {
            if (sdlEvent.type == SDL_KEYDOWN)
            {
                switch (sdlEvent.key.keysym.sym)
                {
                    case SDLK_ESCAPE :
                        quit = true;
                        break;

                    default:
                        break;
                }
            }

            if (sdlEvent.type == SDL_QUIT)
            {
                quit = true;
            }
        }

        SDL_Delay(1);
    }

    SDL_Quit();

    return 0;
}




Сообщение отредактировал Vuvk - Среда, 01 Ноября 2017, 06:29
afqДата: Вторник, 07 Ноября 2017, 03:40 | Сообщение # 6
Разработчик
Сейчас нет на сайте
Vuvk, Ordan, пришлось qt учить. Посмотрю как там.

Добавлено (03 ноября 2017, 21:21)
---------------------------------------------
Vuvk, Ordan, получилось с помощью qt. Только там glVertex2f надо было задавать ( 100, 200 ); а не ( 1, 0 ); При малых значениях вообще не видно.
Вот снимок.

Добавлено (07 ноября 2017, 03:40)
---------------------------------------------
Ordan, Vuvk, какие координаты нужно задать для gluLookAt, чтобы видно было glVertex3f ( 0.0, 0.0, 0.0 ); ?

VuvkДата: Вторник, 07 Ноября 2017, 13:56 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
afq, ну например
0, 0, 10,
0, 0, 0,
0, 1, 0
afqДата: Пятница, 10 Ноября 2017, 05:36 | Сообщение # 8
Разработчик
Сейчас нет на сайте
Vuvk, о спасибо.

Добавлено (10 ноября 2017, 05:36)
---------------------------------------------
Vuvk, Ordan, обратите внимание на https://gcup.ru/forum/62-99402-1

Форум игроделов » Программирование » C/C++ » Не рисует треугольник в opengl
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг