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

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

Сообщение 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

Подробнее здесь: https://stackoverflow.com/questions/791 ... invalid-op
Ответить

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

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

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

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

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