Как сделать шестиугольник? VS показывает только треугольникC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как сделать шестиугольник? VS показывает только треугольник

Сообщение Anonymous »

Я пытаюсь создать шестиугольник и изучить тесселяцию, но когда я выполняю все, что вижу, это треугольник.
У меня Nvidia 4080, драйверы обновлены. Я уже проверил библиотеки и думаю, что с ними все в порядке.

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 

glm::vec3 hexagonPoints[] = {
{0.0f,  0.5f, 0.0f},
{0.433f,  0.25f, 0.0f},
{0.433f, -0.25f, 0.0f},
{0.0f, -0.5f, 0.0f},
{-0.433f, -0.25f, 0.0f},
{-0.433f,  0.25f, 0.0f},
};

GLuint hexagonVBO, hexagonVAO;

const char* vertexShaderSource = R"(
#version 400 core
layout (location = 0) in vec3 aPos;
void main() {
gl_Position = vec4(aPos, 1.0);
}
)";

const char* tessControlShaderSource = R"(
#version 400 core
layout(vertices = 6) out;
void main() {
if (gl_InvocationID == 0) {
gl_TessLevelInner[0] = 1.0;
gl_TessLevelInner[1] = 1.0;
gl_TessLevelOuter[0] = 1.0;
gl_TessLevelOuter[1] = 1.0;
gl_TessLevelOuter[2] = 1.0;
gl_TessLevelOuter[3] = 1.0;
}
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
}
)";

const char* tessEvalShaderSource = R"(
#version 400 core
layout(triangles) in;
void main() {
gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +
(gl_TessCoord.y * gl_in[1].gl_Position) +
(gl_TessCoord.z * gl_in[2].gl_Position);
}
)";

const char* fragmentShaderSource = R"(
#version 400 core
out vec4 FragColor;
void main() {
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
)";

void setupHexagonVAO() {
glGenVertexArrays(1, &hexagonVAO);
glBindVertexArray(hexagonVAO);

glGenBuffers(1, &hexagonVBO);
glBindBuffer(GL_ARRAY_BUFFER, hexagonVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(hexagonPoints), hexagonPoints, GL_STATIC_DRAW);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
}

GLuint compileShader(GLenum type, const char* source) {
GLuint shader = glCreateShader(type);
glShaderSource(shader, 1, &source, nullptr);
glCompileShader(shader);

int success;
char infoLog[512];
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
if (!success) {
glGetShaderInfoLog(shader, 512, nullptr, infoLog);
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/79218662/how-can-i-do-an-hexagon-vs-only-shows-a-triangle[/url]
Ответить

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

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

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

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

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