In a GLSL shader, what might cause the value of “p3d_Color” to be black in generated geometry, presuming that not explicit vertex-colours have been set (by me, at least)?
To be specific, I’m generating a few pieces of geometry, some using CardMaker and some using MeshDrawer, and I’m applying a work-in-progress shader to each. For now, the shader does little, but it does attempt to access “p3d_Color”–and alas, that input seems to always be black.
This despite my not setting any colour (that I’m aware of) on the CardMaker-generated cards, and applying various colours within the generative calls to MeshDrawer.
What might be causing this behaviour?
(I feel like I’m making some silly mistake here…)
Here’s a short program that produces the behaviour on my machine:
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CardMaker, NodePath, Shader
from panda3d import __version__ as pandaVersion
print (pandaVersion)
import sys
print (sys.version)
class Game(ShowBase):
def __init__(self):
ShowBase.__init__(self)
cardMaker = CardMaker("kitty")
self.np = NodePath(cardMaker.generate())
self.np.setPos(-0.5, 4, -0.5)
self.np.reparentTo(render)
shader = Shader.make(Shader.SL_GLSL,
"""#version 130
in vec4 p3d_Vertex;
uniform mat4 p3d_ModelViewProjectionMatrix;
void main()
{
gl_Position = p3d_ModelViewProjectionMatrix*p3d_Vertex;
}""",
"""#version 130
in vec2 texCoord;
in vec4 p3d_Color;
out vec4 color;
void main()
{
color.xyz = p3d_Color.xyz;
color.w = 1;
}"""
)
self.np.setShader(shader)
self.accept("escape", base.userExit)
app = Game()
app.run()