Я что-то не понимаю во время вращения 3D-объекта.
Идея состоит в том, что я хочу вращать свой объект вокруг осей X и Y. Изначально в исходном положении объекта я могу нормально вращать его вокруг X и вокруг Y. Как только я поворачиваю свой объект на 90 градусов вокруг X, я больше не могу вращать его вокруг Y (вместо этого он вращается вокруг Z)! Я попробовал то же самое, сначала повернув его на 90 градусов вокруг Y, затем я повернул его вокруг X и увидел, что он вращается вокруг x!
Это вопрос относительной оси? Но если это так, то и во втором случае должно быть то же самое, верно?
const char* vertexShaderSource = R"(
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoord;
out vec3 FragPos;
out vec3 Normal;
out vec2 TexCoord;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
FragPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(transpose(inverse(model))) * aNormal;
TexCoord = aTexCoord;
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
)";
void OpenGlWidget::paintGL()
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, mPushButton->texture);
glBindVertexArray(mPushButton->vao);
glm::mat4 model = glm::rotate(glm::mat4(1.0f), glm::radians(m_rotationAngleX), glm::vec3(1.0f, 0.0f, 0.0f));
model = glm::rotate(model, glm::radians(m_rotationAngleY), glm::vec3(0.0f, 1.0f, 0.0f));
glUniformMatrix4fv(glGetUniformLocation(m_shaderProgram, "model"), 1, GL_FALSE, glm::value_ptr(model));
glDrawElements(GL_TRIANGLES, mPushButton->indices.size(), GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
}
void OpenGlWidget::mouseMoveEvent(QMouseEvent* event)
{
if (event->buttons() & Qt::LeftButton) {
int deltaX = event->x() - m_lastMousePos.x();
int deltaY = event->y() - m_lastMousePos.y();
m_lastMousePos = event->pos();
m_rotationAngleX += deltaY * 0.5f;
m_rotationAngleY += deltaX * 0.5f;
update();
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... tion-issue
Проблема с вращением 3D-объекта ⇐ C++
Программы на C++. Форум разработчиков
1716453940
Anonymous
Я что-то не понимаю во время вращения 3D-объекта.
Идея состоит в том, что я хочу вращать свой объект вокруг осей X и Y. Изначально в исходном положении объекта я могу нормально вращать его вокруг X и вокруг Y. Как только я поворачиваю свой объект на 90 градусов вокруг X, я больше не могу вращать его вокруг Y (вместо этого он вращается вокруг Z)! Я попробовал то же самое, сначала повернув его на 90 градусов вокруг Y, затем я повернул его вокруг X и увидел, что он вращается вокруг x!
Это вопрос относительной оси? Но если это так, то и во втором случае должно быть то же самое, верно?
const char* vertexShaderSource = R"(
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoord;
out vec3 FragPos;
out vec3 Normal;
out vec2 TexCoord;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
FragPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(transpose(inverse(model))) * aNormal;
TexCoord = aTexCoord;
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
)";
void OpenGlWidget::paintGL()
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, mPushButton->texture);
glBindVertexArray(mPushButton->vao);
glm::mat4 model = glm::rotate(glm::mat4(1.0f), glm::radians(m_rotationAngleX), glm::vec3(1.0f, 0.0f, 0.0f));
model = glm::rotate(model, glm::radians(m_rotationAngleY), glm::vec3(0.0f, 1.0f, 0.0f));
glUniformMatrix4fv(glGetUniformLocation(m_shaderProgram, "model"), 1, GL_FALSE, glm::value_ptr(model));
glDrawElements(GL_TRIANGLES, mPushButton->indices.size(), GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
}
void OpenGlWidget::mouseMoveEvent(QMouseEvent* event)
{
if (event->buttons() & Qt::LeftButton) {
int deltaX = event->x() - m_lastMousePos.x();
int deltaY = event->y() - m_lastMousePos.y();
m_lastMousePos = event->pos();
m_rotationAngleX += deltaY * 0.5f;
m_rotationAngleY += deltaX * 0.5f;
update();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78521903/3d-object-rotation-issue[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия