Мне не удалось устранить проблему неправильного отображения цветов на объектах-шарах. (Обратите внимание: это проект — некоторая реализация может быть странной из-за ограничений). Меня устраивает положение вершин, но мне трудно передать какое-либо значение цвета во фрагментный шейдер.
Полный пример кода:
#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 //for PI
#include
#include
#include
int scr_width = 1024;
int scr_height = 768;
static std::random_device rd;
static enum DRAW_MODE {
OUTLINE,
FILLED
};
static int counter = 0;
const glm::vec3 test_colour = glm::vec3(1.0f, 0.0f, 0.0f); //Red
const char* fs_source = "#version 410 core\n"
"out vec4 FragColor;\n"
"in vec3 vertexColor; \n"
"in float alpha; \n"
"void main()\n"
"{\n"
"FragColor = vec4(vertexColor,alpha);\n"
"}\0";
const char* vs_source = "#version 410 core\n"
"layout(location = 0) in vec3 aPos;\n"
"layout(location = 1) in vec3 aColor;\n"
"layout(location = 2) in float alphaValue;\n"
"out vec3 vertexColor;\n"
"out float alpha;\n"
"void main()\n"
"{\n"
"gl_Position = vec4(aPos, 1.0f);\n"
"vertexColor = aColor;\n"
"alpha = alphaValue;\n"
"}\0";
void GLAPIENTRY
MessageCallback(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar* message,
const void* userParam)
{
fprintf(stderr, "GL CALLBACK: %s type = 0x%x, severity = 0x%x, message = %s\n",
(type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : ""),
type, severity, message);
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glfwGetWindowSize(window, &scr_width, &scr_height);
}
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
float random_float(float min, float max) {
//includes min and max value
static std::mt19937 randomgen(rd());
if (max < min) {
float temp = max;
max = min;
min = temp;
if (max < min)
throw std::invalid_argument("Cannot evaluate random float, invalid man and min args");
}
std::uniform_real_distribution distribution(min, max);
float r = distribution(randomgen);
return r;
}
GLFWwindow* createWindow(void) {
glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwSwapInterval(1);
GLFWwindow* window = glfwCreateWindow(scr_width, scr_height, "test window", NULL, NULL);
if (!window) {
const char* msg = "GLFW Window object could not be initialised.";
throw msg;
}
return window;
}
void _initglew(void) {
glewExperimental = true;
if (glewInit() != GLEW_OK) {
const char* msg = "GLEW could not be initialised";
throw msg;
}
}
bool isValidPixelPosition(float x, float y, float z) {
//dont need to check z (always 0)
if (abs(x) > 1.0f || abs(y) > 1.0f || z != 0.0f) {//
std::cout
Подробнее здесь: https://stackoverflow.com/questions/791 ... invalid-op
Цвета не отображаются с несколькими VBO OpenGL (GL_INVALID_VALUE,GL_INVALID_OPERATION) [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1730319450
Anonymous
Мне не удалось устранить проблему неправильного отображения цветов на объектах-шарах. (Обратите внимание: это проект — некоторая реализация может быть странной из-за ограничений). Меня устраивает положение вершин, но мне трудно передать какое-либо значение цвета во фрагментный шейдер.
Полный пример кода:
#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 //for PI
#include
#include
#include
int scr_width = 1024;
int scr_height = 768;
static std::random_device rd;
static enum DRAW_MODE {
OUTLINE,
FILLED
};
static int counter = 0;
const glm::vec3 test_colour = glm::vec3(1.0f, 0.0f, 0.0f); //Red
const char* fs_source = "#version 410 core\n"
"out vec4 FragColor;\n"
"in vec3 vertexColor; \n"
"in float alpha; \n"
"void main()\n"
"{\n"
"FragColor = vec4(vertexColor,alpha);\n"
"}\0";
const char* vs_source = "#version 410 core\n"
"layout(location = 0) in vec3 aPos;\n"
"layout(location = 1) in vec3 aColor;\n"
"layout(location = 2) in float alphaValue;\n"
"out vec3 vertexColor;\n"
"out float alpha;\n"
"void main()\n"
"{\n"
"gl_Position = vec4(aPos, 1.0f);\n"
"vertexColor = aColor;\n"
"alpha = alphaValue;\n"
"}\0";
void GLAPIENTRY
MessageCallback(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar* message,
const void* userParam)
{
fprintf(stderr, "GL CALLBACK: %s type = 0x%x, severity = 0x%x, message = %s\n",
(type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : ""),
type, severity, message);
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glfwGetWindowSize(window, &scr_width, &scr_height);
}
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
float random_float(float min, float max) {
//includes min and max value
static std::mt19937 randomgen(rd());
if (max < min) {
float temp = max;
max = min;
min = temp;
if (max < min)
throw std::invalid_argument("Cannot evaluate random float, invalid man and min args");
}
std::uniform_real_distribution distribution(min, max);
float r = distribution(randomgen);
return r;
}
GLFWwindow* createWindow(void) {
glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwSwapInterval(1);
GLFWwindow* window = glfwCreateWindow(scr_width, scr_height, "test window", NULL, NULL);
if (!window) {
const char* msg = "GLFW Window object could not be initialised.";
throw msg;
}
return window;
}
void _initglew(void) {
glewExperimental = true;
if (glewInit() != GLEW_OK) {
const char* msg = "GLEW could not be initialised";
throw msg;
}
}
bool isValidPixelPosition(float x, float y, float z) {
//dont need to check z (always 0)
if (abs(x) > 1.0f || abs(y) > 1.0f || z != 0.0f) {//
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79124018/colours-not-displaying-with-opengl-multiple-vbos-gl-invalid-value-gl-invalid-op[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия