我正在努力編寫這個簡單的船場景。這是一個家庭作業問題,但我真的很難過。我有兩個模型,我上傳。一個是具有片段着色器的立方體,將自身染成藍色。第二種是具有片段着色器的船,其顏色爲白色。當我使用兩種不同的着色器時,船模不可見。經過許多努力和搜索如何在渲染之間更改片段着色器顏色?
我很難過,所以我正在嘗試計劃B,這是找到一種方法來改變渲染兩個對象之間的片段着色器的顏色,但我無法找到如何做到這一點。
void render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//BOAT START
//Rocks the ship, simulating ocean rocking
if(shiprocker < 5000){
shiprocker++;
theta += 0.00002f;
}
if(shiprocker ==15000){
shiprocker = -5000;
}
if(shiprocker > 4999){
shiprocker++;
theta -= 0.00002f;
}
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
boat_model->mR = glm::rotate(
glm::mat4(1.0f),
glm::degrees(theta),
glm::vec3(0.0f, 0.0f, 1.0f)
);
glm::mat4 mtx_trans = glm::translate(
glm::mat4(1.0f),
glm::vec3(0.0f, 0.0f, -15.0f)
);
boat_model->mM = mtx_trans * boat_model->mR;
boat_model->render();
//BOAT END
//OCEAN CUBE START
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glm::mat4 mtx_trans_cube = glm::translate(
glm::mat4(1.0f),
glm::vec3(-20.0f, -50.0f, -50.0f)
);
plane_model->mM = glm::scale(
mtx_trans_cube,
glm::vec3(10.0f, 10.0f, 10.0f)
);
//gl_FragColor = (0.0f, 0.0f, 1.0f , 1.0f); wont compile
//glColor3f(0.0f, 0.0f, 1.0f); changes nothing
camera->set_uniform_view_perspective(plane_model->shader->program_ID);
plane_model->render();
//OCEAN CUBE END
glutSwapBuffers();
}
int main (int argc, char** argv) {
// Initialize GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_MULTISAMPLE | GLUT_RGB);
//WINDOW SETTINGS
glutInitWindowSize(1000, 1000);
glutCreateWindow("SailBoat");
//PASSIVE FUNCS
glutReshapeFunc(change_viewport);
glutDisplayFunc(render);
glutIdleFunc(animate);
//ERROR CHECK
if (GLEW_OK != glewInit()) {
exit(1);
}
//Clear color used for sky tones.
glClearColor(0.529f, 0.807f, .98f, 1.0f);
glEnable (GL_DEPTH_TEST);
glEnable (GL_MULTISAMPLE);
Shader* boatShader = new Shader(VERTEX_SHADER, BOAT_FRAGMENT_SHADER);
Shader* cubeShader = new Shader(VERTEX_SHADER, CUBE_FRAGMENT_SHADER);
//BOAT
boat_model = new Model(boatShader);
load_model(boat_model ,MODEL_BOAT_FILENAME);
boat_model->upload_2_server();
//OCEAN CUBE
plane_model = new Model(boatShader);
load_model(plane_model ,MODEL_PLANE_FILENAME);
plane_model->upload_2_server();
// Set up the camera
theta = 0.0f;
shiprocker = 0;
camera = new FPSCamera(60.0f, 1.0f, 1.0f, 10000.0f, true);
glutMainLoop();
return 0;
}
片段着色器
#version 150
in vec4 color;
out vec4 fColor;
void main() {
fColor = vec4(1.0, 1.0, 1.0, 0.5);
}
您是否嘗試過使用GLSL統一變量? –
在你的'Model.render'函數中,你是在調用'Shader-> use'還是類似的東西? – Benproductions1