Jump to content

  • Log In with Google      Sign In   
  • Create Account

#ActualKaiserJohan

Posted 15 December 2012 - 03:30 PM

Hi,
I'm having problems applying a perspective matrix to my 3d cube in OpenGL (3.3)

I'm uploading the perspective matrix (along with the vertex color) through uniform buffers. I can confirm this uniform buffer process works if I upload the identity matrix, but when I try the perspective variant it does not work (nothing gets drawn),

So when I set the perspective matrix like this:

uint16_t h = mEngine->GetRenderer().GetScreenMode().ScreenHeight;
			uint16_t w = mEngine->GetRenderer().GetScreenMode().ScreenWidth;
			shaderData.mPerspMatrix = CreatePerspectiveMatrix(45.0f, w/(float) h, 0.5f, 3.0f);

it dosn't work, but when I set it to the identity matrix it draws, but of course with no perspective

shaderData.mPerspMatrix = Mat4(1.0f);

Here's the cube data:

const float vertexPositions[] =
	    {
		    // front vertices
		    0.0f, 0.5f, 0.0f,
		    0.5f, 0.5f, 0.0f,
		    0.5f, 0.0f, 0.0f,
		    0.0f, 0.0f, 0.0f,
		    // back vertices
		    0.0f, 0.5f, 0.5f,
		    0.5f, 0.5f, 0.5f,
		    0.5f, 0.0f, 0.5f,
		    0.0f, 0.0f, 0.5f
	    };
	    const GLshort indexData[] =
	    {
		    // back
		    5, 4, 7,
		    5, 7, 6,
		    // right
		    1, 5, 6,
		    1, 6, 2,
		    // left
		    0, 4, 7,
		    0, 7, 3,
		    // top
		    5, 4, 0,
		    5, 0, 1,
		    // bottom
		    6, 7, 3,
		    6, 3, 2,
		    // front
		    1, 0, 3,
		    1, 3, 2
	    };

Buffer and draw it like this:

// buffer data
	    glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
	    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
	    glBindBuffer(GL_ARRAY_BUFFER, 0);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
	    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

	    // setup VAO
	    glBindVertexArray(mVAO);
	    glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
	    glEnableVertexAttribArray(0);
	    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
	    glBindBuffer(GL_ARRAY_BUFFER, 0);
	    glBindVertexArray(0);


	  //.... and drawing
glBindVertexArray(mVAO);
	    glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);
	    glBindVertexArray(0);

Here's my vertex + fragment shader:

const std::string gVertexShader = "#version 330		\n \
																					\n  \
										layout(std140) uniform Uni				  \n  \
										{										   \n  \
											vec4 mColor;							\n  \
											mat4 mPerspMatrix;					  \n  \
										};										  \n  \
																					\n \
										in vec3 in_position;	  \n \
										out vec3 ex_color;						  \n \
										void main()		 \n \
										{		   \n \
											vec4 camPos = vec4(in_position, 1.0f); \n \
											ex_color = mColor.xyz;				  \n  \
											gl_Position = mPerspMatrix * camPos;	\n  \
										}		   \n";

	const std::string gFragmentShader = "#version 330		 \n \
										in vec3 ex_color;		\n \
										out vec4 outColor;		\n \
										void main()		  \n \
										{			\n \
											outColor = vec4(ex_color, 1.0f);		 \n \
										}			\n";

What am I missing to apply a perspective?

EDIT: Sorry I hope its readable, dosn't seem copy-paste works too well?

#5KaiserJohan

Posted 15 December 2012 - 03:30 PM

Hi,
I'm having problems applying a perspective matrix to my 3d cube in OpenGL (3.3)

I'm uploading the perspective matrix (along with the vertex color) through uniform buffers. I can confirm this uniform buffer process works if I upload the identity matrix, but when I try the perspective variant it does not work (nothing gets drawn),

So when I set the perspective matrix like this:

uint16_t h = mEngine->GetRenderer().GetScreenMode().ScreenHeight;
			uint16_t w = mEngine->GetRenderer().GetScreenMode().ScreenWidth;
			shaderData.mPerspMatrix = CreatePerspectiveMatrix(45.0f, w/(float) h, 0.5f, 3.0f);

it dosn't work, but when I set it to the identity matrix it draws, but of course with no perspective

shaderData.mPerspMatrix = Mat4(1.0f);

Here's the cube data:

const float vertexPositions[] =
	    {
		    // front vertices
		    0.0f, 0.5f, 0.0f,
		    0.5f, 0.5f, 0.0f,
		    0.5f, 0.0f, 0.0f,
		    0.0f, 0.0f, 0.0f,
		    // back vertices
		    0.0f, 0.5f, 0.5f,
		    0.5f, 0.5f, 0.5f,
		    0.5f, 0.0f, 0.5f,
		    0.0f, 0.0f, 0.5f
	    };
	    const GLshort indexData[] =
	    {
		    // back
		    5, 4, 7,
		    5, 7, 6,
		    // right
		    1, 5, 6,
		    1, 6, 2,
		    // left
		    0, 4, 7,
		    0, 7, 3,
		    // top
		    5, 4, 0,
		    5, 0, 1,
		    // bottom
		    6, 7, 3,
		    6, 3, 2,
		    // front
		    1, 0, 3,
		    1, 3, 2
	    };

Buffer and draw it like this:

// buffer data
	    glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
	    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
	    glBindBuffer(GL_ARRAY_BUFFER, 0);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
	    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

	    // setup VAO
	    glBindVertexArray(mVAO);
	    glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
	    glEnableVertexAttribArray(0);
	    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
	    glBindBuffer(GL_ARRAY_BUFFER, 0);
	    glBindVertexArray(0);


	  //.... and drawing
glBindVertexArray(mVAO);
	    glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);
	    glBindVertexArray(0);

Here's my vertex + fragment shader:

const std::string gVertexShader = "#version 330		\n \
																					\n  \
										layout(std140) uniform Uni				  \n  \
										{										   \n  \
											vec4 mColor;							\n  \
											mat4 mPerspMatrix;					  \n  \
										};										  \n  \
																					\n \
										in vec3 in_position;	  \n \
										out vec3 ex_color;						  \n \
										void main()		 \n \
										{		   \n \
											vec4 camPos = vec4(in_position, 1.0f); \n \
											ex_color = mColor.xyz;				  \n  \
											gl_Position = mPerspMatrix * camPos;	\n  \
										}		   \n";

	const std::string gFragmentShader = "#version 330		 \n \
										in vec3 ex_color;		\n \
										out vec4 outColor;		\n \
										void main()		  \n \
										{			\n \
											outColor = vec4(ex_color, 1.0f);		 \n \
										}			\n";

What am I missing to apply a perspective?

EDIT: Sorry I hope its readable, dosn't seem copy-paste works too well?

#4KaiserJohan

Posted 15 December 2012 - 03:08 PM

Hi,
I'm having problems applying a perspective matrix to my 3d cube in OpenGL (3.3)

I'm uploading the perspective matrix (along with the vertex color) through uniform buffers. I can confirm this uniform buffer process works if I upload the identity matrix, but when I try the perspective variant it does not work (nothing gets drawn),

So when I set the perspective matrix like this:

uint16_t h = mEngine->GetRenderer().GetScreenMode().ScreenHeight;
			uint16_t w = mEngine->GetRenderer().GetScreenMode().ScreenWidth;
			shaderData.mPerspMatrix = CreatePerspectiveMatrix(45.0f, w/(float) h, 0.5f, 3.0f);

it dosn't work, but when I set it to the identity matrix it draws, but of course with no perspective

shaderData.mPerspMatrix = Mat4(1.0f);

Here's the cube data:

