Цвета не отображаются должным образом при использовании нескольких VBO OpenGL (GL_INVALID_VALUE,GL_INVALID_OPERATION) [зC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Цвета не отображаются должным образом при использовании нескольких VBO OpenGL (GL_INVALID_VALUE,GL_INVALID_OPERATION) [з

Сообщение Anonymous »

Мне не удалось устранить некорректное отображение цветов на объектах-шарах. (Обратите внимание: это проект - некоторая реализация может быть странной из-за ограничений). Меня устраивает положение вершин, но мне трудно передать какое-либо значение цвета во фрагментный шейдер.
Вот соответствующий код:
Измените, чтобы добавить полный пример кода
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»