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)

HolyDel 20.08.2013 16:00

Ответ: OpenGL
 
у парня жеское 2д.
ему пока ненужны ни матрицы проекции ни что то другое.

Код:

gl_Position = vec4(vposition*mat2(cos(angle),-sin(angle),sin(angle),cos(angle)),0.0,1.0);
vposition у тебя в -1..1, или как? так то код правильный. для спрайта в координатах 0,0 конечно. возможно проблема где то еще. покажи скрин или лучше демку.

Цитата:

Ты пытаешься повернуть вершину уже в скрин-спейсе, и тут два варианта - либо ты в шейдере перед этим множишь на viewproj либо ещё до шейдера это делаешь (на CPU).
ему ничего не нужно проецировать. у него объекты итак в скринспейсе.

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

Nikich 20.08.2013 17:10

Ответ: OpenGL
 
А, и ещё вопрос. Рисовать линию как 2 треугольника нормально? Я знаю, что OGL поддерживает свой вывод линий, но тогда придется прибегнуть уже к другому DIP.

HolyDel 20.08.2013 17:19

Ответ: OpenGL
 
вывести линию может быть дороже чем два треугольника.

+ треугольниками гибче, линия может быть любой ширины, ее можно затекстурить, и т.д.

pozitiffcat 22.08.2013 17:51

Ответ: OpenGL
 
запилил за пол дня супер легковесный 2д движок на опенгл 2 контексте, без матриц (как тебе нужно), можно вращать, правда на цпу. Еще можно выводить отдельные части текстуры (атлас), еще батчи есть.

Репо
https://bitbucket.org/pozitiffcat/ste

Умеет только TGA со сжатием или без. Можно расширять своими классами для загрузки файлов и конвертирование изображений. Так сказать движок открыт для расширений.

Делал для себя (вчера понял что надо сделать), чтоб легко писать под ios, android. Собирается на mac и linux посредством cmake

есть скрипт сборки для линукса. Соберет статически либу и тестовое приложение.
В убунте нужно sudo apt-get install freeglut3-dev

Библиотека работает на контексте, тоесть можно собрать без GLUT и внедрять в любой контекст, Qt, Android, iOS, SDL и т.п.

пример кода:
Код:

#include "steGlutApp.h"
#include "steRender.h"
#include "steImage.h"
#include "steFileStream.h"
#include "steTGAImageLoader.h"
#include "steDrawImageData.h"
#include "steBatch.h"

class MyApp : public ste::GlutApp
{
public:
    virtual void onInit()
    {
        m_render = createRender();
        m_render->setScreenSize(240, 320);
        m_render->setClearColor(0.3f, 0.4f, 0.5f);

        m_imageLoader = new ste::TGAImageLoader();

        m_stream = new ste::FileStream("test_c.tga", ste::FileOpenReadMode);

        m_image = m_render->createImage(m_imageLoader, m_stream);
    }

    virtual void onFrame()
    {
        m_render->clear();

        static float r = 0;
        r += 0.01;

        ste::Batch batch;

        ste::DrawImageData data;
        data.frame = ste::rect(0.5 ,0.5, 0.5, 0.5);
        data.size = ste::vec2(100, 100);
        data.position.x = 50;
        data.position.y = 100;
        data.center.x = 0.5;
        data.center.y = 0.5;
        data.centerIsDrawPoint = true;
        data.rotation = r;
        batch.addImage(data);

        data.frame = ste::rect(0 ,0.5, 0.5, 0.5);
        data.position.x = 50;
        data.position.y = 200;
        data.center.x = 0.0;
        data.center.y = 0.0;
        data.rotation = 0;
        batch.addImage(data);

        m_render->drawImage(m_image, &batch);
    }

    virtual void onClose()
    {
        delete m_render;
        delete m_image;
        delete m_imageLoader;
        delete m_stream;
    }

private:
    ste::Render *m_render;
    ste::Image *m_image;
    ste::TGAImageLoader *m_imageLoader;
    ste::FileStream *m_stream;
};

