Мне не удалось устранить некорректное отображение цветов на объектах-шарах. (Обратите внимание: это проект - некоторая реализация может быть странной из-за ограничений). Меня устраивает положение вершин, но мне трудно передать какое-либо значение цвета во фрагментный шейдер.
Вот соответствующий код:
Измените, чтобы добавить полный пример кода
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
Основной цикл + цикл рендеринга:
#pragma once
#include "GLheader.h"
#include
#include //for PI
#include
#include
#include "Shader.h"
#include "Ball.h"
int scr_width = 1024;
int scr_height = 768;
std::string vs = "basic.vert", fs = "basic.frag";
std::string vs_test = "test.vert", fs_test = "test.frag";
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);
}
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;
}
}
int main() {
if (!glfwInit()) {
fprintf(stderr, "GLFW could not be initialised");
return -1;
}
GLFWwindow* window;
Shader shader;
try {
window = createWindow();
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
_initglew();
Ball ball = Ball(FILLED);
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageCallback(MessageCallback, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
shader = Shader();
while (!glfwWindowShouldClose(window)) {
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
shader.use();
ball.draw();
glfwSwapBuffers(window);
glfwPollEvents();
}
}
catch (const char* msg) {
fprintf(stderr, msg);
return -1;
}
catch (const std::exception& e) {
fprintf(stderr, e.what());
return -1;
}
glfwTerminate();
return 0;
}
Объект «Шар»:
#include "Ball.h"
#include
#include
#include
#include
#include //for PI
#include
#include "GLheader.h"
bool isValidPixelPosition(float x, float y, float z);
bool isValidPixelPosition(float p);
Ball::Ball() : Ball(OUTLINE) {//colour(glm::uvec4(constants::BLACK,1.0f)), n_pixels(0), ID(ball::counter) {
}
Ball::Ball(DRAW_MODE mode) : colour(glm::vec4(0.0f)), n_pixels(0), ID(counter), draw_mode(mode) {
counter++;
std::vector pixel_positions = std::vector();
std::vector pixel_colors = std::vector();
std::vector transform = std::vector();
init();
}
Ball::~Ball() {
pixel_positions.clear();
pixel_colours.clear();
}
void Ball::init() {
randomize();
bool success = init_pixels();//this must be called before init VAO
if (!success) {
std::cout
Подробнее здесь: https://stackoverflow.com/questions/791 ... value-gl-i
Цвета не отображаются должным образом при использовании нескольких VBO OpenGL (GL_INVALID_VALUE,GL_INVALID_OPERATION) [з ⇐ C++
Программы на C++. Форум разработчиков
1729976745
Anonymous
Мне не удалось устранить некорректное отображение цветов на объектах-шарах. (Обратите внимание: это проект - некоторая реализация может быть странной из-за ограничений). Меня устраивает положение вершин, но мне трудно передать какое-либо значение цвета во фрагментный шейдер.
Вот соответствующий код:
[b]Измените, чтобы добавить полный пример кода[/b]
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
Основной цикл + цикл рендеринга:
#pragma once
#include "GLheader.h"
#include
#include //for PI
#include
#include
#include "Shader.h"
#include "Ball.h"
int scr_width = 1024;
int scr_height = 768;
std::string vs = "basic.vert", fs = "basic.frag";
std::string vs_test = "test.vert", fs_test = "test.frag";
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);
}
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;
}
}
int main() {
if (!glfwInit()) {
fprintf(stderr, "GLFW could not be initialised");
return -1;
}
GLFWwindow* window;
Shader shader;
try {
window = createWindow();
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
_initglew();
Ball ball = Ball(FILLED);
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageCallback(MessageCallback, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
shader = Shader();
while (!glfwWindowShouldClose(window)) {
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
shader.use();
ball.draw();
glfwSwapBuffers(window);
glfwPollEvents();
}
}
catch (const char* msg) {
fprintf(stderr, msg);
return -1;
}
catch (const std::exception& e) {
fprintf(stderr, e.what());
return -1;
}
glfwTerminate();
return 0;
}
Объект «Шар»:
#include "Ball.h"
#include
#include
#include
#include
#include //for PI
#include
#include "GLheader.h"
bool isValidPixelPosition(float x, float y, float z);
bool isValidPixelPosition(float p);
Ball::Ball() : Ball(OUTLINE) {//colour(glm::uvec4(constants::BLACK,1.0f)), n_pixels(0), ID(ball::counter) {
}
Ball::Ball(DRAW_MODE mode) : colour(glm::vec4(0.0f)), n_pixels(0), ID(counter), draw_mode(mode) {
counter++;
std::vector pixel_positions = std::vector();
std::vector pixel_colors = std::vector();
std::vector transform = std::vector();
init();
}
Ball::~Ball() {
pixel_positions.clear();
pixel_colours.clear();
}
void Ball::init() {
randomize();
bool success = init_pixels();//this must be called before init VAO
if (!success) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79124018/colours-not-displaying-properly-with-opengl-multiple-vbos-gl-invalid-value-gl-i[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия