|
20.08.2013, 16:00
|
#106
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: 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).
|
ему ничего не нужно проецировать. у него объекты итак в скринспейсе.
кстати, в новой супербиблии, как раз все начинается тупо с вывода точки. даже не треугольника. зато сразу понятно где ноль)) без матриц, без всего. этим книга и хороша. для новичка там очень правильная последовательность обучения на мой взгляд.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
20.08.2013, 17:10
|
#107
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: OpenGL
А, и ещё вопрос. Рисовать линию как 2 треугольника нормально? Я знаю, что OGL поддерживает свой вывод линий, но тогда придется прибегнуть уже к другому DIP.
|
(Offline)
|
|
20.08.2013, 17:19
|
#108
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: OpenGL
вывести линию может быть дороже чем два треугольника.
+ треугольниками гибче, линия может быть любой ширины, ее можно затекстурить, и т.д.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.08.2013, 17:51
|
#109
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: 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;
}
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.08.2013, 01:09
|
#110
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: OpenGL
Слушай, друг, а ты для cmake сам собирал етот CMakeList.txt или какой-то тулзой его можно выгрузить со студии?
|
(Offline)
|
|
23.08.2013, 10:18
|
#111
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: OpenGL
Сообщение от HolyDel
Слушай, друг, а ты для cmake сам собирал етот CMakeList.txt или какой-то тулзой его можно выгрузить со студии?
|
всегда сам. там же легко.
|
(Offline)
|
|
23.08.2013, 15:53
|
#112
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: OpenGL
у меня 1586 файла в сурсах (из них только 175 мои, остальные библиотеки). очень муторно вручную будет собирать((.
|
(Offline)
|
|
23.08.2013, 22:26
|
#113
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: OpenGL
ты из cmake можешь вызывать сборку сторонних либ, их не обязательно переписывать на cmake.
|
(Offline)
|
|
26.08.2013, 02:02
|
#114
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: OpenGL
Вопрос по альфе. Если у нас два триса с альфой, рисуются они за один дип и касаются друг друга, почему не наблюдается прозрачность? Дело точно не в передаче шейдеру, вручную вбивал 0.5 на альфе, все равно трисы полностью непрозрачны.
|
(Offline)
|
|
26.08.2013, 02:13
|
#115
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: OpenGL
штуки с альфой надо сортировать от дальних к ближним.
рисовать полупрозрачную невыпуклую геометрию в 1 дип фигня выйдет с половины ракурсов.
а два пересекающихся крестом триангла вообще нормально не сделаешь.
ну и да, надо блендинг отдельно в апи включать, а не только в шейдере писать альфу, режимов блендинга много разных.
не знаю где оно в ГЛ, юзаю ДХ =]
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.08.2013, 02:13
|
#116
|
|
Ответ: OpenGL
Блендинг включил ? =)
|
|
|
Сообщение было полезно следующим пользователям:
|
|
26.08.2013, 03:56
|
#117
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: OpenGL
Сообщение от Nikich
Вопрос по альфе. Если у нас два триса с альфой, рисуются они за один дип и касаются друг друга, почему не наблюдается прозрачность? Дело точно не в передаче шейдеру, вручную вбивал 0.5 на альфе, все равно трисы полностью непрозрачны.
|
Дептх тест отруби.
У меня это делается так:
gl.disable(gl.DEPTH_TEST);
В "большом" OGL наверное как-то похоже.
Вообще см. порядок рендера. Бленденные объекты надо рендерить после всех остальных. Вообще скриншоты бы неплохо, но в целом диагноз: без сортировки с альфой получишь дерьмецо.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.10.2013, 00:46
|
#119
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: OpenGL
Есть ли годная библиотека/алгоритм для создания атласа из текстурок налету? Всё таки хочется сделать весь рендер в один DIP, однако рендер текста с FreeType явно требует множества DIP(умельцы на http://en.wikibooks.org/wiki/OpenGL_...t_Rendering_01 вообще предлагают каждый символ за отдельный DIP рисовать).
|
(Offline)
|
|
28.10.2013, 09:19
|
#120
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: OpenGL
Сообщение от Nikich
Есть ли годная библиотека/алгоритм для создания атласа из текстурок налету? Всё таки хочется сделать весь рендер в один DIP, однако рендер текста с FreeType явно требует множества DIP(умельцы на http://en.wikibooks.org/wiki/OpenGL_...t_Rendering_01 вообще предлагают каждый символ за отдельный DIP рисовать).
|
При создании текста строишь буффер с заданными текстурными координатами на каждую букву из bitmap шрифта, и рисуй за один дип. Я так целую страницу текста за 1 дип рисовал. Только тебе придется распарсить freetype2 на bitmap текстуру
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pozitiffcat за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:06.
|