int main()
{
    MyApp app;
    app.init(240, 320);
    app.start();
    return 0;
}


HolyDel 23.08.2013 01:09

Ответ: OpenGL
 
Слушай, друг, а ты для cmake сам собирал етот CMakeList.txt или какой-то тулзой его можно выгрузить со студии?

pozitiffcat 23.08.2013 10:18

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

Сообщение от HolyDel (Сообщение 265728)
Слушай, друг, а ты для cmake сам собирал етот CMakeList.txt или какой-то тулзой его можно выгрузить со студии?

всегда сам. там же легко.

HolyDel 23.08.2013 15:53

Ответ: OpenGL
 
у меня 1586 файла в сурсах (из них только 175 мои, остальные библиотеки). очень муторно вручную будет собирать((.

pozitiffcat 23.08.2013 22:26

Ответ: OpenGL
 
ты из cmake можешь вызывать сборку сторонних либ, их не обязательно переписывать на cmake.

Nikich 26.08.2013 02:02

Ответ: OpenGL
 
Вопрос по альфе. Если у нас два триса с альфой, рисуются они за один дип и касаются друг друга, почему не наблюдается прозрачность? Дело точно не в передаче шейдеру, вручную вбивал 0.5 на альфе, все равно трисы полностью непрозрачны.

Mr_F_ 26.08.2013 02:13

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

ну и да, надо блендинг отдельно в апи включать, а не только в шейдере писать альфу, режимов блендинга много разных.
не знаю где оно в ГЛ, юзаю ДХ =]

jimon 26.08.2013 02:13

Ответ: OpenGL
 
Блендинг включил ? =)

ABTOMAT 26.08.2013 03:56

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

Сообщение от Nikich (Сообщение 265916)
Вопрос по альфе. Если у нас два триса с альфой, рисуются они за один дип и касаются друг друга, почему не наблюдается прозрачность? Дело точно не в передаче шейдеру, вручную вбивал 0.5 на альфе, все равно трисы полностью непрозрачны.

Дептх тест отруби.
У меня это делается так:

gl.disable(gl.DEPTH_TEST);

В "большом" OGL наверное как-то похоже.

Вообще см. порядок рендера. Бленденные объекты надо рендерить после всех остальных. Вообще скриншоты бы неплохо, но в целом диагноз: без сортировки с альфой получишь дерьмецо.

pozitiffcat 27.08.2013 22:20

Ответ: OpenGL
 
http://www.opengl.org/sdk/docs/man/x...lDepthFunc.xml
тебе в помощь, меня когда-то выручало, когда партиклы рисовал

а вообще перед отрисовкой всякой херни, для которой временно нужно отключить глубину, но что бы она не перекрывала существующую юзай это
http://www.opengl.org/sdk/docs/man/x...lDepthMask.xml

Nikich 28.10.2013 00:46

Ответ: OpenGL
 
Есть ли годная библиотека/алгоритм для создания атласа из текстурок налету? Всё таки хочется сделать весь рендер в один DIP, однако рендер текста с FreeType явно требует множества DIP(умельцы на http://en.wikibooks.org/wiki/OpenGL_...t_Rendering_01 вообще предлагают каждый символ за отдельный DIP рисовать).

pozitiffcat 28.10.2013 09:19

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

Сообщение от Nikich (Сообщение 269402)
Есть ли годная библиотека/алгоритм для создания атласа из текстурок налету? Всё таки хочется сделать весь рендер в один DIP, однако рендер текста с FreeType явно требует множества DIP(умельцы на http://en.wikibooks.org/wiki/OpenGL_...t_Rendering_01 вообще предлагают каждый символ за отдельный DIP рисовать).

При создании текста строишь буффер с заданными текстурными координатами на каждую букву из bitmap шрифта, и рисуй за один дип. Я так целую страницу текста за 1 дип рисовал. Только тебе придется распарсить freetype2 на bitmap текстуру


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

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