我正在尝试传递一组顶点及其对应的颜色以进行GL镶嵌混合。我的代码很丑陋,可能有很多错误,但是主要问题是我无法将顶点和颜色数组传递给GLSL。我想知道一种在没有GLSL的情况下做到这一点的方法。谢谢。
我已经尝试不推荐使用非GLSL GL函数,并且没有充分利用我的着色器文件。它似乎不想渲染形状。
main.cpp void'display()':
void display(void)
{
//glfwMakeContextCurrent(wavebricks_window); glLoadIdentity();
//glTranslatef(1.5f, 0.0f, -7.0f);
for (int it =0; it<instruments.size();it++){
alGetSourcef(instruments[it].soundsource, AL_SEC_OFFSET, &tracking);
instruments[it].currentStep=tracking*(60/tempo);
instruments[it].currentStep=tracking;
instruments[it].tempo=tempo;
instruments[it].render();
float verts[instruments[it].voices_spinner*3];
float colors[instruments[it].voices_spinner*4];
std::string vertexShader;
std::string fragmentShader;
unsigned int indices[instruments[it].voices_spinner*3];
for (int i=0;i<instruments[it].voices_spinner;i++){
indices[i]=i;
}
for (int i=instruments[it].voices_spinner-1;i>=0;i--){
indices[instruments[it].voices_spinner+i]=instruments[it].voices_spinner-1-i;
}
for (int i=instruments[it].voices_spinner-1;i>=0;i--){
indices[instruments[it].voices_spinner*2+i]=i;
}
for(int i=0; i<instruments[it].voices_spinner; i++){
verts[3*i]=instruments[it].instrumentPoly[i][0];
cout<<"\n"<<verts[3*i]<<",";
verts[3*i+1]=instruments[it].instrumentPoly[i][1];
cout<<verts[3*i+1]<<",";
verts[3*i+2]=instruments[it].instrumentPoly[i][2];
cout<<verts[3*i+2]<<":";
colors[4*i]=-instruments[it].instrumentPoly[i][3];
cout<<colors[4*i]<<",";
colors[4*i+1]=-instruments[it].instrumentPoly[i][4];
cout<<colors[4*i+1]<<",";
colors[4*i+2]=-instruments[it].instrumentPoly[i][5];
cout<<colors[4*i+2]<<";\n";
colors[4*i+3]=1.0f;
}
Renderer renderer;
renderer.Clear();
VertexArray va;
VertexBuffer vb(verts, instruments[it].voices_spinner*3*4);
Shader shader("shade.shader", "shader2.shader");
VertexBufferLayout layout;
layout.Push<float>(3);
va.AddBuffer(vb, layout);
IndexBuffer ib(indices,instruments[it].voices_spinner * 3*4);
//shader.Bind();
shader.SetUniform4f("u_Color",0.8f,0.3f,0.8f,1.0f);
//va.Bind();
//ib.Bind();
//GLint MaxPatchVertices = 0;
//glGetIntegerv(GL_MAX_PATCH_VERTICES, &MaxPatchVertices);
//printf("Max supported patch vertices %d\n", MaxPatchVertices);
glPatchParameteri(GL_PATCH_VERTICES, instruments[it].voices_spinner*3);
renderer.Draw(va, ib, shader);
float r = 0.0f;
float increment=0.05f;
/*va.Unbind();
vb.Unbind();
ib.Unbind();
shader.Unbind();*/
}
}
shader.shader:
#version 420
#extension GL_ARB_separate_shader_objects : enable
uniform vec3 initialUniform = vec3(1.0, 0.0, 0.0);
layout(vertices = 128) uniform initialUniform out;
void main(){
gl_out[gl_InvocationID].gl_Position= gl_in[gl_InvocationID].gl_Position;// and then set tessellation levels
}
in gl_PerVertex {
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[]
} gl_in[gl_PatchVerticesIn];
shader2.shader:
#version 420
#GL_ARB_separate_shader_objects : enable
uniform vec3 initialUniform = vec3(1.0, 0.0, 0.0);
layout (triangles, equal_spacing, ccw) uniform initialUniform in;
out vec4 color;
void main()
{
float u=gl_TessCoord.x;
float omu= 1-u;
float v = gl_TessCoord.y;
float omv = 1-v;
float m = gl_TessCoord.z;
float omm = 1-m;
color = gl_TessCoord;
gl_Position =
omu * omv * gl_in[0].gl_Position +
u* omv * gl_in[1].gl_Position +
u*v*gl_in[2].gl_Position+
omu*v*gl_in[3].gl_Position;
}
in gl_PerVertex {
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[]
} gl_in[gl_PatchVerticesIn];
out gl_PerVertex
{
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[]
};
我希望在屏幕上看到可变形状的形状以及它们计算出的顶点和颜色。相反,我什么也没看到。实际上,我正在尝试对三角形进行细分,甚至不知道如何设置3D着色器坐标。请帮忙。