• Advertisement
  • Popular Tags

  • Popular Now

  • Advertisement
  • Similar Content

    • By Fadey Duh
      Good evening everyone!

      I was wondering if there is something equivalent of  GL_NV_blend_equation_advanced for AMD?
      Basically I'm trying to find more compatible version of it.

      Thank you!
    • By Jens Eckervogt
      Hello guys, 
       
      Please tell me! 
      How do I know? Why does wavefront not show for me?
      I already checked I have non errors yet.
      using OpenTK; using System.Collections.Generic; using System.IO; using System.Text; namespace Tutorial_08.net.sourceskyboxer { public class WaveFrontLoader { private static List<Vector3> inPositions; private static List<Vector2> inTexcoords; private static List<Vector3> inNormals; private static List<float> positions; private static List<float> texcoords; private static List<int> indices; public static RawModel LoadObjModel(string filename, Loader loader) { inPositions = new List<Vector3>(); inTexcoords = new List<Vector2>(); inNormals = new List<Vector3>(); positions = new List<float>(); texcoords = new List<float>(); indices = new List<int>(); int nextIdx = 0; using (var reader = new StreamReader(File.Open("Contents/" + filename + ".obj", FileMode.Open), Encoding.UTF8)) { string line = reader.ReadLine(); int i = reader.Read(); while (true) { string[] currentLine = line.Split(); if (currentLine[0] == "v") { Vector3 pos = new Vector3(float.Parse(currentLine[1]), float.Parse(currentLine[2]), float.Parse(currentLine[3])); inPositions.Add(pos); if (currentLine[1] == "t") { Vector2 tex = new Vector2(float.Parse(currentLine[1]), float.Parse(currentLine[2])); inTexcoords.Add(tex); } if (currentLine[1] == "n") { Vector3 nom = new Vector3(float.Parse(currentLine[1]), float.Parse(currentLine[2]), float.Parse(currentLine[3])); inNormals.Add(nom); } } if (currentLine[0] == "f") { Vector3 pos = inPositions[0]; positions.Add(pos.X); positions.Add(pos.Y); positions.Add(pos.Z); Vector2 tc = inTexcoords[0]; texcoords.Add(tc.X); texcoords.Add(tc.Y); indices.Add(nextIdx); ++nextIdx; } reader.Close(); return loader.loadToVAO(positions.ToArray(), texcoords.ToArray(), indices.ToArray()); } } } } } And It have tried other method but it can't show for me.  I am mad now. Because any OpenTK developers won't help me.
      Please help me how do I fix.

      And my download (mega.nz) should it is original but I tried no success...
      - Add blend source and png file here I have tried tried,.....  
       
      PS: Why is our community not active? I wait very longer. Stop to lie me!
      Thanks !
    • By codelyoko373
      I wasn't sure if this would be the right place for a topic like this so sorry if it isn't.
      I'm currently working on a project for Uni using FreeGLUT to make a simple solar system simulation. I've got to the point where I've implemented all the planets and have used a Scene Graph to link them all together. The issue I'm having with now though is basically the planets and moons orbit correctly at their own orbit speeds.
      I'm not really experienced with using matrices for stuff like this so It's likely why I can't figure out how exactly to get it working. This is where I'm applying the transformation matrices, as well as pushing and popping them. This is within the Render function that every planet including the sun and moons will have and run.
      if (tag != "Sun") { glRotatef(orbitAngle, orbitRotation.X, orbitRotation.Y, orbitRotation.Z); } glPushMatrix(); glTranslatef(position.X, position.Y, position.Z); glRotatef(rotationAngle, rotation.X, rotation.Y, rotation.Z); glScalef(scale.X, scale.Y, scale.Z); glDrawElements(GL_TRIANGLES, mesh->indiceCount, GL_UNSIGNED_SHORT, mesh->indices); if (tag != "Sun") { glPopMatrix(); } The "If(tag != "Sun")" parts are my attempts are getting the planets to orbit correctly though it likely isn't the way I'm meant to be doing it. So I was wondering if someone would be able to help me? As I really don't have an idea on what I would do to get it working. Using the if statement is truthfully the closest I've got to it working but there are still weird effects like the planets orbiting faster then they should depending on the number of planets actually be updated/rendered.
    • By Jens Eckervogt
      Hello everyone, 
      I have problem with texture
      using System; using OpenTK; using OpenTK.Input; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL4; using System.Drawing; using System.Reflection; namespace Tutorial_05 { class Game : GameWindow { private static int WIDTH = 1200; private static int HEIGHT = 720; private static KeyboardState keyState; private int vaoID; private int vboID; private int iboID; private Vector3[] vertices = { new Vector3(-0.5f, 0.5f, 0.0f), // V0 new Vector3(-0.5f, -0.5f, 0.0f), // V1 new Vector3(0.5f, -0.5f, 0.0f), // V2 new Vector3(0.5f, 0.5f, 0.0f) // V3 }; private Vector2[] texcoords = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) }; private int[] indices = { 0, 1, 3, 3, 1, 2 }; private string vertsrc = @"#version 450 core in vec3 position; in vec2 textureCoords; out vec2 pass_textureCoords; void main(void) { gl_Position = vec4(position, 1.0); pass_textureCoords = textureCoords; }"; private string fragsrc = @"#version 450 core in vec2 pass_textureCoords; out vec4 out_color; uniform sampler2D textureSampler; void main(void) { out_color = texture(textureSampler, pass_textureCoords); }"; private int programID; private int vertexShaderID; private int fragmentShaderID; private int textureID; private Bitmap texsrc; public Game() : base(WIDTH, HEIGHT, GraphicsMode.Default, "Tutorial 05 - Texturing", GameWindowFlags.Default, DisplayDevice.Default, 4, 5, GraphicsContextFlags.Default) { } protected override void OnLoad(EventArgs e) { base.OnLoad(e); CursorVisible = true; GL.GenVertexArrays(1, out vaoID); GL.BindVertexArray(vaoID); GL.GenBuffers(1, out vboID); GL.BindBuffer(BufferTarget.ArrayBuffer, vboID); GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(vertices.Length * Vector3.SizeInBytes), vertices, BufferUsageHint.StaticDraw); GL.GenBuffers(1, out iboID); GL.BindBuffer(BufferTarget.ElementArrayBuffer, iboID); GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(indices.Length * sizeof(int)), indices, BufferUsageHint.StaticDraw); vertexShaderID = GL.CreateShader(ShaderType.VertexShader); GL.ShaderSource(vertexShaderID, vertsrc); GL.CompileShader(vertexShaderID); fragmentShaderID = GL.CreateShader(ShaderType.FragmentShader); GL.ShaderSource(fragmentShaderID, fragsrc); GL.CompileShader(fragmentShaderID); programID = GL.CreateProgram(); GL.AttachShader(programID, vertexShaderID); GL.AttachShader(programID, fragmentShaderID); GL.LinkProgram(programID); // Loading texture from embedded resource texsrc = new Bitmap(Assembly.GetEntryAssembly().GetManifestResourceStream("Tutorial_05.example.png")); textureID = GL.GenTexture(); GL.BindTexture(TextureTarget.Texture2D, textureID); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)All.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)All.Linear); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texsrc.Width, texsrc.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); System.Drawing.Imaging.BitmapData bitmap_data = texsrc.LockBits(new Rectangle(0, 0, texsrc.Width, texsrc.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, texsrc.Width, texsrc.Height, PixelFormat.Bgra, PixelType.UnsignedByte, bitmap_data.Scan0); texsrc.UnlockBits(bitmap_data); GL.Enable(EnableCap.Texture2D); GL.BufferData(BufferTarget.TextureBuffer, (IntPtr)(texcoords.Length * Vector2.SizeInBytes), texcoords, BufferUsageHint.StaticDraw); GL.BindAttribLocation(programID, 0, "position"); GL.BindAttribLocation(programID, 1, "textureCoords"); } protected override void OnResize(EventArgs e) { base.OnResize(e); GL.Viewport(0, 0, ClientRectangle.Width, ClientRectangle.Height); } protected override void OnUpdateFrame(FrameEventArgs e) { base.OnUpdateFrame(e); keyState = Keyboard.GetState(); if (keyState.IsKeyDown(Key.Escape)) { Exit(); } } protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); // Prepare for background GL.Clear(ClearBufferMask.ColorBufferBit); GL.ClearColor(Color4.Red); // Draw traingles GL.EnableVertexAttribArray(0); GL.EnableVertexAttribArray(1); GL.BindVertexArray(vaoID); GL.UseProgram(programID); GL.BindBuffer(BufferTarget.ArrayBuffer, vboID); GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, IntPtr.Zero); GL.ActiveTexture(TextureUnit.Texture0); GL.BindTexture(TextureTarget.Texture3D, textureID); GL.BindBuffer(BufferTarget.ElementArrayBuffer, iboID); GL.DrawElements(BeginMode.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0); GL.DisableVertexAttribArray(0); GL.DisableVertexAttribArray(1); SwapBuffers(); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); GL.DeleteVertexArray(vaoID); GL.DeleteBuffer(vboID); } } } I can not remember where do I add GL.Uniform2();
    • By Jens Eckervogt
      Hello everyone
      For @80bserver8 nice job - I have found Google search. How did you port from Javascript WebGL to C# OpenTK.?
      I have been searched Google but it shows f***ing Unity 3D. I really want know how do I understand I want start with OpenTK But I want know where is porting of Javascript and C#?
       
      Thanks!
  • Advertisement
  • Advertisement
Sign in to follow this  

OpenGL Texture Disappears When I Load Any Type Of Shader (Lighting Shader In This Case)

This topic is 644 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello guys, this is my first thread in the community (well I'm not sure haha, long time ago I didn't enter here), to be honest I never came to internet to ask something related with OpenGL since there are a lot of good sources to learn and I'm C++ programmer, but these shaders are a bit different or I'm doing something stupid... they are turning me crazy. I took the source from a good site where the everything works perfectly, I didn't modify the source of the shaders so the link of the example source is this. Basically the problem is when I load the shader, the texture disappears and there are some graphics problems. In the first case, the normal look of my project is this15653cc98cb2fccc91945e04726c3cf6.png

 

And when I load the shaders of lighting (or any simple shader) happens this:

a31eb34f55ff03d472284b323d54d8ea.png

 

The shader is really working because the shadow of the entities are properly situated according to the position of the directional light. 

I'm also using ImGui but that's not the problem because I commented the initializing function and the problem persists. I'm posting the source of the rendering function here:

BOOL DrawGLScene()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	
	//MESHES & SKYBOX RENDERING

	CSkybox::RenderSkybox(0, 0, 0, 1, 1, 1);
	Camera->UpdateCamera();

	RenderSpaceLines();
	
	for (uint i = 0; i < EntityManager::GetEntities(); i++)
	{
		if (Entities[i] && Entities[i]->ID != INT_MAX && Vector3::Distance(Camera->position, Entities[i]->Position) <= Renderer->GetRenderMaxDistance())	//AVOIDING RENDER ENTITIES THAT ARE OUTSIDE OF MAX DISTANCE
		{
			glPushMatrix();

			if (Entities[i]->Parent == -1)
			{
				glTranslatef(Entities[i]->Position.x,
					Entities[i]->Position.y,
					Entities[i]->Position.z);
				glRotatef(Entities[i]->Rotation.x, 1.f, 0.f, 0.f);
				glRotatef(Entities[i]->Rotation.y, 0.f, 1.f, 0.f);
				glRotatef(Entities[i]->Rotation.z, 0.f, 0.f, 1.f);
			}
			else
			{
				glTranslatef(Entities[Entities[i]->Parent]->Position.x,
					Entities[Entities[i]->Parent]->Position.y,
					Entities[Entities[i]->Parent]->Position.z);

				glRotatef(Entities[Entities[i]->Parent]->Rotation.x, 1.f, 0.f, 0.f);
				glRotatef(Entities[Entities[i]->Parent]->Rotation.y, 0.f, 1.f, 0.f);
				glRotatef(Entities[Entities[i]->Parent]->Rotation.z, 0.f, 0.f, 1.f);

				glTranslatef(Entities[i]->Position.x,
					Entities[i]->Position.y,
					Entities[i]->Position.z);
			}
			glScalef(Entities[i]->Scale.x,
				Entities[i]->Scale.y,
				Entities[i]->Scale.z);

			if (Entities[i]->HasCollider && Entities[i]->ShowCollider)
			{
				glBindTexture(GL_TEXTURE_2D, 0);

				glEnableClientState(GL_VERTEX_ARRAY);
				glPushMatrix();

				if (Entities[i]->IsCollidingWithAnyEntity())
					Entities[i]->ColliderColor = Color(1.f, 0.f, 0.f);
				else
					Entities[i]->ColliderColor = Color(0.f, 1.f, 0.f);

				glColor3f(Entities[i]->ColliderColor.R(), Entities[i]->ColliderColor.G(), Entities[i]->ColliderColor.B());

				if (Entities[i]->CollisionType == eCollisionType::ORIENTED_BOX || Entities[i]->CollisionType == eCollisionType::BOX)
				{
					glVertexPointer(3, GL_FLOAT, 0, NTV_LineCube);
					glDrawArrays(GL_LINES, 0, 24);
				}
				else if (Entities[i]->CollisionType == eCollisionType::SPHERE)
				{
					glScalef(Entities[i]->Scale.x,
						Entities[i]->Scale.y,
						Entities[i]->Scale.z);
					glVertexPointer(3, GL_FLOAT, 0, NTV_Sphere);
					glDrawArrays(GL_POINTS, 0, 5952);
				}

				glColor3f(1.0f, 1.0f, 1.0f);

				glPopMatrix();
				glDisableClientState(GL_VERTEX_ARRAY);
			}

				//Light.useProgram();
//problem starts here
				glm::mat4 mModelView = Renderer->GetViewMatrix();
				glm::mat4 mModelToCamera;

				Light.setUniform("sunLight.vColor", glm::vec3(1.0f, 1.0f, 1.0f));
				Light.setUniform("sunLight.fAmbientIntensity", 0.95f);
				Light.setUniform("sunLight.vDirection", -glm::normalize(glm::vec3(5.f, 1.f, 0)));

				Light.setUniform("projectionMatrix", Renderer->GetProjectionMatrix());

				Light.setUniform("gSampler", 0);

				Light.setUniform("modelViewMatrix", &mModelView);
				Light.setUniform("vColor", glm::vec4(0.0f, 1.0f, 1.0f, 1.0f));

				glm::vec3 vPos = glm::vec3(Entities[i]->Position.x, Entities[i]->Position.y, Entities[i]->Position.z);
				mModelToCamera = glm::translate(glm::mat4(1.0), vPos);
				mModelToCamera = glm::rotate(mModelToCamera, 0.f, glm::vec3(0.0f, 1.0f, 0.0f));
				Light.setUniform("normalMatrix", glm::transpose(glm::inverse(mModelToCamera)));
				Light.setUniform("modelViewMatrix", mModelView*mModelToCamera);
			//problem "finish" here (lol)



			Entities[i]->Mesh->render();

			glPopMatrix();
		}
	}

	OGLImGui::DrawGUI();

	return TRUE;
}

When this code is reach the shaders are loaded properly and I use glUseProgram to enable them before any rendering. I tried to change the order of the lines since OpenGL is very sensitive with the order but still nothing. Maybe I am missing something, I'm not sure. Does anyone know what could be the problem? if any other code is needed ask please.

Thanks in advance.

Edited by Tonyx97

Share this post


Link to post
Share on other sites
Advertisement

Disable the shader program after rendering whatever you want to render with it. Afaik binding a shader program disables all the fixed function pipeline stuff, you're binding it once and never unbinding it. Further draw calls will all be made with that program.

 

Doing that kinda mix and match of fixed function and programmable pipelines will end up in such issues. You should strive to use either one or the other. Preferably the latter. If you dont want to deal with such hassles, you can always grab a rendering engine that does it for you.

Share this post


Link to post
Share on other sites

Thanks you! At least now I know that was the problem and it's almost fixed. Now I've to figure out how to apply textures without shader (or with it) because I'm trying to glBindTexture but that's not even working. I've edited my rendering function like this:

BOOL DrawGLScene()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	
	//MESHES & SKYBOX RENDERING

	CSkybox::RenderSkybox(0, 0, 0, 1, 1, 1);
	Camera->UpdateCamera();

	RenderSpaceLines();


	Light.useProgram();
	glm::mat4 mModelView = Renderer->GetViewMatrix();
	glm::mat4 mModelToCamera;
	Light.setUniform("sunLight.vColor", glm::vec3(0.0f, 1.0f, 1.0f));
	Light.setUniform("sunLight.fAmbientIntensity", 0.95f);
	Light.setUniform("sunLight.vDirection", -glm::normalize(glm::vec3(5.f, 1.f, 0)));
	Light.setUniform("projectionMatrix", Renderer->GetProjectionMatrix());
	Light.setUniform("gSampler", 0);
	Light.setUniform("modelViewMatrix", &mModelView);
	Light.setUniform("vColor", glm::vec4(0.0f, 1.0f, 1.0f, 1.0f));

	for (uint i = 0; i < EntityManager::GetEntities(); i++)
	{
		if (Entities[i] && Entities[i]->ID != INT_MAX && Vector3::Distance(Camera->position, Entities[i]->Position) <= Renderer->GetRenderMaxDistance())	//AVOIDING RENDER ENTITIES THAT ARE OUTSIDE OF MAX DISTANCE
		{
			glPushMatrix();

			if (Entities[i]->Parent == -1)
			{
				glTranslatef(Entities[i]->Position.x,
					Entities[i]->Position.y,
					Entities[i]->Position.z);
				glRotatef(Entities[i]->Rotation.x, 1.f, 0.f, 0.f);
				glRotatef(Entities[i]->Rotation.y, 0.f, 1.f, 0.f);
				glRotatef(Entities[i]->Rotation.z, 0.f, 0.f, 1.f);
			}
			else
			{
				glTranslatef(Entities[Entities[i]->Parent]->Position.x,
					Entities[Entities[i]->Parent]->Position.y,
					Entities[Entities[i]->Parent]->Position.z);

				glRotatef(Entities[Entities[i]->Parent]->Rotation.x, 1.f, 0.f, 0.f);
				glRotatef(Entities[Entities[i]->Parent]->Rotation.y, 0.f, 1.f, 0.f);
				glRotatef(Entities[Entities[i]->Parent]->Rotation.z, 0.f, 0.f, 1.f);

				glTranslatef(Entities[i]->Position.x,
					Entities[i]->Position.y,
					Entities[i]->Position.z);
			}
			glScalef(Entities[i]->Scale.x,
				Entities[i]->Scale.y,
				Entities[i]->Scale.z);

			if (Entities[i]->HasCollider && Entities[i]->ShowCollider)
			{
				glUseProgram(0);
				glBindTexture(GL_TEXTURE_2D, 0);

				glEnableClientState(GL_VERTEX_ARRAY);
				glPushMatrix();

				if (Entities[i]->IsCollidingWithAnyEntity())
					Entities[i]->ColliderColor = Color(1.f, 0.f, 0.f);
				else
					Entities[i]->ColliderColor = Color(0.f, 1.f, 0.f);

				glColor3f(Entities[i]->ColliderColor.R(), Entities[i]->ColliderColor.G(), Entities[i]->ColliderColor.B());

				if (Entities[i]->CollisionType == eCollisionType::ORIENTED_BOX || Entities[i]->CollisionType == eCollisionType::BOX)
				{
					glVertexPointer(3, GL_FLOAT, 0, NTV_LineCube);
					glDrawArrays(GL_LINES, 0, 24);
				}
				else if (Entities[i]->CollisionType == eCollisionType::SPHERE)
				{
					glScalef(Entities[i]->Scale.x,
						Entities[i]->Scale.y,
						Entities[i]->Scale.z);
					glVertexPointer(3, GL_FLOAT, 0, NTV_Sphere);
					glDrawArrays(GL_POINTS, 0, 5952);
				}

				glColor3f(1.0f, 1.0f, 1.0f);

				glPopMatrix();
				glDisableClientState(GL_VERTEX_ARRAY);

				Light.useProgram();
			}


			glm::vec3 vPos = glm::vec3(Entities[i]->Position.x, Entities[i]->Position.y, Entities[i]->Position.z);
			mModelToCamera = glm::translate(glm::mat4(1.0), vPos);
			mModelToCamera = glm::rotate(mModelToCamera, 0.f, glm::vec3(0.0f, 1.0f, 0.0f));
			Light.setUniform("normalMatrix", glm::transpose(glm::inverse(mModelToCamera)));
			Light.setUniform("modelViewMatrix", mModelView*mModelToCamera);


			Entities[i]->Mesh->render();


			glPopMatrix();
		}
	}
	glUseProgram(0);

	OGLImGui::DrawGUI();

	return TRUE;
}

and the "render" function of a mesh is (Entities->Mesh->render()):

void CMesh::MeshEntry::render()
{
	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableClientState(GL_NORMAL_ARRAY);
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);

	glVertexPointer(3, GL_FLOAT, 0, (GLfloat*)VertexCoords.data());
	glNormalPointer(GL_FLOAT, 0, (GLfloat*)NormalCoords.data());
	glTexCoordPointer(2, GL_FLOAT, 0, (GLfloat*)TextureCoords.data());
	glBindTexture(GL_TEXTURE_2D, TextureManager::Texture[modelName]);

	glDrawArrays(GL_TRIANGLES, 0, VertexSize);											//ALWAYS GL_TRIANGLES (PROBABLY the ENGINE WILL SUPPORT QUAD IN THE FUTURE)

	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
	glDisableClientState(GL_NORMAL_ARRAY);
	glDisableClientState(GL_VERTEX_ARRAY);

}

Also when I move the camera the entities are like "lagged", I don't know if that's a shader problem or I should edit the order of the code.. Now it's like this:

7b7a7d29f74965c03fc9212a2dfc2f61.jpg

Edited by Tonyx97

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement