Мне не удалось устранить некорректное отображение цветов на объектах-шарах. (Обратите внимание: это проект - некоторая реализация может быть странной из-за ограничений). Меня устраивает положение вершин, но мне трудно передать какое-либо значение цвета во фрагментный шейдер.
Вот соответствующий код:
Измените, чтобы добавить полный пример кода
GLheader.h
/*
* This is to avoid linker errors that were occurring
*/
#pragma once
#define GLEW_STATIC 1 // This allows linking with Static Library on Windows, without DLL
#include // Include GLEW - OpenGL Extension Wrangler
#include
#include
#include "glm/ext.hpp" //to use string_cast
#include
#include "glm/gtx/string_cast.hpp" //glm::to_string()
#include
фрагменты классов шейдеров
#include
#include
#include
#include
#include
namespace fs = std::filesystem;
void Shader::compileAndLink(const std::string& vertexShaderFile, const std::string& fragmentShaderFile) {
/*
* compile and link shader program
* assign shader program id to this->ID
*/
//vertex shader
int vertexShader = glCreateShader(GL_VERTEX_SHADER);
std::string vertSource = getShaderSource(vertexShaderFile);
const char* vs = vertSource.c_str();
glShaderSource(vertexShader, 1, &vs, NULL);
glCompileShader(vertexShader);
// check for shader compile errors
checkCompileErrors(vertexShader, "VERTEX");
// fragment shader
int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
std::string fragSource = getShaderSource(fragmentShaderFile);
const char* fs = fragSource.c_str();
glShaderSource(fragmentShader, 1, &fs, NULL);
glCompileShader(fragmentShader);
// check for shader compile errors
checkCompileErrors(fragmentShader, "FRAGMENT");
// link shaders
this->ID = glCreateProgram();
glAttachShader(this->ID, vertexShader);
glAttachShader(this->ID, fragmentShader);
glLinkProgram(this->ID);
// check for linking errors
checkCompileErrors(this->ID, "PROGRAM");
// delete the shaders as they're linked into our program now and no longer necessary
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
}
void Shader::checkCompileErrors(unsigned int shader, const std::string& type){
int success;
char infoLog[1024];
if (type != "PROGRAM")
{
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(shader, 1024, NULL, infoLog);
std::cout
Подробнее здесь: https://stackoverflow.com/questions/791 ... invalid-op