Ben OpenGL ve Qt için oldukça yeni ve bu kadar iyi oldum. OpenGL 3.3 ile basit bir üçgen oluşturmak zor değildi ama bir Kamera entegre ediyor. Nedense benim üçgenim yok oldu !? Matrisleri hesaplamak için matematiği yanlış mı anladım? http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/OpenGL 3.3 ve Qt ile bir Kamera Oluşturma 5.6
https://wiki.qt.io/How_to_use_OpenGL_Core_Profile_with_Qt
Kodum (en önemli parçaları için)::
void GLWidget::initializeGL()
{
QGLFormat glFormat = QGLWidget::format();
if (!glFormat.sampleBuffers())
qWarning() << "Could not enable sample buffers";
// Set the clear color to black
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// Prepare a complete shader program…
if (!prepareShaderProgram("A:/Projekte/Qt Workspace/Projects/CGOpenGL/simple.vert", "A:/Projekte/Qt Workspace/Projects/CGOpenGL/simple.frag"))
return;
/////Matrix calculations/////
projection.perspective(45.0f, 4.0f/3.0f, 0.1f, 100.0f);
view.lookAt(QVector3D(4,3,3),QVector3D(0,0,0),QVector3D(0,1,0));
model = QMatrix4x4();
//////////
// We need us some vertex data. Start simple with a triangle ;-)
GLfloat points[] = {-0.5f, -0.5f, 0.0f,
1.0f, 0.5f, -0.5f,
0.0f, 1.0f, 0.0f,
0.5f, 0.0f, 1.0f};
vertexBuffer.create();
vertexBuffer.setUsagePattern(QGLBuffer::StaticDraw);
if (!vertexBuffer.bind())
{
qWarning() << "Could not bind vertex buffer to the context";
return;
}
vertexBuffer.allocate(points, 3 * 4 * sizeof(float));
// Bind the shader program so that we can associate variables from
// our application to the shaders
if (!shader.bind())
{
qWarning() << "Could not bind shader program to context";
return;
}
// Enable the "vertex" attribute to bind it to our currently bound
// vertex buffer.
shader.setAttributeBuffer("vertex", GL_FLOAT, 0, 4);
shader.enableAttributeArray("vertex");
}
void GLWidget::paintGL()
{
// Clear the buffer with the current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Set the MVP variable in the shader
shader.setUniformValue("MVP",projection * view * model);
// Draw stuff
glDrawArrays(GL_TRIANGLES, 0, 3);
}
Vertex Shader:
#version 330
layout(location = 0) in vec3 vertexPosition_modelspace;
uniform mat4 MVP;
void main(void)
{
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
}
Tanrım ... Ben düz herhangi bir matematiksel hata için 2 saat arıyordu ve bu bir değişken adı oldu ... Şimdi aptal hissediyorum deneyin>.