OpenGL 3D Cube выглядит плоским, а проблемы с движением камеры с прогнозированной проекциейC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 OpenGL 3D Cube выглядит плоским, а проблемы с движением камеры с прогнозированной проекцией

Сообщение Anonymous »

Im в настоящее время строит 3D -рендеринг в OpenGL. Я уже строил некоторые в прошлом с разными API (SFML), но хотел, наконец, наконец сделать «хороший» в OpenGL. Since this renderer should be part of my own little physics / game Engine I followed the game engine - tutorial Series by The Cherno:
He is building a 2D Engine so I wanted to copy the Gerneral rendererapi Abstraction Stuff и, чем построить из него 3D -рендерер. Поэтому я сменил с матрицы ортогорафической проекции на перспективу (glm :: перспектива (Fov, ....)) и активированный Gl_depth_test и Opengls Backface отбор.

Код: Выделить всё

float vertices[8 * 3] =
{
-0.5f, -0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
0.5f,  0.5f, 0.5f,
-0.5f,  0.5f, 0.5f,

-0.5f, -0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
0.5f,  0.5f, -0.5f,
-0.5f,  0.5f, -0.5f
};

uint32_t indices[36] =
{
0, 1, 2, 2, 3, 0,
1, 5, 6, 6, 2, 1,
7, 6, 5, 5, 4, 7,
4, 0, 3, 3, 7, 4,
4, 5, 1, 1, 0, 4,
3, 2, 6, 6, 7, 3
};
< /code>
Согласно следующей команде рендеринга: < /p>
glDrawElements(GL_TRIANGLES, vertexArray->GetIndexBuffer()->GetCount(), GL_UNSIGNED_INT, nullptr);
< /code>
и этот шейдер: < /p>
//vertex
#version 330 core

layout(location = 0) in vec3 a_Position;

uniform mat4 u_ViewProjection;
uniform mat4 u_Model;

void main()
{
gl_Position = u_ViewProjection * u_Model * vec4(a_Position, 1.0);
}

//fragment
#version 330 core

layout(location = 0) out vec4 color;

uniform vec4 u_Color;

void main()
{
color = u_Color;
}
< /code>
Странно происходит. Сначала все выглядит правильно
 
Но когда я двигаюсь так: 
void ExampleLayer::DoCameraMove(wxl::KeyPressedEvent& evnt)
{
const float MOVE_SPEED = 30.f;

const float FORWARD_MOVE_SPEED = 1000.f;

const float ROTATION_SPEED = 10.f;

glm::vec3 position = m_Camera.GetPosition();
glm::vec3 lookDir = -m_Camera.GetLookDir();
glm::vec3 upDir = -m_Camera.GetUpDir();
glm::vec3 rightDir = glm::normalize(glm::cross(lookDir, -upDir));

//--Movement-----------------------------------------------------------------

if (evnt.GetKeyCode() == WXL_KEY_W) {
position += lookDir * FORWARD_MOVE_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_S) {
position -= lookDir * FORWARD_MOVE_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_A) {
position -= rightDir * MOVE_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_D) {
position += rightDir * MOVE_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_SPACE) {
position -= upDir * MOVE_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_LEFT_SHIFT) {
position += upDir * MOVE_SPEED * m_TS;
}

m_Camera.SetPosition(position);

//--Rotation------------------------------------------------------------------------

float rotationX = m_Camera.GetRotationX();
float rotationY = m_Camera.GetRotationY();

if (evnt.GetKeyCode() == WXL_KEY_UP) {
rotationX -= ROTATION_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_DOWN) {
rotationX += ROTATION_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_LEFT) {
rotationY += ROTATION_SPEED * m_TS;
}
if (evnt.GetKeyCode() == WXL_KEY_RIGHT) {
rotationY -= ROTATION_SPEED * m_TS;
}

m_Camera.SetRotation(rotationX, rotationY,
m_Camera.GetRotationZ());
}
, кажется, не является истинным кубом, а скорее плоской платой:


Подробнее здесь: https://stackoverflow.com/questions/795 ... e-projecti
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»