I'm quite new to OpenGL and Qt and I've been so far so good with it. Rendering a simple triangle with OpenGL 3.3 wasn't that hard but integrating a Camera is. For some reason my triangle dissappears!? Did I get the math wrong to calculate the matrices? I used these 2 tutorials as a starting point: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/
https://wiki.qt.io/How_to_use_OpenGL_Core_Profile_with_Qt
My code(the most important parts only):
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);
}
you made a call to
shader.enableAttributeArray( "vertex" );
yet named it:
vertexPosition_modelspace
in the shader, you need to change the names to be consistent.
Try renaming the variable in the shader to "vertex"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.