OpenGL - Unable to render colors other than white after texture mapping

可紊 提交于 2019-12-11 07:33:18

问题


I'm trying to render a colored cube after rendering other cubes that have textures. I have multiple "Drawer" objects that conform to the Drawer interface, and I pass each a reference to the GL object to the draw( final GL gl ) method of each individual implementing class. However, no matter what I do, I seem unable to render a colored cube.

Code sample:

gl.glDisable(GL.GL_TEXTURE_2D);

gl.glColor3f( 1f, 0f, 0f );
gl.glBegin(GL.GL_QUADS);
// Front Face
Point3f point = player.getPosition();

gl.glNormal3f(0.0f, 0.0f, 1.0f);
//gl.glTexCoord2f(0.0f, 0.0f);

gl.glVertex3f(-point.x - 1.0f, -1.0f, -point.z + 1.0f);
//gl.glTexCoord2f(1.0f, 0.0f);

gl.glVertex3f(-point.x + 1.0f, -1.0f, -point.z + 1.0f);
//continue rendering rest of cube. ...
gl.glEnd();
gl.glEnable(GL.GL_TEXTURE_2D);

I've also tried throwing the glColor3f calls before each vertex call, but that still gives me a white cube. What's up?


回答1:


There are a few things you need to make sure you do.

First off:

gl.glEnable(gl.GL_COLOR_MATERIAL);

This will let you apply colors to your vertices. (Do this before your calls to glColor3f.)

If this still does not resolve the problem, ensure that you are using blending properly (if you're using blending at all.)

For most applications, you'll probably want to use

gl.glEnable(gl.GL_BLEND);
gl.glBlendFunc(gl.GL_SRC_ALPHA,gl.GL_ONE_MINUS_SRC_ALPHA);

If neither of these things solve your problem, you might have to give us some more information about what you're doing/setting up prior to this section of your code.




回答2:


If lighting is enabled, color comes from the material, not the glColor vertex colors. If your draw function that you mentioned is setting a material for the textured objects (and a white material under the texture would be common) then the rest of the cubes would be white. Using GL_COLOR_MATERIAL sets up OpenGL to take the glColor commands and update the material instead of just the vertex color, so that should work.

So, simply put, if you have lighting enabled, try GL_COLOR_MATERIAL.




回答3:


One thing you might want to try is: glBindTexture(GL_TEXTURE_2D, 0); to bind the texture to nil.




回答4:


Some things to check:

  • Is there a shader active?
  • Any gl-errors?
  • What other states did you change? For example GL_COLOR_MATERIAL, blending or lighting will change the appearance of your geometry.
  • Does it work if you draw the non-textured cube first? And if it does try to figure out at which point it turns white. It's also possible that the cube will only show up in the correct color in the first frame, then there's definitely a GL state involved.
  • Placing glPushAttrib/glPopAttrib at the beginning/end of your drawing methods might help, but it's better to figure out what caused the problem in the first place.


来源:https://stackoverflow.com/questions/820263/opengl-unable-to-render-colors-other-than-white-after-texture-mapping

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!