const float vertexPositions[] =
	    {
		    // front vertices
		    0.0f, 0.5f, 0.0f,
		    0.5f, 0.5f, 0.0f,
		    0.5f, 0.0f, 0.0f,
		    0.0f, 0.0f, 0.0f,
		    // back vertices
		    0.0f, 0.5f, 0.5f,
		    0.5f, 0.5f, 0.5f,
		    0.5f, 0.0f, 0.5f,
		    0.0f, 0.0f, 0.5f
	    };
	    const GLshort indexData[] =
	    {
		    // back
		    5, 4, 7,
		    5, 7, 6,
		    // right
		    1, 5, 6,
		    1, 6, 2,
		    // left
		    0, 4, 7,
		    0, 7, 3,
		    // top
		    5, 4, 0,
		    5, 0, 1,
		    // bottom
		    6, 7, 3,
		    6, 3, 2,
		    // front
		    1, 0, 3,
		    1, 3, 2
	    };

Buffer and draw it like this:

// buffer data
	    glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
	    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
	    glBindBuffer(GL_ARRAY_BUFFER, 0);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
	    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

	    // setup VAO
	    glBindVertexArray(mVAO);
	    glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
	    glEnableVertexAttribArray(0);
	    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
	    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
	    glBindBuffer(GL_ARRAY_BUFFER, 0);
	    glBindVertexArray(0);


	  //.... and drawing
glBindVertexArray(mVAO);
	    glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);
	    glBindVertexArray(0);

Here's my vertex + fragment shader:

const std::string gVertexShader = "#version 330		\n \
																					\n  \
										layout(std140) uniform Uni				  \n  \
										{										   \n  \
											vec4 mColor;							\n  \
											mat4 mPerspMatrix;					  \n  \
										};										  \n  \
																					\n \
										in vec3 in_position;	  \n \
										out vec3 ex_color;						  \n \
										void main()		 \n \
										{		   \n \
											vec4 camPos = vec4(in_position, 1.0f); \n \
											ex_color = mColor.xyz;				  \n  \
											gl_Position = mPerspMatrix * camPos;	\n  \
										}		   \n";

	const std::string gFragmentShader = "#version 330		 \n \
										in vec3 ex_color;		\n \
										out vec4 outColor;		\n \
										void main()		  \n \
										{			\n \
											outColor = vec4(ex_color, 1.0f);		 \n \
										}			\n";

What am I missing to apply a perspective?

#3KaiserJohan

Posted 15 December 2012 - 03:06 PM

Hi,
I'm having problems applying a perspective matrix to my 3d cube in OpenGL (3.3)

I'm uploading the perspective matrix (along with the vertex color) through uniform buffers. I can confirm this uniform buffer process works if I upload the identity matrix, but when I try the perspective variant it does not work (nothing gets drawn),

So when I set the perspective matrix like this:

uint16_t h = mEngine->GetRenderer().GetScreenMode().ScreenHeight;
		    uint16_t w = mEngine->GetRenderer().GetScreenMode().ScreenWidth;
		    shaderData.mPerspMatrix = CreatePerspectiveMatrix(45.0f, w/(float) h, 0.5f, 3.0f);

it dosn't work, but when I set it to the identity matrix it draws, but of course with no perspective

shaderData.mPerspMatrix = Mat4(1.0f);

Here's my vertex + fragment shader:

const std::string gVertexShader = "#version 330	    \n \
																				    \n  \
									    layout(std140) uniform Uni				  \n  \
									    {										   \n  \
										    vec4 mColor;						    \n  \
										    mat4 mPerspMatrix;					  \n  \
									    };										  \n  \
																				    \n \
									    in vec3 in_position;	  \n \
									    out vec3 ex_color;						  \n \
									    void main()		 \n \
									    {		   \n \
										    vec4 camPos = vec4(in_position, 1.0f); \n \
										    ex_color = mColor.xyz;				  \n  \
										    gl_Position = mPerspMatrix * camPos;    \n  \
									    }		   \n";

    const std::string gFragmentShader = "#version 330		 \n \
									    in vec3 ex_color;	    \n \
									    out vec4 outColor;	    \n \
									    void main()		  \n \
									    {		    \n \
										    outColor = vec4(ex_color, 1.0f);		 \n \
									    }		    \n";

What am I missing to apply a perspective?

#2KaiserJohan

Posted 15 December 2012 - 03:06 PM

Hi,
I'm having problems applying a perspective matrix to my 3d cube in OpenGL (3.3)

I'm uploading the perspective matrix (along with the vertex color) through uniform buffers. I can confirm this uniform buffer process works if I upload the identity matrix, but when I try the perspective variant it does not work (nothing gets drawn),

So when I set the perspective matrix like this:

uint16_t h = mEngine->GetRenderer().GetScreenMode().ScreenHeight;
		    uint16_t w = mEngine->GetRenderer().GetScreenMode().ScreenWidth;
		    shaderData.mPerspMatrix = CreatePerspectiveMatrix(45.0f, w/(float) h, 0.5f, 3.0f);

it dosn't work, but when I set it to the identity matrix it draws, but of course with no perspective

shaderData.mPerspMatrix = Mat4(1.0f);

Here's my vertex + fragment shader:

const std::string gVertexShader = "#version 330	    \n \
																				    \n  \
									    layout(std140) uniform Uni				  \n  \
									    {										   \n  \
										    vec4 mColor;						    \n  \
										    mat4 mPerspMatrix;					  \n  \
									    };										  \n  \
																				    \n \
									    in vec3 in_position;	  \n \
									    out vec3 ex_color;						  \n \
									    void main()		 \n \
									    {		   \n \
										    vec4 camPos = vec4(in_position, 1.0f); \n \
										    ex_color = mColor.xyz;				  \n  \
										    gl_Position = mPerspMatrix * camPos;    \n  \
									    }		   \n";

    const std::string gFragmentShader = "#version 330		 \n \
									    in vec3 ex_color;	    \n \
									    out vec4 outColor;	    \n \
									    void main()		  \n \
									    {		    \n \
										    outColor = vec4(ex_color, 1.0f);		 \n \
									    }		    \n";

What am I missing to apply a perspective?

#1KaiserJohan

Posted 15 December 2012 - 03:04 PM

Hi,
I'm having problems applying a perspective matrix to my 3d cube in OpenGL (3.3)

I'm uploading the perspective matrix (along with the vertex color) through uniform buffers. I can confirm this uniform buffer process works if I upload the identity matrix, but when I try the perspective variant it does not work (nothing gets drawn),

So when I set the perspective matrix like this:

uint16_t h = mEngine->GetRenderer().GetScreenMode().ScreenHeight;
		    uint16_t w = mEngine->GetRenderer().GetScreenMode().ScreenWidth;
		    shaderData.mPerspMatrix = CreatePerspectiveMatrix(45.0f, w/(float) h, 0.5f, 3.0f);

it dosn't work, but when I set it to the identity matrix it draws, but of course with no perspective

shaderData.mPerspMatrix = Mat4(1.0f);

Here's

Here's my vertex + fragment shader:

const std::string gVertexShader = "#version 330	    \n \
																				    \n  \
									    layout(std140) uniform Uni				  \n  \
									    {										   \n  \
										    vec4 mColor;						    \n  \
										    mat4 mPerspMatrix;					  \n  \
									    };										  \n  \
																				    \n \
									    in vec3 in_position;	  \n \
									    out vec3 ex_color;						  \n \
									    void main()		 \n \
									    {		   \n \
										    vec4 camPos = vec4(in_position, 1.0f); \n \
										    ex_color = mColor.xyz;				  \n  \
										    gl_Position = mPerspMatrix * camPos;    \n  \
									    }		   \n";

    const std::string gFragmentShader = "#version 330		 \n \
									    in vec3 ex_color;	    \n \
									    out vec4 outColor;	    \n \
									    void main()		  \n \
									    {		    \n \
										    outColor = vec4(ex_color, 1.0f);		 \n \
									    }		    \n";

What am I missing to apply a perspective?

PARTNERS