Я пишу программу моделирования на C++, которая визуализирует трехмерную сцену в объекте QML Scene3D из C++. Это работает хорошо, но я хотел бы добавить к сцене почти прозрачные конусные сетки.
Я пробовал использовать Qt3DExtras::QDiffuseSpecularMaterial с низкими значениями альфа, но результат не тот. достаточно прозрачный. Фактически, использование нулевого альфа-значения приводит к созданию сплошных белых объектов.
Qt3DExtras::QConeMesh *m_cone = new Qt3DExtras::QConeMesh(e);
Qt3DExtras::QDiffuseSpecularMaterial *conemat = new Qt3DExtras::QDiffuseSpecularMaterial(e);
QColor coneColor = QColor::fromRgbF(0,0.5,0,0);
conemat->setDiffuse(coneColor);
conemat->setAlphaBlendingEnabled(true);
m_cone->setBottomRadius(1798444);
m_cone->setTopRadius(0);
m_cone->setLength(sat->orbitRadius()-EARTH_RADIUS);
Какой класс материала и параметры материала C++ можно использовать для рисования очень слабых прозрачных объектов?
В QML это кажется простым с использованием фрагментов шейдера. Как это можно сделать на C++?
CustomMaterial {
shadingMode: CustomMaterial.Shaded
fragmentShader: "material_transparent.frag"
}
Transparent.frag
void MAIN()
{
vec2 size = vec2(textureSize(SCREEN_TEXTURE, 0));
vec2 uv = FRAGCOORD.xy / size;
vec3 view = normalize(VIEW_VECTOR);
vec3 projection = view - view * normalize(NORMAL);
vec3 refraction = projection * projection;
uv += refraction.xy * 0.5;
vec3 col = texture(SCREEN_TEXTURE, uv).rgb;
col = col * 0.8 + vec3(0.2);
BASE_COLOR = vec4(col, 1.0);
}
РЕДАКТИРОВАТЬ: Карлфилип предложил мне использовать QEffect. Я попробовал что-то на основе документации Qt (я не смог найти ни одного примера). Это то, что я пробовал, но статус glShader в конце всегда всегда «Неготов». Должно быть, я что-то упускаю. Есть идеи?
Qt3DRender::QEffect *effect = new Qt3DRender::QEffect();
// Create technique, render pass and shader
Qt3DRender::QTechnique *gl3Technique = new Qt3DRender::QTechnique();
Qt3DRender::QRenderPass *gl3Pass = new Qt3DRender::QRenderPass();
Qt3DRender::QShaderProgram *glShader = new Qt3DRender::QShaderProgram();
// Set the shader on the render pass
gl3Pass->setShaderProgram(glShader);
// Add the pass to the technique
gl3Technique->addRenderPass(gl3Pass);
// Set the targeted GL version for the technique
gl3Technique->graphicsApiFilter()->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL);
gl3Technique->graphicsApiFilter()->setMajorVersion(3);
gl3Technique->graphicsApiFilter()->setMinorVersion(1);
gl3Technique->graphicsApiFilter()->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile);
// Add the technique to the effect
effect->addTechnique(gl3Technique);
QByteArray prog = glShader->loadSource(QUrl("qrc:/material_transparent.frag"));
glShader->setFragmentShaderCode(prog);
Подробнее здесь: https://stackoverflow.com/questions/789 ... -c-program
Стеклянный материал в программе Qt3D C++? ⇐ C++
Программы на C++. Форум разработчиков
1726520800
Anonymous
Я пишу программу моделирования на C++, которая визуализирует трехмерную сцену в объекте QML Scene3D из C++. Это работает хорошо, но я хотел бы добавить к сцене почти прозрачные конусные сетки.
Я пробовал использовать Qt3DExtras::QDiffuseSpecularMaterial с низкими значениями альфа, но результат не тот. достаточно прозрачный. Фактически, использование нулевого альфа-значения приводит к созданию сплошных белых объектов.
Qt3DExtras::QConeMesh *m_cone = new Qt3DExtras::QConeMesh(e);
Qt3DExtras::QDiffuseSpecularMaterial *conemat = new Qt3DExtras::QDiffuseSpecularMaterial(e);
QColor coneColor = QColor::fromRgbF(0,0.5,0,0);
conemat->setDiffuse(coneColor);
conemat->setAlphaBlendingEnabled(true);
m_cone->setBottomRadius(1798444);
m_cone->setTopRadius(0);
m_cone->setLength(sat->orbitRadius()-EARTH_RADIUS);
Какой класс материала и параметры материала C++ можно использовать для рисования очень слабых прозрачных объектов?
В QML это кажется простым с использованием фрагментов шейдера. Как это можно сделать на C++?
CustomMaterial {
shadingMode: CustomMaterial.Shaded
fragmentShader: "material_transparent.frag"
}
Transparent.frag
void MAIN()
{
vec2 size = vec2(textureSize(SCREEN_TEXTURE, 0));
vec2 uv = FRAGCOORD.xy / size;
vec3 view = normalize(VIEW_VECTOR);
vec3 projection = view - view * normalize(NORMAL);
vec3 refraction = projection * projection;
uv += refraction.xy * 0.5;
vec3 col = texture(SCREEN_TEXTURE, uv).rgb;
col = col * 0.8 + vec3(0.2);
BASE_COLOR = vec4(col, 1.0);
}
РЕДАКТИРОВАТЬ: Карлфилип предложил мне использовать QEffect. Я попробовал что-то на основе документации Qt (я не смог найти ни одного примера). Это то, что я пробовал, но статус glShader в конце всегда всегда «Неготов». Должно быть, я что-то упускаю. Есть идеи?
Qt3DRender::QEffect *effect = new Qt3DRender::QEffect();
// Create technique, render pass and shader
Qt3DRender::QTechnique *gl3Technique = new Qt3DRender::QTechnique();
Qt3DRender::QRenderPass *gl3Pass = new Qt3DRender::QRenderPass();
Qt3DRender::QShaderProgram *glShader = new Qt3DRender::QShaderProgram();
// Set the shader on the render pass
gl3Pass->setShaderProgram(glShader);
// Add the pass to the technique
gl3Technique->addRenderPass(gl3Pass);
// Set the targeted GL version for the technique
gl3Technique->graphicsApiFilter()->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL);
gl3Technique->graphicsApiFilter()->setMajorVersion(3);
gl3Technique->graphicsApiFilter()->setMinorVersion(1);
gl3Technique->graphicsApiFilter()->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile);
// Add the technique to the effect
effect->addTechnique(gl3Technique);
QByteArray prog = glShader->loadSource(QUrl("qrc:/material_transparent.frag"));
glShader->setFragmentShaderCode(prog);
Подробнее здесь: [url]https://stackoverflow.com/questions/78982926/glass-material-in-qt3d-c-program[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия